Skip to main content

1.0ROS及简介

本章节通过ROS2官方提供的Gazebo虚拟仿真,实现视觉运动算法仿真。

info

什么是视觉运动控制算法?

运动控制算法主要是通过传感器,将采集到的数据,转化为运动控制指令。

传感器包含:视觉、重力、力反馈、加速度、测距等多种类型。特斯拉的自动驾驶使用的方案中视觉是最主要的信息来源。

运动控制从易到难有:履带结构、差速结构、阿克曼结构、全向结构、足腿结构。

info

为什么要虚拟仿真?

目前较为先进的腿足结构机器人想要完成高难度动作,例如:后空翻、前空翻、韦伯斯特空翻。一旦失败会对本不充裕的原型机造成严重的损坏。

所以通过仿真软件训练,有如下好处:

  • 可以在低风险的情况下完成算法的调试和优化。
  • 对于复杂算法,可以同时启动多个仿真软件,进行并行训练,提高训练效率。
warning

虚拟仿真需要一定的算力。本地使用前,首先确保你的电脑包含显卡。

  • ✔推荐使用原生Ubuntu最大限度发挥硬件性能。非原生环境下可能出现消息异常、时间异常等问题。

  • 高算力的电脑可以使用wsl安装Ubuntu。

  • ❌使用VM虚拟机会产生较大的延迟。

info

用机器学习中的概念来类比,Gazebo好比是Pytorch,ROS2好比是Python。

你希望使用Pytorch开始深度学习,所以要查看最新版Pytorch适配的Python版本(3.10+),需要英伟达显卡才能加速,再查看Python支持的操作系统(Mac、Linux、Windows)。

搞清楚之后,再从系统开始,安装Python,最后Pytorch和显卡驱动安装成功。谋定而后动。

ROS2框架

ROS 2需要依赖于Ubuntu系统,其微控制器相较于普通MCU成本更高。主要用于高级机器人。

通信优势

丰富的通信类型

ROS 2节省自己搭建网络、定义通信类型、管理连接的时间。

通信模式作用特点应用场景
话题:发布-订阅 (Publish-Subscribe)单向、异步数据流高效、解耦,适用于传感器数据流、状态更新传感器数据流(如相机图像、激光雷达数据)、机器人状态更新(如位置、速度)
服务:服务端-客户端 (Service-Client)同步、请求-响应阻塞式通信,用于需要明确结果的任务触发特定动作(如抓取物体)、查询物体 ID
动作 (Actions)长时任务处理异步、支持进度反馈和取消移动机器人到指定位置、机械臂执行复杂任务
参数 (Parameters)动态配置节点行为非实时通信,用于启动时或运行时的配置调整调整 PID 控制器增益、修改传感器发布频率

自动发现机制

同为ROS 2,在同一网段下的不同设备可以自动发现

info

自动发现前提:指要求中继设备允许子设备自由通信。

中继设备可能是路由器、或者手机的热点、随身WIFI等。

允许子设备自由通信有利有弊,如果你在商场或者咖啡馆连接他们的WIFI,你的电脑可能提醒你:你的网络活动可能被其他设备发现。自由通信会带来一定的安全隐患。因此并不是所有的路由器都默认允许允许子设备自由通信。

有的设备会有防火墙,临时关闭防火墙:sudo ufw disable,另外要允许UDP多播端口(默认7400~7500)。

如果一切正常,你应该可以通过ping <其他机器的IP>并联通成功。

此时你可以通过ros2运行节点发布消息,其他设备的接收者会收到你的消息。

隔离机制

如果你同个网段下,有无人机和机器狗。你想将其编队为:空军 + 陆军;又或者5台无人机 + 机器狗为一组。

ROS 2提供了通信隔离机制

在同个编队的所有设备终端中执行:export ROS_DOMAIN_ID=1。(值范围为0~101,0为默认值)

这个命令是设置了一个环境变量。ROS 2通过判断这个环境变量来识别是否为一组。不同ID节点无法通信。

因此如果你想将其分为两组,只需要在一半的设备上改为非0的,相同的ID即可。

多设备跨域通信

如果你的设备分别在两个城市,可以通过配置一台公网下的服务器(也可以在两个网段下,配置一个都能访问的设备作为中继),将两个城市的设备连接到这台服务器上。这种通信方式被称为Fast-DDS

在服务器上运行:fastdds discovery --server-id 0

服务器开放11888端口。sudo ufw allow 11888/tcp

在设备上运行:export ROS_DISCOVERY_SERVERS=<服务器IP>:<服务器端口>。(端口默认11888)

设置ROS中间件为rmw_fastrtps_cpp(别人写好的包):export RMW_IMPLEMENTATION=rmw_fastrtps_cpp 然后重新监听:ros2 daemon stop,再重新启动:ros2 daemon start

模块仓库

ROS 2有大量写好的机器人相关的包,包也称:模块、功能包、库。

安装相机标定: sudo apt install ros-jazzy-camera-calibration

安装SLAM: sudo apt install ros-jazzy-slam-toolbox

你会发现你只需要安装一个包,就可以获得一个功能。和Python通过pip安装包一样。安装后即可实现"一行代码"实现某个功能。