1、前言2、模型3、编程
1、前言上一篇中(《ROS 学习笔记(3)—— 发布者 publisher 的编程实现》),介绍了如何使用 c++ 发布一个话题,实现了使小海龟做圆周运动。订阅者的编程与发布者的编程大同小异,看这篇文章前,建议先看完上一篇文章。
2、模型 3、编程与上一讲类似,在/catkin_ws/src/learning_topic/src建立cpp文件,代码在下方。
#include#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); // 循环等待回调函数 ros::spin(); return 0; }
同样,在CMakeLists里加入以下代码,位置在Install正上方:
add_executable(pose_subscriber src/pose_subscriber.cpp) target_link_libraries(pose_subscriber ${catkin_LIBRARIES})
同理,对功能包进行编译,设置环境变量,运行海龟仿真节点。
在海龟还没有动的情况下,运行 subscriber 试试,预期应该是返回的参数没有变化:
rosrun learning_topic pose_subscriber
我们现在尝试用上一篇编写的 publisher 程序让海龟做运动,看看 subscriber 返回的参数变化:
rosrun learning_topic velocity_publisher
或者运用$ rosrun turtlesim turtle_teleop_key键盘控制命令控制海龟运动。
可以看到,subscriber 反馈回来的参数确实发生了改变。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)