编程思想:消息是ROS程序的一等公民。


碎碎念:Hello米娜桑,这里是英国留学中的杨丝儿。我的博客技术点集中在机器人、人工智能可解释性、数学、物理等等,感兴趣地点个关注吧,持续高质量输出中。
唠嗑QQ群兔叽的魔术工房 (942848525)
B站账号杨丝儿今天也在科学修仙(UP主跨站求个关注)


:star:知识点整理


:question:问:ROS框架的设计理念是怎么样的?

  • ROS2采用分布式架构,采用自发现的方式进行节点间的通信建立。
  • ROS1相对就显得不伦不类,因为rosmaster,也就是主节点的存在,ROS1的架构介于分布式系统和客户端/服务端系统之间。
  • 主节点负责命名,起到和地址字典类似的作用。

:o:答:ROS1关键词域

graph TB
    subgraph 程序相关
        C[多线程]-->
        F[面向过程普通节点]
        C-->G[面向对象服务节点]
    end
graph TB
    subgraph 节点相关
        A[主节点]---
        B[分布式]---
        H[命名空间概念]---A
    end

    subgraph 消息相关
        D[通信策略]---
        E[消息对象]---D
    end

:o:答:ROS1到2的进步

ROS 2.0 主要是为了让 ROS 符合工业级的运行标准,采用了 DDS 这个工业级别的中间件股则可靠的额通信。

  • 通信节点可以动态地发现新的节点,而且用共享内存的方式使得通信效率更高。
  • 依赖于动态的 P2P 的自发现模式,也就去掉了 ROS Master 这个中心节点。
  • DDS 上层通过 DDS API 封装,实现了 DDS 的实现对于 ROS Client 透明。
  • 注:ROS 2.0 还是一个开发中的框架,还需要时间。

参见:自动驾驶技术笔记:ROS系统


:question:问:ROS开发环境配置策略该是怎样的呢?

ROS是一个软件框架,备选的语言有python和C++。但是需要注意的是,不管是哪种语言的环境,都需要按照官方文档中的安装方法进行安装和配置。

如果不这样做,那么,举例来讲,ROS1同时使用Python3和Python2的问题就很难解决了。

推荐使用Linux系统环境,因为频繁的终端操作。同时不建议使用命令行插件进行辅助开发,ROS自带的catkin工具已经足以满足开发需要。

可以阅读一下:【机器人】开发系统镜像制作指南


:question:问:命名也有OS两个字母,为什么说ROS是中间件?

首先OS,也就是操作系统的定义是要与系统硬件交互,并提供一套用户使用的方法。ROS不具备这样的性质,但是因为在机器人硬件设备上,对外暴露出来的不是底层运行的正常OS而是在OS之上的ROS,所以感觉ROS也是一个OS,负责控制系统硬件。

就是因为这样的性质,我们使用ROS间接得控制系统底层硬件,所以叫做中间件。


:o:答:软硬件桥接方式

这个并不是ROS需要考虑的问题,根据平台的不同,我们使用的桥接方法也不尽相同。但是为了保证程序的泛用性,我们在命令行中通过重命名消息实现软硬件节点的通信。


:o:答:编程语言的接口

ROS中,python相关的依赖是rospy,而C++就是roscpp。


:question:问:ROS程序设计中的常用调试工具有哪些?

可以从下面几个指令开始了解:rqt_graphrostopicrosmsgrosservicerossrv