Ros笔记
阅读书籍为 机器人操作系统(ROS)浅析
只是阅读ROS之上的代码看前三章够了
第一章
ROS 解决的问题
分布式计算 现代机器人系统往往需要多个计算机同时运行多个进程
第二章
2.7
ROS节点之间进行通信所利用的最重要的机制就是消息传递。
在ROS中,消息有组织地存放在话题里 19。消息传递的理念是:
当一个节点想要分享信息时,它就会发布(publish)消息到对应的
一个或者多个话题;当一个节点想要接收信息时,它就会订阅
(subscribe)它所需要的一个或者多个话题。 ROS节点管理器负责确
保发布节点和订阅节点能找到对方;而且消息是直接地从发布节
点传递到订阅节点,中间并不经过节点管理器转交。
第三章
在我们写任何程序之前,第一步是创建
一个容纳我们的功能包的工作区,然后再创建功能包本身
创建工作区 我们所创建的包,应该全部放到一个叫做工作区的目录中
ros::init函数初始化ROS客户端库。 请在你程序的起始处调用一次该函数。函数最后的参是一个包含节点默认名的字符串
ros::NodeHandle(节点句柄) 对象是你的程序用于和ROS系统交互的主要机制。创建此对象会将你的程序注册为ROS节点管理器的节点。最简单的方法就是在整个程序中只创建一个NodeHandle对象
运行节点之前,不要忘了首先要启动 roscore:这个程序是一个节点,节点需
要一个节点管理器才可以正常运行
3.3 发布者程序
3.3.1
- 创建发布者对象
ros::Publisher pub = node_handle.advertise<message_type>(
topic_name, queue_size);
如果你想从同一个节点发布关于多个话题的消息,你需要为
每个话题创建一个独立的 ros::Publisher 对象
- 创建并填充消息对象
geometry_msgs::Twist msg;
msg.linear.x = double(rand())/double(RAND_MAX);
msg.angular.z = 2*double(rand())/double(RAND_MAX) - 1;
- 发布消息
pub.publish(msg);
节点是否停止工作的检查
ros::ok()
3.4 订阅者程序
-
编写回调函数
发布和订阅消息的一个重要的区别是订阅者节点
无法知道消息什么时候到达。为了应对这一事实,我们必须把响
应收到消息事件的代码放到回调函数里, ROS 每接收到一个新的
消息将调用一次这个函数
void function_name(const package_name::type_name &msg) -
创建订阅者对象
为了订阅一个话题,我们需要创建一个为了订阅一个话题,我们需要创建一个
ros::Subscriber对象:
ros::Subscriber sub = node_handle.subscribe(topic_name,queue_size, pointer_to_callback_function)
- 给ROS控制权
最后的复杂之处在于只有当我们明确给ROS许可时,
它才会执行我们的回调函数
ros::spinOnce();
这个代码要求 ROS 去执行所有挂起的回调函数,然后将控制权限
返回给我们。另一个方法如下所示:
ros::spin();
这个方法要求 ROS 等待并且执行回调函数, 直到这个节点关机。
换句话说, ros::spin()大体等于这样一个循环:
while(ros::ok( ))
{
ros::spinOnce();
}