跳转到正文
Mind in Motion

OriginCar RDK X5 入门实践:从镜像烧录到 ROS 2 远程控制

记录 OriginCar RDK X5 从镜像与主板程序烧录、网络连接,到 ROS 2 底盘控制、相机展示和 rosbridge 上位机联动的完整实践路径。

嵌入式系统,ROS2分钟阅读
OriginCar 通过网线连接笔记本电脑
OriginCar 通过网线连接笔记本电脑

拿到一块搭载地平线 RDK 的 OriginCar 后,真正需要处理的事情并不只有“把 ROS 2 跑起来”。从存储卡烧录系统、主板烧录程序,到让电脑通过网络登录设备,再到启动底盘、相机和上位机,每一步都依赖前一步的结果。

这篇文章把我的 OriginCar 使用记录整理成一条连续路径:先完成设备准备,再建立远程连接,随后启动 ROS 2 基础功能,最后通过 rosbridge 把车辆数据交给上位机。文中的默认地址、软件版本和命令来自历史使用记录,实际操作前需要根据当前镜像与 RDK 文档重新核对。

可以把这次配置分成五层:

  1. 设备层:向 Micro SD 卡写入 RDK 镜像,并向 OriginCar 主板烧录 HEX 程序。
  2. 网络层:通过网线或 Wi-Fi 让电脑与 RDK 进入同一个可通信的网络。
  3. 系统层:使用 SSH 登录 RDK,处理软件源、GPG 签名和代理配置。
  4. ROS 2 层:启动底盘、键盘控制、相机和 rosbridge
  5. 上位机层:运行桌面端程序,通过 WebSocket 连接 ROS 2 话题和服务。

这条链路的好处是便于定位问题:设备无法启动时检查烧录,电脑无法登录时检查网络,ROS 2 命令失败时检查软件包和环境,上位机没有数据时检查 rosbridge 与 IP、端口配置。

将下载的镜像解压为 .img 文件,然后使用 balenaEtcher:

解压后的 OriginCar RDK 镜像文件

  1. 点击 Flash from file,选择解压后的 .img 文件。
  2. 点击 Select target,选择对应的 Micro SD 卡。
  3. 点击 Flash,等待工具显示烧录完成。

烧录前确认目标磁盘,避免选择到电脑本地磁盘。镜像写入完成后,将存储卡装入 RDK 并上电启动。

balenaEtcher 选择镜像文件

balenaEtcher 显示烧录完成

主板程序使用 FlyMcu2188 工具烧录。连接电脑和 OriginCar 主板后,按照工具要求选择 HEX 文件和烧录串口。执行烧录时需要按下主板复位键;历史记录中,烧录成功后可以观察到 OriginCar 两侧灯带亮起。

OriginCar 主板烧录相关文件

FlyMcu2188 烧录设置

OriginCar 主板接口

地平线 RDK 的历史默认地址如下:

型号 记录中的有线默认地址
RDK X3 192.168.1.10
RDK X5 192.168.127.10

这些地址属于镜像和网络配置相关的历史记录。使用前先在设备端或显示器上确认当前地址,避免把默认值当作实时状态。

准备网线连接电脑和 OriginCar,再将电脑以太网接口设置到与 RDK 相同的网段。打开 MobaXterm,创建 SSH 会话并填写 RDK 的 IP 地址、端口和登录用户。

OriginCar 与笔记本电脑的有线连接

官方远程登录参考:RDK Remote Login

MobaXterm 下载页面

在已经登录 RDK 的终端中,可以按照当前镜像提供的网络工具检查 Wi-Fi:

Terminal window
sudo nmcli device wifi rescan
sudo nmcli device wifi list
sudo wifi_connect "SSID" "PASSWORD"
ifconfig

其中 wifi_connect 属于镜像环境中的辅助命令,系统没有该命令时需要改用 NetworkManager 的标准连接方式。执行 ifconfigip addr 获取新的无线网卡地址,再使用该地址建立 SSH 连接。

