標籤:require 資料類型 mkdir other ice bsp scp log dir
一、msg 和 srv介紹
1、定義
訊息(msg): msg檔案就是一個描述ROS中所使用訊息類型的簡單文本。它們會被用來產生不同語言的原始碼
服務(srv): 一個srv檔案描述一項服務。它包含兩個部分:請求和響應。
2、存放位置
msg檔案存放在package的msg目錄下,srv檔案則存放在srv目錄下。
3、msg本質
msg檔案實際上就是每行聲明一個資料類型和變數名。可以使用的資料類型如下:
int8, int16, int32, int64 (plus uint*)float32, float64stringtime, durationother msg filesvariable-length array[] and fixed-length array[C]
PS:有一個特殊的類型Header : 包含時間戳記和座標系資訊
在msg檔案的第一行經常可以看到Header header的聲明.
4、SRV檔案結構
int64 Aint64 B---int64 Sum
srv檔案分為請求和響應兩部分,由‘---‘分隔
二、msg
1、建立一個msg
(1)建立msg檔案
roscd beginner_tutorialsmkdir msgecho "int64 num" > msg/Num.msg
(2)修改package.xml,確保msg檔案被轉換成為C++,Python和其他語言的原始碼
<build_depend>message_generation</build_depend> <run_depend>message_runtime</run_depend>
在package.xml添加這兩行
(3)修改CMakeLists.txt
A、修改find_package
find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation)
B、修改catkin_package
catkin_package( ... CATKIN_DEPENDS message_runtime ... ...)
C、修改add_message_files(記得取消注釋)
add_message_files( FILES Num.msg)
D、手動添加.msg檔案後,我們要確保CMake知道在什麼時候重新設定我們的project。(取消注釋)
generate_messages( DEPENDENCIES std_msgs)
2、使用rosmsg來確定ROS是否能夠識別訊息
(1)文法:
rosmsg show [message type]
(2)demo:
rosmsg show beginner_tutorials/Num
(3)如果不確定是哪個包,可以省略包名
rosmsg show Num
三、srv
1、建立一個srv
(1)先建立srv檔案夾
roscd beginner_tutorialsmkdir srv
(2)使用複製的方式建立srv檔案
A、文法
roscp [package_name] [file_to_copy_path] [copy_path]
B、執行個體
roscp rospy_tutorials AddTwoInts.srv srv/AddTwoInts.srv
(3)跟msg一樣修改package.xml檔案,加入這兩個依賴
<build_depend>message_generation</build_depend><run_depend>message_runtime</run_depend>
(4)修改CMakeLists.txt中的find_package
find_package(catkin REQUIRED COMPONENTS roscpp rospy std_msgs message_generation)
(5)修改CMakeLists.txt中的add_service_files(去掉注釋)
add_service_files( FILES AddTwoInts.srv)
2、使用rossrv來確保ROS可以識別服務
(1)文法:
rossrv show <service type>
(2)demo:
rossrv show beginner_tutorials/AddTwoInts
(3)可以省略包名
rossrv show AddTwoInts
四、msg 和 srv 編譯
1、修改CMakelists.txt
generate_messages( DEPENDENCIES std_msgs)
記得去掉注釋
2、進行編譯
catkin_make install
3、所有在msg路徑下的.msg檔案都將轉換為ROS所支援語言的原始碼。
產生的C++標頭檔將會放置在~/catkin_ws/devel/include/beginner_tutorials/。
Python指令碼語言會在 ~/catkin_ws/devel/lib/python2.7/dist-packages/beginner_tutorials/msg 目錄下建立。
lisp檔案會出現在 ~/catkin_ws/devel/share/common-lisp/ros/beginner_tutorials/msg/ 路徑下.
ROS學習(十一)—— msg srv