当前位置:首页 > 工业园区 >ros基本操作(ros入门21讲)

ros基本操作(ros入门21讲)

步骤3、设置CMakeLists.txtpackage.xmlCMakeLists.txt:

find_package(catkin REQUIRED COMPONENTS roscpp std_msgs)//告诉系统在编译这个包的时候找到这两个包catkin_package(# INCLUDE_DIRS include# LIBRARIES StudyCATKIN_DEPENDS roscpp std_msgs# DEPENDS system_lib)//声明对这个包的依赖,需要这两个ros在Package里面add_executable(${PROJECT_NAME}_node src/study_listen_node.cpp)//编译此包生成的可执行文件add_dependency(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})//链接可执行文件并依赖库//一般情况下,CMakeLists.txt是创建包时系统自动生成的。那么,我们要做的一般就是把上面这些基本地方的#号去掉(目的是告诉系统这个包,在哪里,有什么依赖)package.xml:

ros基本操作(ros入门21讲)

roscppclass='hljs-name'build_dependstd_msgsclass='hljs-name'build_dependroscppclass='hljs-name'exec_dependstd_msgsclass='hljs-name'exec_depend//主要修改类似样式。当然,这个例子比较简单。它是系统生成的,不需要做。其他修改,不过,如果节点添加了新的依赖,则需要在这些地方添加相应的包。第四步,编译

$ catkin_make #注意该命令应该在要使用的工作空间的一级目录下使用。第5步,验证

$ roscore #运行一个ROS master$ rosrun Study Study_node #包名+节点名;因为是测试监听节点,所以需要启动一个talker节点$ rostopic echo #study_topicdata: 'hello Study world!432'---data: ' hello Study world!433' //表示发布成功#打开一个新终端$ rosrun Study Study_listen_node #包名+ 节点名[INFO] [1606043574.419247936]: 我又可以见到你了,hello Study world!178 //表示监听成功此时从头开始创建的监听器节点node就创建成功了。

自定义消息类型并发布演示。这里的要点是定义消息类型。然后,将头文件包含在上面创建的talker和listener包中,然后在两个文件CMakeLists.txtpackage.xml中添加新的头文件类型。新定义的消息类型可用。

第一步创建包:

$ catkin_create_pkg Study_msgs std_msgs roscpp 第二步,在包中创建msg文件夹(注意文件夹名称必须是这样的,否则cmakelists会有大量修改)

第三步,在文件夹中新建文件StudyMsg.msg(注意命名方式和后缀)

stringdetailint32id 注意,自定义消息类型,切记不要写其他描述性内容,否则会出现编译错误

第四步,设置CMakeLists.txtpackage.xmlCMakeLists.txt:

find_package(catkin REQUIRED COMPONENTSroscppstd_msgs message_ Generation)## 在'msg'文件夹中生成消息//这里可以看出,系统只会在msg文件夹中搜索,对应第二步add_message_files(FILES StudyMsg.msg)##Generate添加了具有此处列出的任何依赖项的消息和服务generate_messages(DEPENDENCIES std_msgs)package.xml:

message_ Generation message_runtime 第五步、编译、catkin_make

第六步,检查

$ cd include/study_msgs$ lsStudyMsg.h //表示头文件生成成功。此时自定义消息类型就生成成功了,可以通过头文件#include'study_msgs/StudyMsg.h'被其他包使用,就可以正常工作了。使用。下面,我们发布一个talker节点进行展示,发布的主题名称为/study_topic_new。当然,CMakeLists.txtpackage.xml需要进行相应的补充,CMakeLists.txt:

find_package(catkin REQUIRED COMPONENTSroscppstd_msgs Study_msgs)catkin_package(# INCLUDE_DIRS include# LIBRARIES StudyCATKIN_DEPENDS roscpp std_msgs Study_msgs# DEPENDS system_lib)//两者都添加新的消息类型study_msgspackage.xml:

Study_msgsclass='hljs-name'build_dependstudy_msgsclass='hljs-name'exec_depend//添加新消息类型study_msgs 此时study_node.cpp为:

#include'ros/ros.h'#include'std_msgs/String.h'#include#include'study_msgs/StudyMsg.h'//使用自定义消息类型int main(int argc,char **argv){ ros:init( argc ,argv,'study_talker');//节点的属性名ros:NodeHandle n; ros:Publisher Study_pub=n.advertise终端查看:

$ rostopic echo /study_topic_new---detail: '你好学习世界! new'id: 29975---4.**参数中心rosparam的使用演示**

在开始显示之前,请务必像上面的talker 包研究中一样准备好Study_listen 包中的CMakeLists.txtpackage.xml,以确保可以使用自定义消息类型。

研究节点.cpp:

#include'ros/ros.h'#include'std_msgs/String.h'#include#include'study_msgs/StudyMsg.h'int main(int argc,char **argv){ ros:init(argc,argv,'study_talker' );//节点的属性名ros:NodeHandle n; ros:发布者study_pub=n.advertisestudy_listen_node.cpp:

#include'ros/ros.h'#include'std_msgs/String.h'#include'study_msgs/StudyMsg.h'void StudyCallback(const std_msgs:String:ConstPtr msg){ ROS_INFO('我可以再次见到你,%s ',msg- data.c_str());}//测试是监控study_topic是否成功void StudyCallback_new(const Study_msgs:StudyMsg:ConstPtr msg){ ROS_INFO('我想我忘不了你,%s,%d',msg-detail.c_str( ), msg-id);}//测试监听自定义消息是否成功void StudyCallback_param(const Study_msgs:StudyMsg:ConstPtr msg){ ROS_INFO('我想我忘不了你,%s,%d',msg-detail.c_str(), msg -id);}//测试rosparam参数中心是否工作成功int main(int argc,char ** argv){ ros:init(argc,argv,'study_listener'); ros:NodeHandle n; ros:订阅者sub=n.subscribe('/study_topic ',10,studyCallback); ros:订阅者sub_new=n.subscribe('study_topic_new',10,studyCallback_new); ros:订阅者sub_param=n.subscribe('/params_topic',10,studyCallback_param); ros:3336 0spin(); return 0;}修改了上面两个文件,下一步就是编译整个工作空间并成功,然后在终端执行

$ roscore #启动ros master$ rosrun Study Study_node #启动Talker 节点$ rosrun Study_listen Study_listen_node #启动监听器节点[INFO] [1606047990.464340880]: 我又可以见到你了,你好学习世界!99[INFO] [1606047990.464436530]: 我想我忘不了你,你好,学习世界! new,100[ INFO] [1606047990.476383810]: 我想我忘不了你,cc,100这个时候我们发现我们上面定义的回调函数都被成功调用了(表示上面的talker/listener/自定义消息类型都写入并运行通常)当我们在终端2启动参数中心rosparam来设置参数时:

$ rosparam set /myparam 'yqy' 终端1的显示调整为:

[ INFO] [1606048163.371016634]: 我又可以见到你了,你好学习世界!368[ INFO] [1606048163.371113447]: 我想我无法忘记你,你好学习世界! new,369[ INFO] [1606048163.394940978]33 360 我想我忘不了你,yqy,369 表示调整第三个周期,抄送至yqy。

本章小结: 要创建包,需要定义两个文件,CmakeLists.txt 和package.xml。主要目的是告诉系统我的包的编译和运行时依赖是什么;说者与听者的写作也是同样的基本套路。重新发布发布主题、消息类型和内容;监听器回调函数,注意它没有返回类型;重新自定义一个消息类型,注意文件夹命名和文件后缀名。基本上就是这样。

最新资讯

推荐资讯