11订阅者Subscriber的编程实现
1、创建订阅者代码 C++
*//**
* 该例程将订阅/turtle1/pose话题,消息类型turtlesim::Pose
*/
#include <ros/ros.h>
#include "turtlesim/Pose.h" //消息类型定义
// 接收到订阅的消息后,会进入消息回调函数
void poseCallback(const turtlesim::Pose::ConstPtr& msg)
{
// 将接收到的消息打印出来
ROS_INFO("Turtle pose: x:%0.6f, y:%0.6f", msg->x, msg->y);
}
int main(int argc, char **argv)
{
// 初始化ROS节点
ros::init(argc, argv, "pose_subscriber");
// 创建节点句柄 ,管理节点资源
ros::NodeHandle n;
// 创建一个类Subscriber,订阅名为/turtle1/pose的topic,注册回调函数poseCallback
ros::Subscriber pose_sub = n.subscribe("/turtle1/pose", 10, poseCallback);//创建缓冲区,保持队列里面为最新的10个消息
//当订阅者发现有话题数据进来,就会调用回调函数进行处理,类似于嵌入式里面的中断
// 循环等待回调函数
ros::spin();
return 0;
}
2、配置订阅者代码编译规则
2.1在CMakeLists.txt中配置
add_executable(pose_subscriber src/pose_subscriber.cpp)
target_link_libraries(pose_subscriber ${catkin_LIBRARIES})
2.2、在catkin_ws中编译
chen@ubuntu:~/catkin_ws$ catkin_make
编译成功
Scanning dependencies of target pose_subscriber
[ 25%] Building CXX object learning_topic/CMakeFiles/pose_subscriber.dir/src/pose_subscriber.cpp.o
[ 50%] Linking CXX executable /home/chen/catkin_ws/devel/lib/learning_topic/pose_subscriber
[ 50%] Built target pose_subscriber
[100%] Built target velocity_publisher
3、运行订阅者
3.1、运行roscore
chen@ubuntu:~$ roscore
3.2、运行海龟仿真器节点
这个节点只是图像显示海龟位置
chen@ubuntu:~$ rosrun turtlesim
draw_square mimic turtlesim_node turtle_teleop_key
chen@ubuntu:~$ rosrun turtlesim turtlesim_node
[ INFO] [1582703889.430243796]: Starting turtlesim with node name /turtlesim
[ INFO] [1582703889.434564963]: Spawning turtle [turtle1] at x=[5.544445], y=[5.544445], theta=[0.000000]
3.3、运行订阅者节点,显示海龟位置信息
chen@ubuntu:~$ rosrun learning_topic pose_subscriber
[ INFO] [1582703996.848780197]: Turtle pose: x:5.544445, y:5.544445
[ INFO] [1582703996.869298729]: Turtle pose: x:5.544445, y:5.544445
[ INFO] [1582703996.879220218]: Turtle pose: x:5.544445, y:5.544445
3.4、启动键盘控制节点
chen@ubuntu:~$ rosrun turtlesim turtle_teleop_key
Reading from keyboard
---------------------------
Use arrow keys to move the turtle.
3.5、运行发布者节点
chen@ubuntu:~$ rosrun learning_topic
pose_subscriber velocity_publisher
pose_subscriber.cpp velocity_publisher.cpp
chen@ubuntu:~$ rosrun learning_topic velocity_publisher
[ INFO] [1582704308.398499897]: Publsh turtle velocity command[0.50 m/s, 0.20 rad/s]