OriginCar 镜像记录中包含 ROS 2 Foxy、TogetheROS 以及车辆底层驱动。登录 RDK 后,先启动底盘:

Terminal window
ros2 launch origincar_base origincar_bringup.launch.py

OriginCar 底盘启动日志

然后在另一个终端启动键盘控制:

Terminal window
ros2 run teleop_twist_keyboard teleop_twist_keyboard

OriginCar 使用阿克曼转向结构,车辆的转向运动依赖线速度。启动键盘节点后,可以通过终端中的按键发送速度指令,观察底盘是否响应。

键盘控制节点的按键说明

相机展示 Demo 使用以下启动文件:

Terminal window
ros2 launch origincar_bringup usb_websocket_display.launch.py

将电脑和 OriginCar 放在同一个局域网中,在浏览器打开:

http://<RDK_IP>:8000

其中 <RDK_IP> 替换为当前 RDK 地址。这个 Demo 适合先验证相机采集和网络展示链路,再继续接入自己的视觉节点。

RDK 软件源需要同时匹配设备型号、Ubuntu 代号和软件源发布通道。先登录 RDK 检查当前环境:

Terminal window
cat /etc/version
. /etc/os-release
printf 'Ubuntu: %s\n' "$PRETTY_NAME"
dpkg --print-architecture
cat /etc/apt/sources.list.d/sunrise.list

D-Robotics 当前 RDK X5 文档以 Ubuntu 22.04(jammy)镜像为主。旧镜像可能仍然使用 Ubuntu 20.04(focal),软件源需要跟随实际镜像版本。

编辑 /etc/apt/sources.list.d/sunrise.list:

Terminal window
sudoedit /etc/apt/sources.list.d/sunrise.list

根据当前型号、Ubuntu 版本和发布通道保留对应的一行。RDK X5 的示例配置如下:

# RDK X5 Ubuntu 22.04 正式源
deb [signed-by=/usr/share/keyrings/sunrise.gpg] http://archive.d-robotics.cc/ubuntu-rdk-x5 jammy main
# RDK X5 Ubuntu 22.04 beta 源
deb [signed-by=/usr/share/keyrings/sunrise.gpg] http://archive.d-robotics.cc/ubuntu-rdk-x5-beta jammy main
# 旧版 Ubuntu 20.04 镜像的历史示例
deb [signed-by=/usr/share/keyrings/sunrise.gpg] http://archive.d-robotics.cc/ubuntu-rdk-x5 focal main

正式源和 beta 源属于不同发布通道,配置时保留与你当前目标对应的一行。旧版 focal 示例用于历史镜像排查,当前 X5 新镜像优先核对官方 jammy 配置。

将密钥保存到与软件源中 signed-by 相同的路径:

Terminal window
sudo install -d -m 0755 /usr/share/keyrings
sudo curl -fsSL http://archive.d-robotics.cc/keys/sunrise.gpg \
-o /usr/share/keyrings/sunrise.gpg
sudo chmod 0644 /usr/share/keyrings/sunrise.gpg
gpg --show-keys --fingerprint /usr/share/keyrings/sunrise.gpg

原始记录中出现过 NO_PUBKEY 599F576057BDF67C,也记录过使用 apt-key 从密钥服务器取 key 的旧流程。当前软件源配置使用独立 keyring 和 signed-by,密钥指纹与下载地址应以当前 D-Robotics 官方文档为准。

完成源和密钥配置后更新索引:

Terminal window
sudo apt update
apt-cache policy

如果仍然出现签名错误,依次核对 sunrise.list 中的域名、型号目录、Ubuntu 代号、beta/正式通道和 keyring 路径。

上位机通过 rosbridge 与 ROS 2 通信。历史配置中,安装 rosbridge 前需要处理 ROS 软件源和密钥:

