1.之前大家已经知道了如何去生成小乌龟节点,本节会带着大家通过话题通信去控制小乌龟进行运动,以及去订阅乌龟的运动信息。
首先,要知道控制乌龟运动的节点话题是什么
首先启动 乌龟显示节点
然后通过rostopic list 去查看所有的活跃话题
其中/turtle1/cmd_vel 是速度订阅话题,接下来要看一下该话题的消息类型,通过rostopic type /turtle1/cmd_vel
话题的消息类型为 geometry_msgs/Twist ,然后去看一下该消息类型的信息和参数,通过rosmsg info geometry_msgs/Twist
如图所示,其中的消息有线速度和角速度,各有三个方向。
2.下面通过c++来实现发布速度话题
#include "ros/ros.h"
#include "geometry_msgs/Twist.h"
/*
该节点在于使用程序去控制小乌龟的运动
首先要知道控制小乌龟运动的话题以及消息类型和格式、
rostopic list :/turtle1/cmd_vel
rostopic type /turtle1/cmd_vel :geometry_msgs/Twist
rosmsg info geometry_msgs/Twist :
geometry_msgs/Vector3 linear //乌龟的线速度
float64 x
float64 y
float64 z
geometry_msgs/Vector3 angular //乌龟的角速度,以弧度为单位
float64 x
float64 y
float64 z
*/
int main(int argc,char *argv[])
{
ros::init(argc,argv,"contrl_turtlesim");
ros::NodeHandle nh;
ros::Publisher pub=nh.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel",100);//这个话题要和查询出来的话题名称保持一致
ros::Rate loop(1);
ros::Duration(3).sleep();
geometry_msgs::Twist ct;
ct.linear.x=1; //设置要发布的数据信息
ct.angular.z=0.785; //角速度是以弧度为单位的
while(ros::ok)
{
pub.publish(ct);
loop.sleep();
ros::spinOnce();
}
return 0;
}
3.乌龟的位姿话题消息的获取
乌龟位姿的话题是 /turtle1/pose
话题的类型是 : turtlesim/Pose
消息的信息是:
float32 x
float32 y
float32 theta
float32 linear_velocity
float32 angular_velocity
4.下面通过c++来实现乌龟位姿的获取
#include "ros/ros.h"
/*
订阅乌龟的位姿信息,并打印
首先获取乌龟的位姿发布话题:
rostopiclist : /turtle1/pose
rostopic type /turtle1/pose :turtlesim/Pose
rosmsg info turtlesim/Pose
消息类型:
float32 x
float32 y
float32 theta
float32 linear_velocity
float32 angular_velocity
*/
#include "turtlesim/Pose.h"
void Pose(const turtlesim::Pose::ConstPtr& msg)
{
float x=msg->x;
float y=msg->y;
float theta =msg->theta;
float lvelocity=msg->linear_velocity;
float avelocity=msg->angular_velocity;
ROS_INFO("X=%.2f Y=%.2f theta=%.2f lvelocity=%.2f avelocity=%.2f ",x,y,theta,lvelocity,avelocity);
}
int main(int argc,char *argv[])
{
ros::init(argc,argv,"turtlrsim_pose");
ros::NodeHandle nh;
ros::Subscriber sub=nh.subscribe("/turtle1/pose",100,Pose);
ros::spin();
return 0;
}
5.综上所述,相信大家对于话题通信有了更深层次的理解,下一节会开始对服务通信进行模型讲解。