Taro
(Taro)
1
最近在做 ROS humble 在 openEuler risc-v 23.09 上的移植工作,现在来分享一下在 risc-v 开发板上的双机通信的 demo。
准备工作
完成本示例需要 openEuler risc-v 23.09 或 22.03 支持的硬件以及对应的镜像,或 qemu 镜像。
相关内容可见:
以下为本示例选取的一种环境,您可以根据上述系统版本支持的硬件选取合适的环境,或选取支持的 qemu 镜像。
环境信息
硬件信息
本示例使用到的硬件为:
- LicheePi 4A 处理器 TH1520 内存 16GB
- Visionfive 2 处理器 JH7110 内存 4GB
若选取 qemu 镜像来完成本示例,请参考 双机通信 来调通两台虚拟机的网络。
软件信息
本示例中 LicheePi 4A 刷写的镜像为 openEuler-23.09,Visionfive 2 刷写的镜像为 openEuler-22.03
LicheePi 4A
-
OS 版本:openEuler-23.09-V1-xfce-lpi4a
-
镜像地址:https://mirror.iscas.ac.cn/openeuler-sig-riscv/openEuler-RISC-V/devel/20231123/v0.1/lpi4a_thead/
-
软件源:https://mirror.iscas.ac.cn/openeuler-sig-riscv/openEuler-RISC-V/preview/openEuler-23.09-V1-riscv64/repo/
Visionfive 2
-
OS 版本:openEuler-22.03-V2-xfce-visionfive2-preview
-
镜像地址: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
-
软件源:https://mirror.iscas.ac.cn/openeuler-sig-riscv/openEuler-RISC-V/preview/openEuler-22.03-V2-riscv64/repo
若选取 qemu 镜像来完成本示例,选取支持的系统镜像即可。
2 个赞
Taro
(Taro)
2
刷写镜像并启动
LicheePi 4A
参考官方烧录镜像教程,获取 fastboot 烧录工具,进入烧录模式。
u-boot-with-spl-lpi4a.bin
和 u-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 个赞
Taro
(Taro)
3
安装 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 个赞
Taro
(Taro)
4
双机通信
进行双机通信示例前,请确保两台设备在同一局域网下,或两个虚拟机调通网络,可以彼此 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,然后在另一台设备或虚拟机利用键盘在终端移动小海龟时,其走过的路径为黑色。