1. 程式人生 > >Ros學習——建立ROS訊息和ROS服務

Ros學習——建立ROS訊息和ROS服務

1.rosed

rosed 是 rosbash 的一部分。利用它可以直接通過package名來獲取到待編輯的檔案而無需指定該檔案的儲存路徑了。

rosed預設的編輯器是vim。修改其他的,開啟~/.bashrc 檔案,增加:

export EDITOR='emacs -nw'

  

2.訊息和服務

  • 訊息(msg): msg檔案就是一個描述ROS中所使用訊息型別的簡單文字。它們會被用來生成不同語言的原始碼。msg檔案存放在package的msg目錄下。

  msg檔案實際上就是每行宣告一個數據型別和變數名。可以使用的資料型別如下:

int8, int16, int32, int64 (plus uint*)
float32, float64
string
time, duration
other msg files
variable-length array[] and fixed-length array[C]

  

  • 服務(srv): 一個srv檔案描述一項服務。它包含兩個部分:請求和響應。srv檔案則存放在srv目錄下。

    srv檔案分為請求和響應兩部分,由'---'分隔。

 

3.msg

  • 1.在之前建立的package裡定義新的訊息
$ cd ~/catkin_ws/src/beginner_tutorials
$ mkdir msg
$ echo "int64 num" > msg/Num.msg
  • 2.確保msg檔案被轉換成為C++,Python和其他語言的原始碼

檢視package.xml, 確保它包含一下兩條語句:

<build_depend>message_generation</build_depend>
<run_depend>message_runtime</run_depend>
  • 3.開啟CMakeLists.txt檔案,利用find_packag函式,增加對message_generation的依賴
# Do not just add this line to your CMakeLists.txt, modify the existing line
find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation)
  • 4.確保你設定了執行依賴:
catkin_package(
  ...
  CATKIN_DEPENDS message_runtime ...
  ...)
  • 5.修改add_message_files
# add_message_files(
#   FILES
#   Message1.msg
#   Message2.msg
# )

改為:

add_message_files(
  FILES
  Num.msg
)
  • 6.添加了如下程式碼:
generate_messages()
  • 7.使用rosmsg
$ rosmsg show beginner_tutorials/Num

#或者
$ rosmsg show Num

結果:

 

4.srv

  • 1.建立一個服務
$ roscd beginner_tutorials
$ mkdir srv
  • 2.新建/賦值一個服務檔案
$ roscp rospy_tutorials AddTwoInts.srv srv/AddTwoInts.srv
  • 3.確保srv檔案被轉換成C++,Python和其他語言的原始碼:CMakeLists.txt檔案中增加了對message_generation的依賴
# Do not just add this line to your CMakeLists.txt, modify the existing line
find_package(catkin REQUIRED COMPONENTS
  roscpp
  rospy
  std_msgs
  message_generation)
  • 4.修改add_message_files
# add_service_files(
#   FILES
#   Service1.srv
#   Service2.srv
# )

#改為:

add_service_files(
  FILES
  AddTwoInts.srv
)
  • 5.使用rossrv
$ rossrv show beginner_tutorials/AddTwoInts

#或者
$ rossrv show AddTwoInts
  •  6.結果