【ros】2.ros的xx.msg编译
ros的使用:
mkdir rosworkspace cd rosworkspace mkdir src cd src catkin_init_workspace # 會在src/生成CMakeLists.txt cd .. # 退回到ros工作空間 catkin_make # 會在rosworkspace生成devel和build文件夾,build是編譯的中間文件,不用管。注意:如果之前編譯過,則需要把devel/和build文件夾刪除之后再catkin_make,否則可能不會編譯新添加的消息 source devel/setup.bash # 設(shè)置環(huán)境變量,也可以直接在.bashrc中永久設(shè)置環(huán)境變量,# 以后就不用每次編譯后都執(zhí)行改設(shè)置環(huán)境變量這一步驟了 echo $ROS_PACKAGE_PATH # 檢查環(huán)境變量 # catkin_make install # 會在rosworkspace生成install文件夾。這一步可不用工作空間下有src,build,devel,install等文件夾
cd rosworkspace/src/ # 下面這句會在rosworkspace/src/下面生成一個(gè)功能包,功能包文件夾下會有include、src、CMakeLists.txt和package.xml catkin_create_pkg <功能包名> <依賴包1> <依賴包2> <依賴包3,4,5> cd <功能包名> mkdir msg # 在功能包目錄下創(chuàng)建一個(gè)msg文件夾,里面存放一些.msg文件 touch xx.msg touch xxxx.msg cd .. cd .. 退回到工作空間 catkin_make # 編譯,會把xx.msg編譯成xx.h,存放在devel/include/<功能包名>/下。 注意:如果之前編譯過,則需要把devel/和build文件夾刪除之后再catkin_make,否則可能不會編譯新添加的消息ros工作空間下,src/文件夾是自己創(chuàng)建的。src/下執(zhí)行catkin_init_workspace后會生成一個(gè)CMakeLists.txt文件。
devel和build是執(zhí)行catkin_make命令后生成的。
install目錄是通過catkin_make install命令生成的,該命令可以不用,因?yàn)樗窃诎l(fā)布版時(shí)使用,
平時(shí)自己使用只需要用到devel即可,這兩個(gè)文件加內(nèi)容基本相同。
catkin_create_pkg test_pkg std_msgs roscpp rospy sensor_msgs 創(chuàng)建一個(gè)test_pkg功能包,
它依賴std_msgs、 roscpp、 rospy、 sensor_msgs這幾個(gè)功能包
功能包創(chuàng)建命令執(zhí)行后,會在src下面生成一個(gè)功能包,功能包文件夾下會有include、src、CMakeLists.txt和package.xml。
src是用來放置功能包代碼,包括cpp文件和其他的一些文件;inlude是用來放置頭文件;
CMakeLists.txt和package.xml是每個(gè)功能包必須存在的兩個(gè)文件。
以下是重點(diǎn):
以安裝的kinetic版本的ros為例,
方法1:把生成的devel/include/功能包名/在root下拷貝到/opt/ros/kinetic/include/目錄下,然后自定義消息就和ros自帶的功能包(頭文件)在同一個(gè)目錄/opt/ros/kinetic/include/下了,就可以不用包含全路徑,只包含相對路徑即可。
方法2:
把source ros包的路徑/devel/setup.bash 添加到.bashrc中即可.
當(dāng)調(diào)用xx.msg編譯后生成的xx.h文件中的類型時(shí)候,除了本文件需要#include xx.h頭文件,還需要注意調(diào)用時(shí)加上功能包名,
如 test_pkg::LightBox就是調(diào)用test_pkg功能包下的LightBox.h文件。LightBox就是我要用的類型。
一個(gè).msg文件生成的.h文件就是一個(gè)類型。
編譯前需要修改的東西:
需要在功能包下的CMakeLists.txt和package.xml文件中添加內(nèi)容后再編譯:
package.xml中添加:
如果還有別的依賴,但是在catkin_create_pkg創(chuàng)建功能包命令時(shí)沒有添加該依賴,也可以在這個(gè)package.xml里面新增。
CMakeLists.txt中加:
find_package()中添加一個(gè)message_generation,必須的,否則catkin_make會編譯出錯(cuò),添加示例如下:
add_message_files()中添加功能包中msg/文件夾下自定義的幾個(gè)xx.msg文件
generate_messages()打開注釋
catkin_package()打開其中一行CATKIN_DEPENDS的注釋,并在后面加上一個(gè)message_runtime依賴
對于添加xx.msg文件,如果像文件中默認(rèn)的那樣會很麻煩,如下:
## Generate messages in the 'msg' folder add_message_files(FILESMessage1.msgMessage2.msg )每增加一個(gè)xx.msg文件都會需要在CMakeLists.txt中的這個(gè)位置添加對應(yīng)的xx.msg。
推薦使用下面的方法:
file(GLOB_RECURSE MSG_FILES msg/*.msg) foreach(MSG ${MSG_FILES})get_filename_component(FILE_NAME ${MSG} NAME)list(APPEND ALL_MSG ${FILE_NAME}) endforeach() message(STATUS "$msg is: ${ALL_MSG}")add_message_files(FILES${ALL_MSG} )總結(jié)
以上是生活随笔為你收集整理的【ros】2.ros的xx.msg编译的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【ros】1.ros的安装
- 下一篇: 【ros】4.rosbag的相关用法