☰
进迭K1 RISC-V开发板 ROS2 Iron 环境搭建
2026/10/1 20:31:16 网站建设 项目流程

前言

在RISC-V架构的米联客进迭K1开发板上搭建ROS2环境,相比x86平台会遇到更多兼容性问题。本文基于官方教程,记录了从源码编译到镜像制作的完整流程,帮助开发者少走弯路。

1文件部署

将以下两个文件(可自行下载)部署到开发板的 `/root/ros2/ros2_iron` 目录:

ros2_iron_ready.tar.gz:包含ROS2源码及rosdep缓存,含全部vendor源码包

ros2_deps.tar.gz:21个vendor依赖的离线压缩包

cd ~

tar -xzvf ros2_iron_ready.tar.gz

mkdir -p ~/ros2_deps

tar -xzf ros2_deps.tar.gz -C ~/ros2_deps --strip-components=3

ls ~/ros2_deps/ | wc -l # 验证应为21

2环境配置

2.1 安装系统依赖

sudo apt update && sudo apt install -y \

build-essential cmake git python3-pip \

libasio-dev libbullet-dev libconsole-bridge-dev \

libtinyxml2-dev libeigen3-dev \

python3-dev python3-numpy python3-yaml python3-empy

sudo pip install --break-system-packages -i https://pypi.tuna.tsinghua.edu.cn/simple \

vcstool rosdep colcon-common-extensions

2.2 配置rosdep(离线模式)

rosdep缓存已随tar包内置在 `~/rosdep_cache/` 目录下:

sudo mkdir -p /etc/ros/rosdep/sources.list.d

sudo tee /etc/ros/rosdep/sources.list.d/20-default.list << 'EOF'

yaml file:///root/rosdep_cache/base.yaml

yaml file:///root/rosdep_cache/python.yaml

yaml file:///root/rosdep_cache/ruby.yaml

yaml file:///root/rosdep_cache/osx-homebrew.yaml

yaml file:///root/rosdep_cache/iron.yaml

EOF

export ROS_OS_OVERRIDE=ubuntu:jammy

rosdep update # 离线环境会超时失败,可跳过

cd ~/ros2/ros2_iron

rosdep install -r --from-paths src --ignore-src -y \

--skip-keys "fastcdr rti-connext-dds-6.0.1 urdfdom_headers"

2.3 修复Mimick RISC-V兼容问题

修改 `mimick_vendor/CMakeLists.txt`,将Mimick仓库替换为RISC-V兼容的fork:

# 第61行

set(mimick_version "90d02296025f38da2e33c67b02b7fa0c7c7d460c")

# 第63行

GIT_REPOSITORY https://github.com/ziyao233/Mimick.git

2.4 替换vendor包下载源为本地文件(关键步骤)

这一步是离线编译的核心——将各vendor的 `GIT_REPOSITORY`/`URL`/`FetchContent` 替换为本地源目录。涉及的包括:

注意事项:

`SOURCE_DIR` 必须每个文件只出现一次,重复会导致CMake报错。

`shared_queues_vendor` 比较特殊,需要预置压缩包到 `build/shared_queues_vendor/download/` 目录。

替换完成后用 `grep` 检查是否还有残留的远程下载URL。

2.5 删除PATCH_COMMAND

部分vendor的CMakeLists中有基于git的PATCH_COMMAND,由于本地源码不是git仓库,`git apply` 会失败,需要删除这些补丁命令段:

orocos_kdl_vendor:删除PATCH_COMMAND段

pybind11_vendor:删除两段PATCH_COMMAND

2.6 安装额外系统依赖

apt install -y liblttng-ust-dev

apt install -y qtbase5-dev shiboken2 libshiboken2-dev \

python3-pyside2.qtcore python3-pyside2.qtwidgets libpyside2-dev

pip install --break-system-packages lark

apt install -y libopencv-dev # 可选,避免图像相关包编译失败

3编译ROS2核心

3.1 编译前内存优化

K1板子仅3.7G内存,必须做内存优化:

# 禁用桌面音频服务防止OOM

sudo systemctl stop pipewire wireplumber pipewire-pulse 2>/dev/null

sudo systemctl mask pipewire wireplumber pipewire-pulse 2>/dev/null

# 添加2G swap

fallocate -l 2G /swapfile && chmod 600 /swapfile \

&& mkswap /swapfile && swapon /swapfile

3.2 启动编译

cd ~/ros2/ros2_iron

nohup colcon build --symlink-install \

--parallel-workers 2 \

--cmake-args -DBUILD_TESTING=OFF \

--packages-skip rviz_ogre_vendor rviz_rendering rviz_rendering_tests \

rviz rviz2 rviz_default_plugins rviz_common rviz_visual_testing_framework \

> ~/build1.log 2>&1 &

提示:`--parallel-workers` 建议设为2,设为3及以上容易触发OOM。编译过程可能需要数小时。

查看编译进度:

tail -n 15 ~/build1.log

grep -E '^Failed' ~/build1.log # 检查是否有失败

grep -cE '^Finished' ~/build1.log # 已完成数量

编译完成后再次执行同一命令,会自动跳过已成功的包,多轮收敛直到全部完成。

4设置环境变量

echo "source ~/ros2/ros2_iron/install/local_setup.bash" >> ~/.bashrc

source ~/ros2/ros2_iron/install/local_setup.bash

5验证安装

1、测试Talker/Listener通信

ros2 run demo_nodes_cpp talker > /tmp/talker.log 2>&1 &

sleep 8

ros2 run demo_nodes_py listener 2>&1 | head -20 &

sleep 5

cat /tmp/talker.log | tail -5

看到 `Publishing: 'Hello World: N'` 和 `I heard: [Hello World: N]` 即表示成功。

ros2 pkg list | wc -l # 应输出 ~330+

  1. 验证 TurtleSim

6制作可烧录镜像(可选)

编译好的ROS2可以打包进Bianbu系统镜像,方便批量部署:

1. 挂载原版Bianbu rootfs(从16G扩容到30G)

2. 将ROS2文件和系统库提取到rootfs中

3. 缩小rootfs到最小可用大小(约19G)

4. 打包为 `bianbu-custom.zip`(约5.7G)

5. 使用titanflasher工具烧录

烧录后验证:

source /root/ros2/ros2_iron/install/local_setup.bash

export RMW_IMPLEMENTATION=rmw_cyclonedds_cpp

ros2 run demo_nodes_cpp talker &

ros2 run demo_nodes_py listener

如提示磁盘空间不足,需要在板子上执行 `resize2fs /dev/mmcblk2p6` 扩大分区。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询