ROS2无人车开发(RDK X3 module+Raspberry PICO)--环境配置篇

我之前一直在做ROS1的无人机与无人车开发工作,作为一个强大的机器人操作系统,ROS为我们的机器人开发工作提供了极大的便利,但是ROS 也有一些局限性和缺点。例如,ROS1 不是实时的,这对于某些高性能、高精度的应用来说可能是一个问题。此外,ROS1 的网络通信也存在一定的局限性,这可能影响到大型系统或者需要高速通信的系统的性能。

限于ROS1的种种不足,我想利用ROS2构建一套自己的无人车系统架构,优化无人车整体组织架构,同时提高无人车的安全性和稳定性。

ROS2相比ROS1最明显的区别在于ROS2可以运行在更多的平台之上,windows、linux、嵌入式设备等,因此无人车的地盘开发我就是利用micro_ros实现的。

基于ROS2开发的地盘不仅可以更方便的与上位机通信,同时还可以提高通讯的安全性和稳定性,并且此组织架构将小车的地盘更好的融入的ROS中,为后续机器人的模块化设计提供了极大的便捷性。

MICRO_ROS开发环境配置

ROS2官方提供micro_ros硬件支持设备中就包括Raspberry Pico,所以我使用Raspberry Pico来完成无人车的地盘开发任务。

首先安装交叉编译器

我们使用raspberry pi pico c/c++ sdk来完成Raspberry Pico的开发工作。

以下是在Ubuntu22.04安装必要的依赖的命令:

sudo apt install cmake gcc-arm-none-eabi libnewlib-arm-none-eabi libstdc++-arm-none-eabi-newlib
 

在github上下载SDK源码:

git clone --recurse-submodules https://github.com/raspberrypi/pico-sdk.git
 

指定编译器路径:

在.bashrc中添加

export PICO_TOOLCHAIN_PATH=##arm-none-eabi-gcc的路径
export PICO_SDK_PATH=$HOME/pico-sdk

运行示例代码

下载示例代码:

git clone https://github.com/micro-ROS/micro_ros_raspberrypi_pico_sdk.git
cd micro_ros_raspberrypi_pico_sdk
mkdir build
cd build
cmake ..
make

烧录到Raspberry Pico中

将生成的pico_micro_ros_example.uf2直接拖到Raspberry Pico中。

启动Micro-ROS代理

micro-ros-agent serial --dev /dev/ttyACM0 -b 115200
 

然后就可以在PC上订阅Raspberry Pico发布的话题。

自此完成在Raspberry Pico运行micro_ros的环境配置。

RDK X3 module环境配置

板子自带ubuntu20.04镜像,默认是emmc启动镜像的,但是官方提供测试的板子emmc只有16GB无法满足开发需求,所以我使用的是64GB的SD卡来做系统盘。

在SD卡烧录镜像的步骤我就不详细说明了,具体参考官方文档:

https://developer.horizon.cc/documents_rdk/installation/install_os

注意板子默认是emmc启动镜像的,需要更改系统环境变量才可以在sd卡启动镜像,具体命令如下:

将eMMC的第二个分区的启动标志删除

sudo parted /dev/mmcblk0 set 2 boot off
 

然后重启就可以在sd卡启动镜像。

如果板子emmc足够大则可以使用emmc:

从SD卡启动切换回从eMMC启动 当在使用SD卡启动系统时,并且eMMC上已经烧录过系统,执行以下命令恢复回从eMMC启动,重启系统生效。

sudo parted /dev/mmcblk0 set 2 boot on
sudo reboot

RDK X3 module 配置Micro XRCE-DDS

Micro XRCE-DDS (eXtremely Resource Constrained Environment DDS) 是一种面向高度资源受限设备的实时发布/订阅(pub/sub)中间件。它是OMG(Object Management Group)数据分布服务(DDS)标准的轻量级实现。

micro-ROS 使用 Micro XRCE-DDS 作为其通信层。Micro XRCE-DDS 作为一种通信中间件,可以在资源受限的设备(如单片机)和更高性能的设备(如运行完整ROS 2的电脑)之间建立连接。

通过Micro XRCE-DDS,micro-ROS能够实现微控制器上的节点(node)和电脑上的ROS 2节点之间的通信,以及不同微控制器之间的通信,这使得单片机能够成为ROS 2生态系统的一部分,可以与其他ROS 2节点(比如机器人的其他部分、传感器、执行器等)进行通信和协作。

img

配置过程如下:

下载Micro XRCE-DDS源码:

git clone https://github.com/eProsima/Micro-XRCE-DDS-Agent.git

编译安装:

cd Micro-XRCE-DDS-Agent 
git checkout foxy
mkdir build && cd build
cmake ..
make
sudo make install
sudo ldconfig /usr/local/lib/

测试是否安装成功:

电脑通过串口与单片机建立联系:

MicroXRCEAgent serial --dev /dev/ttyACM0 -b 115200
 

电脑通过UDP协议与单片机建立联系:

MicroXRCEAgent udp -p 2018
 

电脑通过TCP协议与单片机建立联系:

MicroXRCEAgent tcp -p 2018