跳到主要内容

RISC-V ROS 小车

亚博 RISC-V ROS 小车是一款基于 Meles 打造的多功能 ROS 小车,搭载激光雷达、云台相机、手柄等配件。采用 ROS2 进行开发,支持 SLAM 建图、自动路径规划与避障、手柄遥控、APP 遥控等功能,是您学习 Meles 和 ROS 的好帮手。

ROS_Car

概述

RISC-V ROS 小车由以下几部分组成:

  • 顶部的 TOF 激光雷达
  • 二自由度的摄像头云台
  • Milk-V Meles 开发板
  • MicroROS 控制板
  • 底盘 310 编码器减速电机
  • 7.4V 电池
  • 手柄等其他配件

ROS_Car

其中 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 键解锁底盘。

解锁底盘

解锁底盘后,按下 XYAB 按键来控制云台方向,前后拨动左侧摇杆控制前进/后退,左右拨动右侧摇杆控制小车左转/右转。

运动控制

提示

若您不能使用手柄控制小车,请您参考MicroROS 控制板固件烧录章节烧录烧录并配置 MicroROS 控制板。

在 ROS 小车上使用 VNC

在多数情况下,您可能不方便将 ROS 小车连接到显示器,这时可以使用 VNC 远程连接机器人桌面,来避免使用物理外设带来的麻烦。

首先,您需要使用 SSH 或连接显示器和键鼠来打开一个终端用来执行命令。

提示

ROS 小车使用的 VNC 为 tigervnc ,默认安装在系统中。若您在后续步骤中发现您的系统中没有安装,则需要您执行 sudo yum install tigervnc-server 来进行安装。

执行下面的命令为 VNC 设置连接密码,连续输入两次密码确认,输入 n 禁用 view-only 模式。

vncpasswd

setpass

然后添加用户和编号,执行下面的命令,并在文件中修改 :2=openeuler ,如下图所示。当您编辑完文档,按下 ctrl + O 来保存,按下 ctrl + X 来退出编辑.

sudo nano /etc/tigervnc/vncserver.users

setuser

接下来为 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

正常情况下,终端输出如下图所示。

status

启动成功后,您可以使用任意的 VNC 客户端连接机器人。

提示

Tigervnc 的默认服务端口为 5902,ROS 小车的默认 IP 地址为 10.42.0.1

在连接 VNC 时请您使用正确的 IP 地址和端口号进行连接。

关闭自启动脚本

机器人开机默认启动连接代理、手柄控制和建图任务,若您想手动运行其他任务,可能需要关闭这些软件的自启动,防止程序之间的冲突。

使用桌面环境关闭

若您使用键鼠和显示器,或者 VNC 来操作 ROS 小车,您可以直接使用桌面环境来关闭自启动脚本。

在桌面左上角找到 Application-Settings-Sessions and Startup

Startup

在打开的页面里找到 Application Autostart 选项卡,其中的 myprogram 是 ROS 相关的启动项,取消勾选其前面的复选框来取消自启动。

CancelAutoStart

使用命令关闭

若您使用 SSH 操作 ROS 小车,或者您不方便进入桌面环境,您可以使用命令的方式关闭自启动脚本。

首先执行下面的命令,进入存放自启动项的目录,并列举其中的文件。

cd .config/autostart/
ls

在正常情况下,您能看到如下三个文件。

CancelAutoStart

handle.desktop 为例,若您需要禁用该启动项,您需要执行

sudo nano ./handle.desktop

然后在文件的第5,6行开始处添加注释,然后按下 ctrl + O 键保存,ctrl + X 键退出。

changeconf

手柄和键盘控制

如果您需要手动打开手柄或键盘控制,首先您需要打开代理程序并连接代理,执行下面的命令

sh ~/start_agent.sh

agentnode

提示

若您启动代理以后,程序一直卡在前两行的位置,请您按下 MicroROS 控制板上的复位按键,以连接代理。

手柄控制

打开两个终端执行下面的命令。

终端1:

ros2 run joy joy_node

终端2:

ros2 run yahboomcar_ctrl yahboom_joy

在上面的代码成功运行后,先按下 R1 键解锁底盘。

解锁底盘

解锁底盘后,按下 XYAB 按键来控制云台方向,前后拨动左侧摇杆控制前进/后退,左右拨动右侧摇杆控制小车左转/右转,按下 Start 键控制蜂鸣器蜂鸣声。

运动控制

键盘控制

打开一个终端,执行下面的命令,以使用键盘控制。

ros2 run yahboomcar_ctrl yahboom_keyboard

键盘控制

在键盘控制的节点打开以后,使用 uiojklm,. 按键来控制小车底盘的前后、转弯运动。

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

agentnode

提示

若您启动代理以后,程序一直卡在前两行的位置,请您按下 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

建图

接下来使用键盘控制小车缓慢走完需要建图的路径。

在键盘控制的节点打开以后,使用 uiojklm,. 按键来控制小车底盘的前后、转弯运动。

建图完成后,您需要执行下面的命令来保存地图,保存成功后,地图将被保存在 /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

agentnode

提示

若您启动代理以后,程序一直卡在前两行的位置,请您按下 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 号。

bashrc

再执行 nano ~/config_robot.py ,编辑文件末尾位置的内容,将 robot.set_ros_domain_id() 设置成 .bashrc 中的 DOMAIN_ID 号,按 ctrl+O 保存,按 ctrl+X 退出。

configpy

最后执行 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

ROS2 常用命令:https://www.oerv.wiki/robot/common_command.html

多机通信实例:https://www.oerv.wiki/robot/bestofpractice/01.html

  • Rjgawuie