這節目前不怎麼有用, 可以跳過遇到再來看

8.1 一些指令

  • rosed: 透過package名來編輯指定的file而不用指定file的路徑

    #rosed [package_name] [filename]
    rosed rospy genmsg_py.py
    
  • roscp: 從一個package複製資料到另一個package

    roscp [package_name] [file_to_copy_path] [copy_path]
    

8.2 一些名詞

  • msg: 描述ROS中的message類型的文本, 其會用來生成不同語言的source code 其可使用的數據類型如下
    int8, int16, int32, int64 (plut uint*)
    float32, float64
    string
    time, duration
    other msg files
    variable-length array[] and fixed-length array[C]
    
    以下是msg檔案的一個例子, 每一行都是一個data type
Header header # 此為一特殊的data type, 含有time stamp和coordinate frame information
string child_frame_id
geometry_msgs/PoseWithCovariance pose
geometry_msgs/TwistWithCovariance twist
  • srv: 描述ROS中的服務的文本, 包含兩個部分: request and response 以下是srv檔案的一個例子, request和response間由'---'分隔 ``` int64 A int64 B

int64 Sum

其中A,B為request, Sum為response

## 8.3 使用msg

首先在package裡面定義新的message

roscd beginner_tutorials mkdir msg echo "int64 num" > msg/Num.msg


為了確保msg被轉換為C++, Python等的source code

將其加到package.xml中

message_generation

message_runtime

注意到build時和run時的dependency不一樣

接著在CMakeLists.txt中將find_packagem catkin_package, add_message_files函數改為(或增加)如下

find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation )

catkin_package( ... CATKIN_DEPENDS message_runtime ... ...)

add_message_files( FILES Num.msg )

最後確認generate_mseeages這個函數沒有被註解掉

接下來檢查一下ROS是否有看到message

rosmsg show [message type]

rosmsg show beginner_tutorials/Num # return int64 num

you can discard the package name

rosmsg show Num



## 8.4 使用srv

在beginner_tutorials這個package中建立一個服務

我們利用roscp從rospy_tutorials這個package中複製一個服務過來

roscp rospy_tutorials AddTwoInts.srv srv/AddTwoInts.srv


接下來我們必須要確保srv文件轉換為C++, Python等其他語言的source code

因此我們在beginner_tutorials此package下的CMakeLists.txt修改find_package和add_service_files這部分為

find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation )

add_service_files( FILES AddTwoInts.srv )


一樣的我們也要在package.xml當中增加dependency

message_generation

message_runtime


接下來我們重新catkin_make一下, 並且看是否ROS有辨認到這個新加入的service

到catkin_ws下後執行

rossrv show beginner_tutorials/AddTwoInts

將會看到

int64 a

int64 b

int64 sum


另外我們也可以不指定package, 而是找所有有此服務的文件

rossrv show AddTwoInts

將會看到

[beginner_tutorials/AddTwoInts]: int64 a

int64 b

int64 sum

[rospy_tutorials/AddTwoInts]: int64 a

int64 b

int64 sum


## 8.5 msg/srv共通

CMakeLists.txt中

generate_messages( DEPENDENCIES std_msgs ) ``` 並重新catkin_make

results matching ""

    No results matching ""