RISC-V ROS 小车
亚博 RISC-V ROS 小车是一款基于 Meles 打造的多功能 ROS 小车,搭载激光雷达、云台相机、手柄等配件。采用 ROS2 进行开发,支持 SLAM 建图、自动路径规划与避障、手柄遥控、APP 遥控等功能,是您学习 Meles 和 ROS 的好帮手。
概述
RISC-V ROS 小车由以下几部分组成:
- 顶部的 TOF 激光雷达
- 二自由度的摄像头云台
- Milk-V Meles 开发板
- MicroROS 控制板
- 底盘 310 编码器减速电机
- 7.4V 电池
- 手柄等其他配件
其中 Meles 运行带有 ROS2 的 openEuler 系统,通过串口连接 MicroROS 控制板,通过在 ROS 中订阅话题来传递雷达、电池、加速度计等传感器和控制数据。您可以在 OERV 找到关于 openEuler 和 ROS 的更多信息。MicroROS 控制板相关资料您可以查询资料汇总。
小车上搭载的激光雷达型号为 奥比中光 MS200 ,采样频率每秒 4500 次,扫描频率 7~15Hz,更多资料您可以查询用户手册。
开始使用
机器人组装
机器人的组装请参考组装视频和组装步骤。
开机前须知
在机器人运行过程中,您可能需要时刻观察状态,来确保机器人运行正常。在 MicroROS 控制板上,存在一个蓝色 LED ,该 LED 指示控制板的运行状态和电池电量,下面几条是指示灯状态的介绍:
- 指示灯每三秒快闪两下,代表连接正常
- 指示灯每秒闪一次(慢闪),代表控制板在配置模式下
- 指示灯每三秒快闪三次,代表控制板当前在测试模式下
- 指示灯每100毫秒闪一次(快闪),蜂鸣器有蜂鸣声,代表电池电压低,这时需要为机器人充电
更多关于 MicroROS 控制板的信息请查询资料汇总。
在后面的一些操作步骤里,您可能需要在 Meles 里输入用户名和密码,下面是默认的用户名和密码。
- 用户名:openeuler
- 密码:123456
另外,小车在启动后会自动建立一个无线 AP ,以方便您连接。
- WiFi 名称:MicroROS_AP
- 密码:12345678
首次启动机器人
拨动 MicroROS 控制板上的开关为 ROS 小车上电,上电后请等待 Meles 开机,时间大约为 2-3 分钟。
如果您的开发板上插有 HDMI 显示器,您会在屏幕上看到以下三个自动启动的终端。
这三个终端分别运行连接代理、手柄控制、建图任务,将在后面的文章中为您介绍这些程序的使用。
这时打开手柄,先按下 R1 键解锁底盘。
解锁底盘后,按下 X
、Y
、A
、B
按键来控制云台方向,前后拨动左侧摇杆控制前进/后退,左右拨动右侧摇杆控制小车左转/右转。
若您不能使用手柄控制小车,请您参考MicroROS 控制板固件烧录章节烧录烧录并配置 MicroROS 控制板。
在 ROS 小车上使用 VNC
在多数情况下,您可能不方便将 ROS 小车连接到显示器,这时可以使用 VNC 远程连接机器人桌面,来避免使用物理外设带来的麻烦。
首先,您需要使用 SSH 或连接显示器和键鼠来打开一个终端用来执行命令。
ROS 小车使用的 VNC 为 tigervnc
,默认安装在系统中。若您在后续步骤中发现您的系统中没有安装,则需要您执行 sudo yum install tigervnc-server
来进行安装。
执行下面的命令为 VNC 设置连接密码,连续输入两次密码确认,输入 n 禁用 view-only 模式。
vncpasswd
然后添加用户和编号,执行下面的命令,并在文件中修改 :2=openeuler
,如下图所示。当您编辑完文档,按下 ctrl
+ O
来保存,按下 ctrl
+ X
来退出编辑.
sudo nano /etc/tigervnc/vncserver.users
接下来为 VNC 添加服务,执行下面的命令,在执行过程中可能需要您输入数次密码。
# 拷贝服务文件
sudo cp /usr/lib/systemd/system/[email protected] /etc/systemd/system/vncserver@:2.service
# 重新加载systemd
systemctl daemon-reload
# 设置开机自启并启动服务
systemctl enable vncserver@:2.service
systemctl start vncserver@:2.service
最后执行下面的命令验证 VNC 是否启动成功。
systemctl status vncserver@:2.service
正常情况下,终端输出如下图所示。
启动成功后,您可以使用任意的 VNC 客户端连接机器人。
Tigervnc 的默认服务端口为 5902
,ROS 小车的默认 IP 地址为 10.42.0.1
。
在连接 VNC 时请您使用正确的 IP 地址和端口号进行连接。
关闭自启动脚本
机器人开机默认启动连接代理、手柄控制和建图任务,若您想手动运行其他任务,可能需要关闭这些软件的自启动,防止程序之间的冲突。
使用桌面环境关闭
若您使用键鼠和显示器,或者 VNC 来操作 ROS 小车,您可以直接使用桌面环境来关闭自启动脚本。
在桌面左上角找到 Application
-Settings
-Sessions and Startup
。
在打开的页面里找到 Application Autostart
选项卡,其中的 myprogram
是 ROS 相关的启动项,取消勾选其前面的复选框来取消自启动。
使用命令关闭
若您使用 SSH 操作 ROS 小车,或者您不方便进入桌面环境,您可以使用命令的方式关闭自启动脚本。
首先执行下面的命令,进入存放自启动项的目录,并列举其中的文件。
cd .config/autostart/
ls
在正常情况下,您能看到如下三个文件。
以 handle.desktop
为例,若您需要禁用该启动项,您需要执行
sudo nano ./handle.desktop
然后在文件的第5,6行开始处添加注释, 然后按下 ctrl
+ O
键保存,ctrl
+ X
键退出。
手柄和键盘控制
如果您需要手动打开手柄或键盘控制,首先您需要打开代理程序并连接代理,执行下面的命令
sh ~/start_agent.sh
若您启动代理以后,程序一直卡在前两行的位置,请您按下 MicroROS 控制板上的复位按键,以连接代理。
手柄控制
打开两个终端执行下面的命令。
终端1:
ros2 run joy joy_node
终端2:
ros2 run yahboomcar_ctrl yahboom_joy
在上面的代码成功运行后,先按下 R1 键解锁底盘。
解锁底盘后,按下 X
、Y
、A
、B
按键来控制云台方向,前后拨动左侧摇杆控制前进/后退,左右拨动右侧摇杆控制小车左转/右转,按下 Start 键控制蜂鸣器蜂鸣声。
键盘控制
打开一个终端,执行下面的命令,以使用键盘控制。
ros2 run yahboomcar_ctrl yahboom_keyboard
在键盘控制的节点打开以后,使用 u
、i
、o
、j
、k
、l
、m
、,
、.
按键来控制小车底盘的前后、转弯运动。
APP 控制
请首先从 APP 下载地址下载 apk 文件,目前仅支持安卓手机使用。
若您关闭了系统自启动的三个程序,那么您需要在 Meles 中开启三个终端分别执行下面的三条命令来启动 建图和代理程序。
sh ~/start_agent.sh
ros2 launch yahboomcar_bringup yahboomcar_bringup_launch.py
ros2 launch yahboomcar_nav map_gmapping_app_launch.xml
若您在执行完第一行指令 sh ~/start_agent.sh
后,终端只有 3-4 行日志输出,请按一下 MicroROS 控制板上的复位按键。
APP 下载安装完成后,请首先连接小车 WiFi ,并关闭手机的移动网络连接。
- WiFi 名称:MicroROS_AP
- 密码:12345678
连接完成后打开 APP ,在 IP 地址栏中输入地址 10.42.0.1
,并点击右下角的连接
按钮。
连接成功后,您会在主界面上看到雷达点云数据和控制摇杆等。
SLAM 建图
首先打开一个终端,执行下面的命令,打开代理程序。
sh ~/start_agent.sh
若您启动代理以后,程序一直卡在前两行的位置,请您按下 MicroROS 控制板上的复位按键。
然后执行下面的命令启动处理底层数据的程序。
ros2 launch yahboomcar_bringup yahboomcar_bringup_launch.py
接下来启动 rviz 可视化建图、建图节点以及键盘控制的节点。
# 启动 rviz
ros2 launch yahboomcar_nav display_launch.py
# 启动建图节点
ros2 launch yahboomcar_nav map_gmapping_launch.py
# 启动键盘控制
ros2 run yahboomcar_ctrl yahboom_keyboard
接下来使用键盘控制小车缓慢走完需要建图的路径。
在键盘控制的节点打开以后,使用 u
、i
、o
、j
、k
、l
、m
、,
、.
按键来控制小车底盘的前后、转弯运动。
建图完成后,您需要执行下面的命令来保存地图,保存成功后,地图将被保存在 /home/openeuler/slam_ws/src/yahboomcar_nav/maps/yahboom_map.pgm
和 /home/openeuler/slam_ws/src/yahboomcar_nav/maps/yahboom_map.yaml
。
ros2 launch yahboomcar_nav save_map_launch.py
导航和避障
在开始导航和避障之前,请您先按照 SLAM 建图的步骤建图并保存地图。
首先您需要打开代理程序。
sh ~/start_agent.sh
若您启动代理以后,程序一直卡在前两行的位置,请您按下 MicroROS 控制板上的复位按键。
接下来启动处理底层数据的程序。
ros2 launch yahboomcar_bringup yahboomcar_bringup_launch.py
运行下面的命令来启动 rviz 和加载地图。
# 启动 rviz
ros2 launch yahboomcar_nav display_launch.py
# 加载地图
LD_PRELOAD=/opt/ros/humble/lib/liblayers.so ros2 launch yahboomcar_nav navigation_dwb_launch.py
接下来您需要选中 rviz 界面上的 2D Pose Estimate
选项,并在地图中拖动,以确定机器人的初始位置和方向。
其中地图中玫红色线段代表当前机器人扫描到的地图边界,黑色部分代表已经建好的地图,用 2D Pose Estimate
选项使他们大致重合。
接下来就可以在地图中选点进行导航了,使用 2D Goal Pose
选项在地图中拖动来确定机器人要移动到的位置和方向。
随后机器人会开始规划路径并前往目标位置。
MicroROS 控制板固件烧录
获取烧录工具和固件
我们需要用到其中的 microROS_Robot_xxxx.bin
固件,flash_download_tool_3.9.5_0.zip
压缩包中的烧录工具。
另外,在烧录工具压缩包中,附有 CP2102 串口芯片的驱动,若您的 PC 上缺少该芯片的驱动,请您运行 CP2102-Windows驱动文件.zip
压缩包中的 CP210xVCPInstaller_xxx.exe
来安装驱动。
开始烧录
首先用 Type C 数据线将 MicroROS 串口接口和 PC 连接,串口接口位置如下图所示。
再执行下面三个步骤让 MicroRO 控制板进入下载模式。
- 按住 BOOT 按键
- 按一下 RST 按键
- 松开 BOOT 按键
解压 flash_download_tool_3.9.5_0.zip
中的所有文件,并运行 flash_download_tool_3.9.5.exe
。
在弹出的页面中,选择芯片型号为 ESP32-S3 ,并点击 OK 。
然后在 1 位置处选择您要烧录的固件 microROS_Robot_xxxx.bin
,后面的烧录位置填 0 。在 2 位置处选择 MicroROS 控制板对应的串口,最后点击 3 开始烧录。
烧录成功后显示 Finish 。
这时将数据线插回 Meles ,烧录完成。
配置控制板
在烧录完成后,需要对控制板的参数进行配置,以保证控制板和 Meles 之间通信正常。
首先执行 cat ~/.bashrc
,确认其中的 DOMAIN_ID 号。
再执行 nano ~/config_robot.py
,编辑文件末尾位置的内容,将 robot.set_ros_domain_id()
设置成 .bashrc
中的 DOMAIN_ID 号,按 ctrl
+O
保存,按 ctrl
+X
退出。
最后执行 python ~/config_robot.py
来配置控制板。
安装镜像到 Meles
首先,您需要到亚博官网下的“资料汇总下载”板块获取镜像文件。
解压文件夹“5、出厂镜像”中的压缩包到任意位置,使用安装镜像到 MicroSD 卡中的方法刷写镜像。
若刷写后系统不能启动,请您尝试将烧录软件更换为 Win32DiskImager
。
附录
ROS2 相关资料
ROS 入门:https://www.oerv.wiki/robot/quick_start.html
在 OpenEuler 上安装 ROS2 :https://www.oerv.wiki/robot/how_to_install.html
ROS2 编译环境安装:https://www.oerv.wiki/robot/compiler_and_service.html