ROS的话题(Topic)

学习以色列一位博士Mr. Roi Yehoshua的ROS教程:
http://u.cs.biu.ac.il/~yehoshr1/89-685/ 里面有PPT以及源码,非常详细。
ROS程序往往有许多个功能模块组成,这些功能模块成为节点(Node)。
ROS中的话题(Topic),就是Node之间信息传输的方式。
Topic是一对多的传输方式。即一个话题的发布者,可以由多个订阅者来订阅。
比如,机器人现在左转,现在有一个名为”方向”的发布者,向所有订阅者发布“左转”这条信息。方向控制器作为一个订阅者,收到消息后,就控制系统左转;云台作为一个订阅者,得知消息后,也同时控制摄像头往左转,观测前方是否有障碍。

一个简单的发布者代码如下:

ros::init(argc, argv, "talker"); // 初始化一个名为“talker”的节点
ros::NodeHandle node;
ros::Publisher chatter_pub = node.advertise<std_msgs::String>("chatter", 1000);//发布一个名为chatter的话题,发送缓冲区最多有1000个,也就是最多有1000个消息等待发布
ros::Rate loop_rate(10); //循环频率控制对象,控制while循环一秒循环10次
int count = 0;
while (ros::ok()) //ros::ok()只有当用户按下Crtl+C按键时,才会返回false,循环终止
{
std_msgs::String msg;
std::stringstream ss;
ss << "hello world " << count;
msg.data = ss.str();
ROS_INFO("%s", msg.data.c_str());
chatter_pub.publish(msg);
ros::spinOnce(); // 执行这条函数的意义在于,让主线程暂停,处理来自订阅者的请求
loop_rate.sleep(); // 执行线程休眠
count++;
}

一个简单的订阅者代码为:

#include "std_msgs/String.h"
//消息回调函数,每接收一次消息,便执行一次此函数
void chatterCallback(const std_msgs::String::ConstPtr& msg)
{
    ROS_INFO("I heard: [%s]", msg->data.c_str());
}

int main(int argc, char **argv)
{
    // 初始化一个名为"listener"的节点
    ros::init(argc, argv, "listener");
    ros::NodeHandle node; 
    ros::Subscriber sub = node.subscribe("chatter", 1000, chatterCallback); // 订阅上面编写的,名为“chatter”的话题,最多有1000条消息等待处理
    ros::spin();//spin把程序的控制权交给了ROS。
    //ROS中没有thread接口,只提供了这种方法
    //在另一个线程中监听message的发布,当收到消息时
    //便出发回调函数,执行对应的动作
    return 0;
}
  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ROS2中,可以使用一些命令和工具来查看ROS话题。一个常用的命令是`ros2 topic list`,它会列出当前运行的所有ROS话题的名称。你也可以使用`ros2 topic echo <topic_name>`命令来查看特定话题的消息内容。这将会实时显示该话题上发布的消息。另外,还有一个可视化工具叫做rqt,它提供了一个图形界面,可以方便地查看和调试ROS话题。你可以使用`ros2 run rqt_topic rqt_topic`命令来启动rqt工具。通过选择相应的话题,你可以查看其发布的消息以及订阅该话题的节点。总之,使用这些命令和工具可以帮助你查看和监控ROS2话题的信息。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [【ROS入门-5】深入了解ROS话题通信机制的过程](https://download.csdn.net/download/weixin_38591011/14031411)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [apriltag_ros:用于AprilTag检测的ROS2节点](https://download.csdn.net/download/weixin_42109925/15165017)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [ros2话题发布+rviz2可视化+c++](https://download.csdn.net/download/m0_61822314/86397326)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值