ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

《ROS1学习笔记3——话题通信之发布者》

《ROS1学习笔记3——话题通信之发布者》 文章目录1、创建工作空间及功能包1.1、前期准备1.2、实现思路2、编写代码3、编译运行3.1、编辑CMakeLists文件3.1.1、检查依赖3.1.2、创建可执行文件与链接库3.2、编译3.3、改变环境变量3.4、运行代码3.4.1、启动ROS3.4.2、运行海龟节点3.4.3、发布话题1、创建工作空间及功能包1.1、前期准备在上一篇文章中我们学会了如何创建一个工作空间并且如何在工作空间中新建功能包。详细步骤见我前一篇文章创建工作空间及功能包这篇文章我们开始学习话题通信——发布话题控小海龟画圆。在/demo_ws/src/demo_topic_pub/src下新建c文件demo_pub.cpp此时你的工作空间下应该有如下文件1.2、实现思路初始化ROS节点向ROS Master注册节点信息包括发布的话题名和话题中的消息类型创建消息数据按照一定频率循环发布消息2、编写代码代码如下#includeros/ros.h#includegeometry_msgs/Twist.hintmain(intargc,char**argv){//ROS节点初始化ros::init(argc,argv,velocity_publisher);//创建节点句柄ros::NodeHandle n;//创建一个Publisher发布名为/turtle1/cmd_vel的topic,消息类型为geometry_msgs::Twist,队列长度10ros::Publisher turtle_vel_pubn.advertisegeometry_msgs::Twist(/turtle1/cmd_vel,10);//设置循环频率ros::Rateloop_rate(10);intcount0;while(ros::ok()){//初始化geometry_msgs::Twist类型的消息geometry_msgs::Twist vel_msg;vel_msg.linear.x0.5;vel_msg.angular.z0.2;//发布信息turtle_vel_pub.publish(vel_msg);ROS_INFO(Publish turtle velocity command[%0.2f m/s, %0.2f rad/s],vel_msg.linear.x,vel_msg.angular.z);//按照循环频率延时loop_rate.sleep();}return0;}3、编译运行3.1、编辑CMakeLists文件3.1.1、检查依赖如果你在使用catkin_creat_pkg命令创建功能包时添加上了依赖CMakeLists中就会包括以下库依赖若没有则需手动加上。3.1.2、创建可执行文件与链接库在155行左右加上如下两句代码:add_executable(demo_pub src/demo_pub.cpp)target_link_libraries(demo_pub${catkin_LIBRARIES})解释1、add_executable(demo_pub src/demo_pub.cpp)add_executableCMake 命令用于创建可执行文件demo_pub生成的可执行文件名称(此名称可随便取)src/demo.cpp源代码文件路径此路径以及你刚编辑的cpp文件名得正确2、target_link_libraries(demo_pub${catkin_LIBRARIES})target_link_libraries将库文件链接到可执行文件${catkin_LIBRARIES}ROS 相关的库文件集合3.2、编译在工作空间的目录下输入如下命令进行编译catkin_make没有报错且进度跑到100就是编译成功此时还可以检查/devel/lib/demo_topic_pub目录下有无出现可执行文件并且可执行文件的名字是你刚才add_executable取的名字绿色的就是可执行文件直接展开也可以看到3.3、改变环境变量source devel/setup.bash3.4、运行代码在vscode中CtrlShift5是再打开一个终端3.4.1、启动ROSroscore3.4.2、运行海龟节点rosrun turtlesim turtlesim_node3.4.3、发布话题rosrun [功能包名] [可执行文件名]rosrun demo_topic_pub demo_pub回车运行小海龟开始按设定参数开始转圈。
返回列表