ROS2:你知道我和你(ROS)最大的区别是什么吗?

大家好,我是小鱼。这两天深圳要刮台风了,雨下的是真的大,小鱼都变成落汤智了。

今天发一篇主线文章,讲一讲,ROS与ROS2的对比,最近在疯狂写教程,最快可能下周就会开始录制课程,到时候还请大家多多关注哈。

1.2 ROS与ROS2对比

经过上一节的学习,相信你已经对ROS和ROS2的发展有了一定的了解,本节小鱼将给大家从多个角度讲解ROS和ROS2的区别之处。

上一节说过,ROS的设计目的是简化在各种机器人平台上创建复杂而强大的机器人行为的任务,既然ROS已经基本解决了这个问题,那么为什么还有ROS2呢?

既然ROS那么强大了为什么还要ROS2?

ROS虽然将各个部分的各个组件给有机的连接起来,但是需要通过一个叫做Ros Master的东西,所有节点(可以理解为某一个组件,比如:激光雷达)的通信建立必须经过这个主节点,一旦Ros Master主节点挂掉后,就会造成整个系统通信的异常

ROS1的不稳定这个问题在虽然对大家作研究问题不大,但如果是想基于ROS做商业化机器人,就会造成非常严重的后果,小鱼在工作中可没少为这个问题发愁

除了不稳定这个问题,ROS还有很多其他地方存在着问题:

•通信基于TCP实现,实时性差、系统开销大•对Python3支持不友好,需要重新编译•消息机制不兼容•没有加密机制、安全性不高

ROS与ROS2架构对比?

所以在ROS2中,首当其冲的将ROS的主节点干掉了,这里放一张网上流传最广的ROS/ROS2架构图,接下来就会按照这篇架构图给大家讲解。

该图出自论文:Exploring the Performance of ROS2,已放入小鱼的公众号中,后台回复ROS2论文可获取

 

小鱼来给大家讲解下这张图,我们从下往上看。

OS层

从原来的只支持linux平台变成了支持windows、mac甚至是嵌入式RTOS平台,这一点要点个赞。之前认识公众号一老哥,做扫地机器人,为了降低成本,平台性能真的是非常的受限。

MiddleWare中间件层

如果大家觉得中间件太玄乎可以点击小鱼的文章链接:ROS2和ROS最大的区别中间件到底有什么不一样?[1]

下一节的扩展阅读讲了ROS的中心化特性: 1.3课外阅读_ROS镇长与艳娘传奇[2]

那么中间层ROS2到底相对于ROS做了哪些优化呢?

1.去中心化master,ROS和ROS2中间件不同之处在于,ROS2不要了master节点。去中心化后,各个节点直接可以通过DDS的进行节点之间的相互发现,各个节点都是平等的,且可以1对1、1对n、n对n进行互相通信。

2.不造通信的轮子,通信直接更换为DDS进行实现(这个小鱼也要点赞,让专业的人做专业的事情)采用DDS通信,使得ROS2的是实行、可靠性和连续性上都有了增强。

 

这里不过多展开,后面小鱼单独补一篇文章进行讲解,如果想第一时间获取更新,可以加入ROS2交流群:

应用层

对于应用层来说ROS2也做了很大的改进,上面那张图没有体现出来。

ROS2进行改进有:

1.python2到pyhton3的支持

2.编译系统的改进(catkin到ament)

3.软件包更新到c++11

4.可以使用相同 API 的进程间和进程内通信

5.持续更新........

ROS1中的话题机制还存在吗?

答案:还是存在的,只不过命令行参数变了很多。

下一章会从系统安装开始讲起,带大家一起学习ROS2。

References

[1] ROS2和ROS最大的区别中间件到底有什么不一样?: https://zhuanlan.zhihu.com/p/390607053
[2] 课外阅读_ROS镇长与艳娘传奇

我是小鱼,欢迎大家关注~

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我明白了。为了回答你的问题,我先介绍一下这两个类的背景。 ros::Subscriber 是 ROS 框架中的一个类,用于订阅 ROS 中的消息。其中的 ros 是 Robot Operating System 的缩写,是一个用于机器人开发的软件平台。ROS 中的消息包含了许多不同类型的数据,例如图像、激光扫描数据、IMU 数据等等。开发者可以使用 ros::Subscriber 来订阅感兴趣的消息,然后在回调函数中处理这些消息。具体来说,图像通常是以 sensor_msgs/Image 类型的消息发布的,开发者可以使用 ros::Subscriber<sensor_msgs::Image> 来订阅这些消息。 image_transport::Subscriber 同样是 ROS 框架中的一个类,但是它是在 image_transport 包中定义的。与 ros::Subscriber 不同,image_transport::Subscriber 是专门用于订阅图像数据的。image_transport 包提供了一个更高效的图像传输方式,可以大大减少图像传输的带宽占用和延迟。在使用 image_transport::Subscriber 订阅图像时,需要指定图像的传输方式,例如 JPEG 或 PNG 等等。这样可以在传输过程中对图像进行压缩,以减小数据的大小。由于压缩会导致一定的损失,因此需要根据具体的应用来决定压缩的程度。 总之,ros::Subscriber 和 image_transport::Subscriber 都可以用于订阅图像,但是它们的实现方式有所不同。在处理图像数据时,image_transport::Subscriber 更高效,因为它在传输过程中对图像进行了压缩。但是,它需要额外的传输方式来支持这种高效的传输方式,因此在使用时需要更加小心。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值