Terminal window
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key \
-o /usr/share/keyrings/ros-archive-keyring.gpg

执行前确认当前 Ubuntu 发行版、ROS 发行版和官方仓库配置。安装并启动 rosbridge

Terminal window
sudo apt install ros-$ROS_DISTRO-rosbridge-suite
ros2 launch rosbridge_server rosbridge_websocket_launch.xml

rosbridge WebSocket 服务启动日志

上位机连接时,需要填写 RDK 的 IP 地址和 rosbridge WebSocket 端口。连接成功后,Foxglove 或项目提供的桌面端程序可以读取车辆话题,并向底盘发送控制指令。

历史上位机环境需要安装 keyboardroslibpyopencv-pythonpyyaml 等 Python 依赖:

上位机项目文件结构

上位机目录和启动文件说明

Terminal window
pip install -r requirements.txt

Windows 端可以运行源码或打包后的 bridge_client.exe。源码运行方式如下:

Terminal window
python bridge_client.py <RDK_IP> <PORT>

运行前确认 bridge_client.py 同级目录存在 map.png。二进制版本则需要将 map.png 放在 bridge_client.exe 同级目录,并在同目录的 config.yaml 中设置连接参数。

Ubuntu 端使用项目提供的 Shell 脚本:

Terminal window
./bridge_client.sh

coScene 打开数据源界面

coScene 导入布局菜单

原始记录中的重复布局菜单截图

需要自行打包时,可以使用项目中的 PyInstaller 配置:

Terminal window
pyinstaller src/bridge_client.spec

连接完成后,先在 RDK 中启动底盘和 rosbridge,再在上位机中打开连接。这样可以把“底盘驱动是否运行”和“上位机是否连接成功”分开检查。

例如出现 NO_PUBKEY 时,通常需要检查仓库地址、发行版代号、密钥文件和密钥指纹。原始记录使用过 apt-key,当前 Ubuntu 的密钥环配置方式需要以发行版和官方文档为准。

检查 /etc/apt/sources.list.d/sunrise.list,确认 RDK 型号、Ubuntu 版本和软件源路径匹配。历史配置示例如下:

deb [signed-by=/usr/share/keyrings/sunrise.gpg] http://archive.d-robotics.cc/ubuntu-rdk/ focal main

这条配置只适用于相应的软件源环境,修改前应先确认当前系统版本和官方源信息。

按以下顺序检查:

  1. 网线、Wi-Fi 和网卡是否已经连接。
  2. 电脑与 RDK 是否处于同一网段。
  3. RDK 当前 IP 是否发生变化。
  4. SSH、WebSocket 或网页展示使用的端口是否正确。
  5. 局域网代理是否把本地地址排除在 NO_PROXY 之外。

完整的自动检测、手动开关和 sudo 继承配置见 Ubuntu/RDK 开发环境代理配置。这里保留一段最小的占位符示例,方便快速检查局域网代理变量:

Terminal window
export HOST_IP="<PROXY_HOST>"
export PROXY_PORT="<HTTP_PORT>"
export SOCKS_PORT="<SOCKS5_PORT>"
export HTTP_PROXY="http://${HOST_IP}:${PROXY_PORT}"
export HTTPS_PROXY="http://${HOST_IP}:${PROXY_PORT}"
export ALL_PROXY="socks5://${HOST_IP}:${SOCKS_PORT}"
export NO_PROXY="localhost,127.0.0.1,::1,10.*,192.168.*,172.16.0.0/12"

OriginCar 的 ROS 2 入门过程可以拆成一条清晰的验证链:先确认系统能启动,再确认网络能登录,然后确认底盘和相机节点能够工作,最后确认 rosbridge 与上位机能够交换数据。按照这条顺序排查,每个阶段都有明确的输入、命令和观察结果,后续接入导航、视觉或比赛控制节点时也更容易定位问题。

© yznn007. 保留所有权利。