這節目前不怎麼有用, 可以跳過遇到再來看
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
其可使用的數據類型如下
以下是msg檔案的一個例子, 每一行都是一個data typeint8, int16, int32, int64 (plut uint*) float32, float64 string time, duration other msg files variable-length array[] and fixed-length array[C]
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中
注意到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
接下來我們重新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