认识ROS

  • 参考资料
  • ROS的定义与组成
  • ROS核心概念与通信机制
  • 第一个ROS例程--小海龟仿真分析
  • 问题解决
  • 结语


参考资料

深蓝学院 – ROS理论与实践。

ROS的定义与组成

ROS,Robot Operating System,机器人操作系统。(具体定义可以参见ROS官网)
ROS = 通信机制 + 开发工具 + 应用功能 + 生态系统。

ROS使用的好处 – 提高机器人研发中的软件复用率

  1. 点对点的设计。
  2. 多语言支持。
  3. 架构精简、集成度高。
  4. 组件化工具包、功能包丰富。
  5. 免费并且开源。

通信机制松耦合分布式通信。
开发工具: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

ros机器人 java ROS机器人理论与实践_数据


启动小海龟仿真器,在终端执行:rosrun turtlesim turtlesim_node

ros机器人 java ROS机器人理论与实践_服务器_02

启动海龟控制节点,在终端执行:rosrun turtlesim turtle_teleop_key

ros机器人 java ROS机器人理论与实践_数据_03

查看系统中运行的计算图rqt_graph

ros机器人 java ROS机器人理论与实践_ros机器人 java_04


查看话题列表rosnode list

ros机器人 java ROS机器人理论与实践_服务器_05

查看某个节点的具体信息rosnode info 节点名称

ros机器人 java ROS机器人理论与实践_数据_06

查看话题的具体信息rostopic echo 话题名称

ros机器人 java ROS机器人理论与实践_ros机器人 java_07

终端发布话题信息rostopic pub -r 频率 话题名称 数据类型 具体数据

ros机器人 java ROS机器人理论与实践_人工智能_08

发布服务请求rosservice call 服务名称 服务数据

ros机器人 java ROS机器人理论与实践_服务器_09


ros机器人 java ROS机器人理论与实践_数据_10

打开绘图工具rqt_plot

ros机器人 java ROS机器人理论与实践_服务器_11

问题解决

运行roscore的时候,出现如下错误:

ros机器人 java ROS机器人理论与实践_服务器_12


经检查,因为自己安装CUDA后导致ROS系统环境没有放在文件的底部,修改步骤:

# 打开 ~/.bashrc文件
sudo gedit ~/.bashrc

# 文件最后添加
source /opt/ros/noetic/setup.bash

# 重新启动环境文件
source ~/bashrc

结语

怕什么真理无穷,进一寸有一寸的欢喜!!!