Robot Operating System (ROS, 机器人操作系统)是专为机器人软件开发所设计出来的一套电脑操作系统架构。
介绍
-
ROS 是一个开源的元级操作系统,2007 年 11 月,提供类似于操作系统的服务,包括硬件抽象描述、底层驱动程序管理、共用功能的执行、程序间消息传递、程序发行包管理,它也提供一些工具和库用于获取、建立、编写和执行多机融合的程序
- ROS1 架构中,所有节点需要使用 Master 进行管理
- ROS2 使用基于 DDS 的 Discovery 机制,解除了 Master 的中心化
-
相关技术
- OpenCV
- AMCL
- TF
- MoveIt
- DWAPlanner
- GlobaIPlanner
- LocalPlanner
- BahaviorTree
- PointCloudLibrary
- SMACH
- Navigation
- CostMap
- Gazebo
- OMPL
-
安装部署:http://wiki.ros.org/noetic/Installation
-
ros2 相关代码:ros2_21_tutorials
-
ros1 wpr_simulation
-
命令行
ros2 --help -
核心概念
workspace工作空间是存放项目开发文件的目录srcsource spacebuildbuild spaceinstallinstall spaceloglog space
node节点是机器人的工作细胞- 支持使用不同语言开发
- 分布式运行
- 执行具体任务的进程,独立的可执行文件
- 通过节点名称管理:
ros2 run <xxx> <xxx> - 常见的节点
- 超声波 Node:sensor_package/ssr_pkg
- 底盘 Node
topic话题是节点间传递数据的桥梁- 发布/订阅模型
- 订阅者或发布者可以不唯一:一对一、一对多、多对多
- 异步通信机制
- topic 发送的内容称为
message,使用.msg文件定义通信的消息结构 ros2 topic --help、ros2 topic list、ros2 topic pub <topic> <content>- 常见的话题
/scan雷达数据话题,雷达节点发送,sensor_msgs:LaserScan/cmd_vel速度控制话题,雷达避障节点发出,指导机器人底盘节点/imu/dataIMU 数据话题IMU(Inertial Measurement Unit, 惯性测量单元),获取空间姿态,sensor_msgs:Imu.msg- 通过
/cmd_vel控制底盘
/map地图使用栅格划分nav_msgs:OccupancyGridrqt_graph命令绘制关系 UI
servicebag
-
开发环境
- vscode
- 插件:
URDF
- 插件:
- 客户端
pip3 install rosdepc或使用apt install python3-rosdeprosdepc init && rosdepc updaterosdepc install -i --from-path src --rosdistro humble -y- build:
apt install python3-colcon-ros && colcon build - env setup:
source install/local_setup.sh
- 创建功能包:
ros2 pkg create --build-type <build-type> <package-name>
- vscode
-
服务:节点间的你问我答
- 客户端/服务器(C/S)模型
- 同步通信机制
- 服务器唯一,客户端可以不唯一
- .srv 文件定义请求和应答数据结构
-
通信接口:数据传递的标准结构
.msg话题文件.srv服务文件.action动作文件- 在 https://index.ros.org 搜索消息包:
std_msgs标准消息包common_msgs常规消息包sensor_msgs传感器消息包geometry_msgs几何消息包nav_msgs导航消息包
-
动作:完整行为的流程管理
- 机器人运动
- 矢量运动:由 X/Y/Z 轴分量组成
- 旋转运动:由 X/Y/Z 轴分量组成,angular 表示角度
- 使用 topic:
/cmd_vel控制- command_velocity
- 机器人运动
-
参数:机器人系统的全局字典
- 全局共享字典
- 有键与值组成
- 可实现动态监控
ros2 param list
-
分布式通信:多计算平台任务分配
-
DDS(Data Distribution Service, 数据分发服务):机器人的神经网络,2004 年由对象管理组织(OMG, Object Management Group)发布- 专门为实时系统设计的数据分发/订阅标准,DDS 强调以数据为中心
- 常见的通信模式:点对点、Broker 模式、广播模式、数据为中心模式
-
Launch:多节点启动与配置脚本,参考
- 支持多节点多服务的启动
-
TF(TransForm):机器人坐标管理系统,主要描述两个坐标系的空间关系,即坐标系变换/tf话题- 静态 TF 广播
-
URDF(Unified Robot Description Format, 统一机器人描述格式):ROS 机器人建模方法- XML 格式
- 包括:robot、link 和 join 自身及相关属性的描述信息。XACRO 格式支持宏定义和调用
-
Gazebo:是一款三维物理仿真平台,是用来模拟真实机器人发出传感器数据的工具(作用:创造数据)- 强大的物理引擎,高质量的图形渲染
- 方便的编程与图形接口
- 开源免费
- 使用场景:测试机器人算法、机器人设计、现实场景下的回溯测试
- RGB-D 摄像头仿真(kinect)
- 激光雷达仿真
apt install ros-humble-gazebo-*- 扩展
- Logsim 提取 log 来做仿真,是由路测数据提取的场景,真实反映了实际交通环境中复杂多变的障碍物和交通状况,其场景相对固定
- Worldsim 是由人为预设的道路和障碍物构成的场景,可以作为单元测试简单高效的测试自动驾驶车辆
-
Ignition新一代 Gazebo,官网apt install ros-humble-ros-ign
-
Rviz(The Robot Visualization Tool):是一款三维可视化显示平台,可以兼容基于 ROS 框架的机器人平台(作用:显示数据)- 使用 xml 对机器人、周围物体等进行描述,包括尺寸、质量、位置、关节、材质等
- 命令:
ros2 run rviz rviz [-d <xxx>.rviz]
-
RQT:模块化可视化工具
apt install ros-humble-rqt
-
SLAM(Simultaneous Localization And Mapping, 同时定位于地图构建)通过参照物、电子标签等实现- 数据流:
/scan->SLAM节点->/map->Rviz 显示 - 实现
Hector_Mappingapt install ros-humble-hector-mapping
slam_gmapping
- 数据流:
相关硬件
- IMU 是附着在机器人身上的,实时发布机器人的旋转倾斜等姿态信息的单元模块
- 雷达
- 单线雷达
- 多线雷达
- 三角测距雷达
- TOF 雷达
- 机械旋转雷达
- 固态雷达
ROS 使用
扩展
- Apollo 是一个开放、完整、安全的自动驾驶平台,助力开发者快速搭建自动驾驶系统,由百度开发
- ros_motion_planning