ROS humble on openEuler RISC-V

最近在做 ROS humble 在 openEuler risc-v 23.09 上的移植工作,现在来分享一下在 risc-v 开发板上的双机通信的 demo。

准备工作

完成本示例需要 openEuler risc-v 23.09 或 22.03 支持的硬件以及对应的镜像,或 qemu 镜像。

相关内容可见:

以下为本示例选取的一种环境,您可以根据上述系统版本支持的硬件选取合适的环境,或选取支持的 qemu 镜像。

环境信息

硬件信息

本示例使用到的硬件为:

  1. LicheePi 4A 处理器 TH1520 内存 16GB
  2. Visionfive 2 处理器 JH7110 内存 4GB

若选取 qemu 镜像来完成本示例,请参考 双机通信 来调通两台虚拟机的网络。

软件信息

本示例中 LicheePi 4A 刷写的镜像为 openEuler-23.09,Visionfive 2 刷写的镜像为 openEuler-22.03

LicheePi 4A
  1. OS 版本:openEuler-23.09-V1-xfce-lpi4a

  2. 镜像地址:https://mirror.iscas.ac.cn/openeuler-sig-riscv/openEuler-RISC-V/devel/20231123/v0.1/lpi4a_thead/

  3. 软件源:https://mirror.iscas.ac.cn/openeuler-sig-riscv/openEuler-RISC-V/preview/openEuler-23.09-V1-riscv64/repo/

Visionfive 2
  1. OS 版本:openEuler-22.03-V2-xfce-visionfive2-preview

  2. 镜像地址:https://mirror.iscas.ac.cn/openeuler-sig-riscv/openEuler-RISC-V/preview/openEuler-22.03-V2-riscv64/Visionfive2/openEuler-22.03-V2-xfce-visionfive2-preview.img.tar.zst

  3. 软件源:https://mirror.iscas.ac.cn/openeuler-sig-riscv/openEuler-RISC-V/preview/openEuler-22.03-V2-riscv64/repo

若选取 qemu 镜像来完成本示例,选取支持的系统镜像即可。

2 个赞

刷写镜像并启动

LicheePi 4A

参考官方烧录镜像教程,获取 fastboot 烧录工具,进入烧录模式。

u-boot-with-spl-lpi4a.binu-boot-with-spl-lpi4a-16g.bin 为 u-boot 固件,具体差异请参考镜像说明。

sudo ./fastboot flash ram ./images/u-boot-with-spl-lpi4a-16g.bin
sudo ./fastboot reboot
sleep 1

分别烧录下面三个镜像:启动引导镜像-uboot,启动分区-boot,操作系统根分区-root

sudo ./fastboot flash uboot ./images/u-boot-with-spl-lpi4a-16g.bin
sudo ./fastboot flash boot ./images/boot-20231130-224942.ext4.zst
sudo ./fastboot flash root ./images/root-20231130-224942.ext4.zst

如遇问题,请提问或参考官方烧录镜像教程。

Visionfive 2

openEuler 22.03 对固件版本没有明确的要求,如果确定有固件问题请按照官方文档更新 SPL 和 U-Boot ,启动模式应拨至 1-bit QSPI Nor Flash。

提前下载镜像压缩包 openEuler-22.03-V2-xfce-visionfive2-preview.img.tar.zst 后用 dd 命令写入 SD 卡,注意目标设备一定不能写错,这里假设为 /dev/sda


wget https://mirror.iscas.ac.cn/openeuler-sig-riscv/openEuler-RISC-V/preview/openEuler-22.03-V2-riscv64/Visionfive2/openEuler-22.03-V2-xfce-visionfive2-preview.img.tar.zst
zstd -d openEuler-22.03-V2-xfce-visionfive2-preview.img.tar.zst
tar xvf openEuler-22.03-V2-xfce-visionfive2-preview.img.tar
sudo dd if=openEuler-22.03-V2-xfce-visionfive2-preview.img of=/dev/sda bs=1M status=progress
sudo sync

刷写成功后即可启动。如遇问题,请提问或查阅 Visionfive2 参考手册

1 个赞

安装 ROS 相关软件包

修改软件源

目前 ROS humble 在 openEuler risc-v 23.09 和 22.03 的软件源分别在:

LicheePi 4A 使用的镜像为 oERV 23.09 ,执行以下命令添加软件源:

bash -c 'cat << EOF > /etc/yum.repos.d/ROS.repo
[openEulerROS-humble]
name=openEulerROS-humble
baseurl=http://build-repo.tarsier-infra.com/openEuler:/ROS/23.09/
enabled=1
gpgcheck=0
EOF'

Visionfive 2 使用的镜像为 oERV 22.03 ,执行以下命令添加软件源:

bash -c 'cat << EOF > /etc/yum.repos.d/ROS.repo
[openEulerROS-humble]
name=openEulerROS-humble
baseurl=http://build-repo.tarsier-infra.com/home:/Z572:/ros/openEuler_22.03_22.03/
enabled=1
gpgcheck=0
EOF'

安装与配置

分别在两台设备中执行以下命令,安装本示例所需的软件包:


dnf install ros-humble-ros-base ros-humble-demo-nodes-cpp ros-humble-turtlesim

然后分别在两台设备中执行以下命令,引入 ROS 环境:


source /opt/ros/humble/setup.sh

1 个赞

双机通信

进行双机通信示例前,请确保两台设备在同一局域网下,或两个虚拟机调通网络,可以彼此 ping 通。

本示例 LicheePi 4A IP 地址为前者,Visionfive 2 IP 地址为后者。

双机 topic 通信

在一台设备或虚拟机执行 ros2 run demo_nodes_cpp talker ,在另一台设备或虚拟机执行 ros2 run demo_nodes_cpp listener

  • talker 节点通过 ROS 2 的发布者发布带有计数器的字符串消息到 chatter 主题。
  • listener 节点通过 ROS 2 的订阅者订阅 chatter 主题,并在接收到消息时执行回调函数,打印消息内容。

双机 service 通信

在一台设备或虚拟机执行 ros2 run demo_nodes_cpp add_two_ints_server ,在另一台设备或虚拟机执行 ros2 run demo_nodes_cpp add_two_ints_client

  • add_two_ints_server 节点通过 ROS 2 的服务提供加法服务,它会在收到请求时执行加法操作,并将结果发送回客户端。
  • add_two_ints_client 节点通过 ROS 2 的服务客户端向 add_two_ints_server 发送服务请求,等待并接收服务端的响应,最后打印出加法的结果。

turtlesim

turtlesim 提供了一个图形用户界面,显示了一个模拟的海龟机器人和其轨迹。这使得 ROS 的消息传递和服务调用更加直观和可视化。

在一台设备或虚拟机执行 ros2 run turtlesim turtlesim_node ,可见图形界面弹出。在另一台设备或虚拟机执行 ros2 run turtlesim turtle_teleop_key,通过键盘的上下左右可以控制小乌龟的运动。

rqt 改变画笔颜色

在运行 turtlesim 图形界面的设备或虚拟机上打开一个新终端,执行 ros2 run rqt_gui rqt_gui

通过 Pluguis > Services > Service Caller 添加界面

service 中选择 /turtle1/set_pen 并点击 Call,然后在另一台设备或虚拟机利用键盘在终端移动小海龟时,其走过的路径为黑色。