ROS學習筆記八:創建ROS msg和srv
本節主要講述瞭如何創建和建立ROS msg和srv,同時使用命令行工具rosmsg、rossrv和roscp。
msg和srv簡介
- msg:描述ROS messages內容的簡單text文件,它們用來生成不同語言的messages源碼;
- srv:一個srv文件描述一個服務,它由兩部分組成:一個請求和一個迴應。
msg文件存放在一個軟件包的msg目錄中,而srv文件則存放在srv目錄中來。
msg文件
msg文件就是一個簡單的text文件,其中每行有一個類型和名稱,可用的類型如下:
int8, int16, int32, int64 (plus uint*)
float32, float64
string
time, duration
other msg files
variable-length array[] and fixed-length array[C]
Header(包含一個timestamp和座標系信息)
srv文件
srv文件和msg文件很相像,除了它包含兩個部分:請求和迴應
int64 A
int64 B
---
int64 sum
上面一部分爲request,下面一部分爲response。
使用msg
創建一個msg文件
cd ~/ros_tutorial/src/beginner-tutorial
mkdir msg
echo "int64 num">msg/Num.msg
由於msg文件用來產生C++,python等源代碼,需要進行一些配置。
首先是修改package.xml文件,確保該文件中以下三行內容沒有被註釋掉:
<build_depend>message_generation</build_depend>
<run_depend>message_generation</run_depend>
<run_depend>message_runtime</run_depend>
然後修改CMakeist.txt文件:
- 在find_package函數中加入message_generation依賴
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
message_generation
)
- 在catkin_package函數中加入message_runtime依賴
catkin_package(
...
CATKIN_DEPENDS message_runtime ...
...)
- 修改add_message_file函數,添加入自己創建的Num.msg文件
add_message_files(
FILES
Num.msg
)
- 確保generate_messages函數被調用運行,去掉註釋符號#
generate_messages(
DEPENDENCIES
std_msgs
)
使用rosmsg
rosmsg show [message type]
rosmsg show beginner-tutorials/Num
int64 num
如果實在記不住在哪個軟件包中時,可以省略軟件包
rosmsg show Num
[beginner_tutorials/Num]:
int64 num
使用srv
創建一個srv文件
可以從其他軟件包中複製過來一個srv文件,使用roscp命令:
roscp [package_name] [file_to_copy] [copy_path]
roscp rospy_tutorials AddTwoInts.srv srv/AddTwoInts.srv
srv文件也要用來產生C++,python等源代碼,也要需要進行一些配置。其配置流程和msg大體一致,其中find_package和catkin_package函數的配置是一樣的,另外需要將add_service_file中添加入自己創建的srv文件,如下:
add_service_files(
FILES
AddTwoInts.srv
)
使用rossrv
rossrv show <service type>
rossrv show beginner-tutorials/AddTwoInts
int64 a
int64 b
---
int64 sum
總結:msg和srv的一般步驟
- 首先是修改package.xml文件,確保該文件中與message有關的內容沒有被註釋掉。
- 然後修改CMakeist.txt文件:
- 在find_package函數中加入message_generation依賴;
- 在catkin_package函數中加入message_runtime依賴;
- 修改add_message_file函數,添加入自己創建的Num.msg文件;或者在add_service_file函數中添加入自己創建的srv文件;
- 確保generate_messages函數被調用運行,去掉註釋符號#;
- 重新編譯生成軟件包。
祝楓
2016年8月26日於哈爾濱