ROS程序设计系列 - 1.ROS介绍

1. 源由

目前,在最有路径计算和SLAM(Simultaneous Localization and Mapping)地图重建方面,ROS系统提供的生态最为完善。

因此,很多机器人方面的研发人员使用最多的就是ROS(Robot Operating System)系统。

另外,前面我们了解了无人机路径计算算法:

目前还是基于ROS,尚未对ROS2进行移植,我相信在一段时间内,估计也不可能快速的切换到ROS2.

除此之外,我们还有Ardupilot Rover/Copter的应用(今后可能还有Boat/Submarine等)

因此,我们将学习和整理下ROS系统的架构和基本编程应用。

2. ROS介绍

从概念定义上,个人觉得ROS可以定义为一个中间件(middleware)。

其底层仍然是Linux系统,但是ROS应用编程采用的是ROS API,封装了很多标准ROS包,这些包不仅仅简单功能API,还有很多动态管理服务,因此中间件的说法更为合适。

在 ROS(Robot Operating System)中,中间件起到了关键作用,用于节点之间的通信和数据交换。ROS 中的中间件通常指的是通信框架,主要包括以下几个关键组件:

  1. ROS Master:ROS Master 是整个 ROS 网络的核心,它负责节点注册、查找和管理。每个 ROS 网络中都需要一个 Master,它可以记录节点的信息,并帮助节点找到彼此。Master 并不参与实际数据的传输,而只是提供节点间的联系信息。

  2. 节点(Nodes):节点是 ROS 中的基本执行单位,每个节点是一个独立的进程,负责特定的功能。节点可以通过发布和订阅(publish/subscribe)机制、服务(service)和动作(action)等方式进行通信。

  3. 话题(Topics):话题是节点之间进行异步通信的渠道。一个节点可以发布消息到某个话题,其他节点可以订阅这个话题以接收消息。话题适用于需要频繁更新的数据流,比如传感器数据。

  4. 消息(Messages):消息是 ROS 中节点之间传递的数据结构。ROS 提供了一套标准消息类型,开发者也可以自定义消息类型。

  5. 服务(Services):服务提供了一种同步通信方式,适用于需要请求-响应模式的场景。一个节点可以定义一个服务,其他节点可以通过调用该服务来请求特定的操作并等待响应。

  6. 动作(Actions):动作是一种增强的服务机制,适用于需要长时间运行并且需要反馈的任务。动作可以提供任务执行的进度和中途取消的能力。

ROS 中的中间件通常基于发布-订阅模式(Publish-Subscribe Pattern)和客户端-服务器模式(Client-Server Pattern),这使得 ROS 能够灵活、高效地处理机器人系统中的各种通信需求。

ROS 1 中,默认使用的是基于 TCP 的通信协议(TCPROS),也可以使用 UDP(UDPROS)来实现低延迟的通信。在 ROS 2 中,采用了数据分发服务(DDS)作为默认的中间件,这提供了更好的实时性、可扩展性和安全性。DDS 是一种工业标准的中间件协议,广泛应用于分布式实时系统。

3. 关键要点

3.1 中间件组成

  • 2007年斯坦福人工智能实验室开始投入
  • 2013年OSRF组织接管项目
  • 当前已经成为机器人行业不成文的一个标准平台

在这里插入图片描述

3.2 功能特性

  • 消息解耦
  • 分布式部署
  • 多语言支持
  • 轻量化组件
  • 开源代码

在这里插入图片描述

3.3 消息分发

3.3.1 ROS Master

ROS Master 是整个 ROS 网络的核心,它负责节点注册、查找和管理。

命令:

$ roscore

3.3.2 ROS Node

节点是 ROS 中的基本执行单位,每个节点是一个独立的进程,负责特定的功能。

命令:

$ rosrun package_name node_name
$ rosnode list
$ rosnode info node_name

3.3.3 ROS Topic

话题是节点之间进行异步通信的渠道。

命令:

$ rostopic list
$ rostopic echo /topic
$ rostopic info /topic

3.3.4 ROS Message

消息是 ROS 中节点之间传递的数据结构。

命令:

$ rostopic type /topic
$ rostopic pub /topic type data

3.4 tutorial示例

Linux 35.5 + ros-noetic@Jetson Orin Nano为例:

  • 安装示例程序
$ sudo apt-get install ros-noetic-roscpp-tutorials
  • 运行roscore
$ roscore
... logging to /home/daniel/.ros/log/fe950290-2b71-11ef-b45c-200b7460c5b7/roslaunch-nvidia-8506.log
Checking log directory for disk usage. This may take a while.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http://nvidia:45373/
ros_comm version 1.16.0


SUMMARY
========

PARAMETERS
 * /rosdistro: noetic
 * /rosversion: 1.16.0

NODES

WARNING: IP addresses 0.0.0.0 for local hostname 'nvidia' do not appear to match
    any local IP address (127.0.0.1,192.168.1.19,172.17.0.1). Your ROS nodes may fail to communicate.

    Please use ROS_IP to set the correct IP address to use.
auto-starting new master
process[master]: started with pid [8524]
ROS_MASTER_URI=http://nvidia:11311/

setting /run_id to fe950290-2b71-11ef-b45c-200b7460c5b7
process[rosout-1]: started with pid [8544]
started core service [/rosout]
  • 运行talker程序
$ rosrun roscpp_tutorials talker
[ INFO] [1718495429.976510980]: hello world 0
[ INFO] [1718495430.076535932]: hello world 1
[ INFO] [1718495430.176508181]: hello world 2
[ INFO] [1718495430.276509423]: hello world 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值