ROS學習筆記八:創建ROS msg和srv

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日於哈爾濱

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章