认识ROS
- 参考资料
- ROS的定义与组成
- ROS核心概念与通信机制
- 第一个ROS例程--小海龟仿真分析
- 问题解决
- 结语
参考资料
深蓝学院 – ROS理论与实践。
ROS的定义与组成
ROS,Robot Operating System,机器人操作系统。(具体定义可以参见ROS官网)
ROS = 通信机制 + 开发工具 + 应用功能 + 生态系统。
ROS使用的好处 – 提高机器人研发中的软件复用率:
- 点对点的设计。
- 多语言支持。
- 架构精简、集成度高。
- 组件化工具包、功能包丰富。
- 免费并且开源。
通信机制:松耦合分布式通信。
开发工具:TF坐标变换、QT工具箱、Gazebo、Rviz、命令行&编译器。
应用功能:Navigation、SLAM、Movelt。
生态系统:发行版、软件源、ROS wiki、邮件列表、ROS Answers、博客。
ROS核心概念与通信机制
节点(Node)- - 执行单元
- 执行具体任务的进程、独立运行的可执行文件;
- 不同节点可使用不同的编程语言,可分布式运行在不同的主机;
- 节点在系统中的名称必须是唯一的。
节点管理器(ROS Master)- - 控制中心
- 为节点提供命令和注册服务;
- 跟踪和记录话题/服务通信,辅助节点相互查找、建立连接;
- 提供参数服务器,节点使用此服务器存储和检索运行时的参数。
话题(Topic)- - 异步通信机制
- 节点间用来传输数据的重要总线;
- 使用发布/订阅模型,数据由发布者传输到订阅者,同一个话题和订阅者或发布者可以不唯一。
消息(Message)- - 话题数据
- 具有一定的类型和数据结构,包括ROS提供的标准类型和用户自定义类型;
- 使用编程语言无法的.msg文件定义,编译过程中生成对应的代码文件。
服务(Service)- - 同步通信机制
- 使用客户端/服务器(C/S)模型,客户端发送请求数据,服务器完成处理后返回回答数据;
- 使用编程语言无关的.srv文件定义请求和应答数据结构,编译过程中生成对应的代码文件。
参数(Parameter)- - 全局共享字典
- 可通过网络访问的共享、多变量字典;
- 节点使用此服务器来存储和检索运行时的参数;
- 适合存储静态、非二进制的配置参数。不适合存储动态配置的数据。
功能包(Package)
- ROS软件中的基本单元,包含节点源码、配置文件、数据定义等。
功能包清单(Package manifest)
- 记录功能包的基本信息,包含作者信息、许可信息、依赖选项、编译标志等。
元功能包(Meta Packages)
- 组织多个用于同一目的功能包。
话题与服务的区别:
话题 | 服务 | |
同步性 | 异步 | 同步 |
通信模式 | 发布/订阅 | 服务器/客户端 |
底层协议 | ROSTCP/ROSUDP | ROSTCP/ROSUDP |
反馈机制 | 无 | 有 |
缓冲区 | 有 | 无 |
实时性 | 弱 | 强 |
节点关系 | 多对多 | 一对多(一个server) |
适用场景 | 数据传输 | 逻辑处理 |
第一个ROS例程–小海龟仿真分析
常用命令:rostopic、rosservice、rosnode、rosparam、rosmsg、rossrv
。
小海龟仿真启动步骤:
启动ROSMaster
启动小海龟仿真器
启动海龟控制节点
启动ROS Master,在终端执行:roscore
。
启动小海龟仿真器,在终端执行:rosrun turtlesim turtlesim_node
。
启动海龟控制节点,在终端执行:rosrun turtlesim turtle_teleop_key
。
查看系统中运行的计算图,rqt_graph
:
查看话题列表,rosnode list
:
查看某个节点的具体信息,rosnode info 节点名称
:
查看话题的具体信息,rostopic echo 话题名称
:
终端发布话题信息,rostopic pub -r 频率 话题名称 数据类型 具体数据
:
发布服务请求,rosservice call 服务名称 服务数据:
打开绘图工具,rqt_plot
:
问题解决
运行roscore的时候,出现如下错误:
经检查,因为自己安装CUDA后导致ROS系统环境没有放在文件的底部,修改步骤:
# 打开 ~/.bashrc文件
sudo gedit ~/.bashrc
# 文件最后添加
source /opt/ros/noetic/setup.bash
# 重新启动环境文件
source ~/bashrc
结语
怕什么真理无穷,进一寸有一寸的欢喜!!!