这里是学习ROS第一次涉及到代码的部分。主要根据古月居视频教程整理出来的干货。本人是干货爱好者。
前言
订阅和发布是ROS非常重要的通信机制之一,接下来就一起来学习是如何实现的吧。
一、话题模型
二、创建subscriber代码(C++)
1.流程
1.初始化ROS节点
2.订阅需要的话题
3.循环等待话题消息,接收到消息后进入回调函数
4.在回调函数中完成消息处理
2.代码解读
//头文件
#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节点,节点名称[pose_subscriber]
ros::init(argc, argv, "pose_subscriber");
// 创建节点句柄
ros::NodeHandle n;
// 创建一个订阅者[pose_sub],订阅名为[/turtle1/pose]的topic
//注册回调函数poseCallback
//消息队列为10,不确定处理能力,可能会掉帧
ros::Subscriber pose_sub = n.subscribe("/turtle1/pose", 10, poseCallback);
// 循环等待回调函数,死循环,不断查看队列里有没有新的消息进来
ros::spin();
return 0;
}
3.配置编译规则
放在CMakeLists.txt文件中的build模块中。
将需要编译的代码生成可执行文件
add_executable(pose_subscriber src/pose_subscriber.cpp)
设置代码和ROS的库做链接
target_link_libraries(pose_subscriber ${catkin_LIBRARIES})
4.编译并运行subscriber
编译
cd ~/catkin_ws
catkin_make
source devel/setup.bash
运行(不同的新终端)
roscore
rosrun turtlesim turtlesim_node
rosrun learning_topic velocity_publisher
rosrun learning_topic pose_subscriber
三.贴一下python的publisher代码
最好放在功能包的scripts的文件夹下
总结
熟悉相关的C++ 和python语法
理解话题模型,多对多,无反馈,通过订阅话题来接收消息