【ROS】ros学习笔记(8)——通讯实操01_话题发布
通讯实操01_话题发布1.话题与消息获取1.1 话题获取1.2 消息获取2.实现发布节点2.1 写cpp文件2.2 修改CMake文件3.运行补充资料:弧度角度偏航、翻滚与俯仰简单实现预定要求需求描述:编码实现乌龟运动控制让小乌龟做圆周运动。实现分析:乌龟运动控制实现关键节点有两个一个是乌龟运动显示节点turtlesim_node另一个是控制节点二者是订阅发布模式实现通信的乌龟运动显示节点直接调用即可运动控制节点之前是使用的turtle_teleop_key通过键盘 控制现在需要自定义控制节点。控制节点自实现时首先需要了解控制节点与显示节点通信使用的话题与消息可以使用ros命令结合计算图来获取。了解了话题与消息之后通过C 或 Python 编写运动控制节点通过指定的话题按照一定的逻辑发布消息即可。实现流程:通过计算图结合ros命令获取话题与消息信息。编码实现运动控制节点。启动 roscore、turtlesim_node以及自定义的控制节点查看运行结果。1.话题与消息获取准备: 先启动键盘控制乌龟运动案例。rosrun turtlesim turtlesim_nodrosrun turtlesim turtle_teleop_key1.1 话题获取获取话题:通过计算图查看话题启动计算图:rqt_graph或者通过rostopic list列出话题rostopic list1.2 消息获取目前已知我们的话题类型是/turtle1/cmd_vel获取消息类型可以通过rostopic info和rostopic type来确定消息的类型rostopic info /turtle1/cmd_velrostopictype/turtle1/cmd_vel得到消息类型为geometry_msgs/Twist获取消息格式可以通过rosmsg info来获得消息格式linear(线速度)下的xyz分别对应在x、y和z方向上的速度(单位是 m/s)angular(角速度)下的xyz分别对应x轴上的翻滚、y轴上俯仰和z轴上偏航的速度(单位是rad/s)。可以通过rostopic echo 话题名来打印消息的日志可以看到小乌龟向前移动的时候只有linear的x发生改变在旋转的时候只有angular的z发生改变2.实现发布节点创建功能包需要依赖的功能包:roscpp rospy std_msgs geometry_msgs2.1 写cpp文件新建一个功能包在功能包下的src目录下添加新的cpp文件#includeros/ros.h#includegeometry_msgs/Twist.h/* 需求发布速度消息 话题/turtle1/cmd_vel 消息geometry_msgs/Twist 1.包含头文件 2.初始化ros节点 3.创建节点句柄 4.创建发布者对象 5.发布逻辑 6.spinonce() */intmain(intargc,char*argv[]){// 2.初始化ros节点ros::init(argc,argv,myControl);// 3.创建节点句柄ros::NodeHandle nh;// 4.创建发布者对象ros::Publisher pubnh.advertisegeometry_msgs::Twist(/turtle1/cmd_vel,10);// 5.发布逻辑ros::Raterate(10);//设置发布频率//组织被发布的消息geometry_msgs::Twist twist;twist.linear.x3.0;twist.angular.z3.0;// 6.spinonce()return0;}2.2 修改CMake文件修改功能包下的src下的cmake文件第136行取消注释add_executable(节点名 cpp文件)注意一般节点名选用和cpp文件名一致add_executable(test01_pub_twist src/test01_pub_twist.cpp)第149-151行target_link_libraries取消注释target_link_libraries(和上一条同名的节点名 ${catkin_LIBRARIES} )即target_link_libraries(test01_pub_twist ${catkin_LIBRARIES} )3.运行补充资料:弧度角度弧度: 单位弧度定义为圆弧长度等于半径时的圆心角。偏航、翻滚与俯仰坐标系图解:偏航俯仰翻滚简单实现预定要求可以通过rostopic pub命令来简单实现圆周运动的预定要求rostopic pub-r10/turtle1/cmd_vel geometry_msgs/Twistlinear: x: 2.0 y: 0.0 z: 0.0 angular: x: 0.0 y: 0.0 z: 2.0学习的为赵虚左老师的教程 1.老师的文档 2.老师的视频在笔记上理论部分大量参考了老师的文档