实现的步骤
1.运行乌龟节点。
2.动行键盘控制节点。
3.运行编写的订阅乌龟位姿消息的节点。
编写订阅乌龟位置消息节点的流程
rostopic lsit
你将看到当前活跃的话题列表如下,我们需要的是 /turtle1/pose
/rosout
/rosout_agg
/turtle1/cmd_vel
/turtle1/color_sensor
/turtle1/pose
rostopic info /turtle1/pose
可以看到该话题的类型:rosmsg info turtlesim/Pose,发布者,订阅者。
rosmsg info turtlesim/Pose
以下是该类型的信息结构。
float32 x
float32 y
float32 theta
float32 linear_velocity
float32 angular_velocity
创建订阅消息的包
catkin_create_pkg pakage_02 roscpp rospy std_msgs geometry_msgs turtlesim
在pakage_02/src中创建c++文件。代码如下。
#include "ros/ros.h"
#include "turtlesim/Pose.h"
void doPose(const turtlesim::Pose::ConstPtr &pose)
{
ROS_INFO("POSITION:POINT:(%.2f,%.2f)WHERE(%.2f%),lv:%.2f av:%.2f",pose->x,pose->y,pose->theta,pose->linear_velocity,pose->angular_velocity);
}
int main(int argc,char*argv[])
{
ros::init(argc,argv,"submsg");
ros::NodeHandle nh;
ros::Subscriber sub = nh.subscribe("/turtle1/pose",100,doPose);
ros::spin();
return 0;
}
最后在CmakeLists.txt中修改编译配置如下。
add_executable(sub_control_msg src/sub_control_msg.cpp)
target_link_libraries(sub_control_msg ${catkin_LIBRARIES})
编下代码
catkin_make
启动rosmaster
roscore
启动乌龟
rosrun turtlesim turtlesim_node
启动乌龟键盘控制
rosrun turtlesim turtle_teleop_key
启动我们写的程序
rosrun pakage_02 sub_control_msg
用键盘控制乌龟动作时,你写节点可以订阅消息输出了。
运行时的结果展示!