5.6.5 轮趣科技ROS差速小车适配
案例简介
本案例展示了 K1 开发板适配轮趣科技教育版ROS差速小车的完整流程。一个完整的 ROS 机器人系统通常由四个核心部分组成:运动底盘(执行)、ROS 主控(决策)、传感器(感知)以及电池(能源)。其中,电池集成在运动底盘上,通过电气线路为机器人各个模块供电,运动底盘、ROS 主控与传感器之间也依靠电气线路进行数据通信与协同工作。本案例详细演示了如何将 K1 开发板作为 ROS 主控,与轮趣教育版差速小车对接,并实现对小车的运动控制。
硬件清单
- SpaceMit K1 开发板一块
- 轮趣科技教育版 ROS 差速小车一辆
环境适配
K1 开发板
硬件信息
K1 开发板将 RISC-V 八核处理器、存储硬盘、通用接口部件和扩展接口布置在同一块电路板上,支持 UEFI 启动以及多种操作系统和应用的运行,是一款完整的计算机系统产品。在本示例中将演示如何将K1 开发板替换轮趣 ROS 小车的树莓派,作为小车的 ROS 主控。
供电:使用运动底盘(STM32)控制器的TypeC-TypeC电源接口直接供电(5V)或使用电池直接供电(12V)。
信号:K1 开发板与各传感器的信号连接全部通过USB接口进行,包括运动底盘、激光雷达、相机。
轮趣 ROS 小车中的各个传感器均与K1开发板连接,具体适配方法在下文各个传感器的小节中介绍。
运动底盘
硬件信息
轮趣教育版ROS差速小车的运动底盘为STM32的驱控一体控制板。
供电:起源于电池,主要通过T头线或其它分流线 输出到其它部件。
信号:起源于 K1 开发板,通过各种专用线材连接,最后控制电机与轮子转动。
适配方法
连接好运动底盘到K1开发板的供电线(typeC-typeC)后,启动运动底盘上的开关,等待K1-bainbu-desktop 系统启动。接着接入运动底盘到K1开发板的信号线(typeC-USB), K1 开发板打开一个新终端,输入以下命令:
sudo dmesg | tail -20
查看类似于以下的输出,确认运动底盘USB设备端口号/dev/ttyACM0
:
[ 1673.471036] usb 2-1.1: new full-speed USB device number 8 using xhci-hcd
[ 1673.675568] cdc_acm 2-1.1:1.0: ttyACM0: USB ACM device
根据自己实际的端口号,输入以下命令查看设备信息:
udevadm info -a -n /dev/ttyACM0
查看类似于以下的设备信息输出,确认设备的ATTRS{serial}
:
ATTRS{product}=="USB Single Serial"
ATTRS{serial}=="0002"
ATTRS{serial}=="xhci-hcd.0.auto"
输入以下命令重映射运动底盘的udev规则,固定USB串口设备命名:
echo 'SUBSYSTEM=="tty", ATTRS{serial}=="0002", MODE:="0777",SYMLINK+="wheeltec_controller"' | sudo tee /etc/udev/rules.d/wheeltec_controller.rules
输入以下命令重启udev服务:
sudo udevadm control --reload-rules
sudo udevadm trigger
测试运行
编译轮趣科技提供的运动底盘ros2功能包进行测试(注释掉turn_on_wheeltec_robot/package.xml里的
sudo apt update
sudo apt install ros-humble-turtlesim ros-humble-navigation2 ros-humble-joint-state-publisher ros-humble-robot-localization teleop_twist_keyboard
colcon build --packages-select serial turn_on_wheeltec_robot wheeltec_robot_msg wheeltec_robot_urdf
source install/setup.bash
ros2 launch turn_on_wheeltec_robot turn_on_wheeltec_robot.launch.py
打开另一个终端,启动键盘控制节点:
ros2 run teleop_twist_keyboard teleop_twist_keyboard
通过终端显示的键盘按键映射,可以实现键 盘控制小车运动。
激光雷达
硬件信息
轮趣教育版ROS差速小车使用的是镭神智能的激光雷达,型号为M10P。
供电&&信号:通过USB接口与K1开发板连接。
适配方法
连接好激光雷达到K1开发板的数据线(typeC-USB), K1 开发板打开一个新终端,输入以下命令:
sudo dmesg | tail -20
查看类似于以下的输出,确认激光雷达USB设备端口号/dev/ttyACM1
:
[ 4562.938371] usb 2-1.3: new full-speed USB device number 9 using xhci-hcd
[ 4563.146987] cdc_acm 2-1.3:1.0: ttyACM1: USB ACM device
根据自己实际的端口号,输入以下命令查看设备信息:
udevadm info -a -n /dev/ttyACM1
查看类似于以下的设备信息输出,确认设备的ATTRS{serial}
:
ATTRS{product}=="USB Single Serial"
ATTRS{serial}=="5A6D016420"
ATTRS{serial}=="xhci-hcd.0.auto"
输入以下命令重映射激光雷达的udev规则,固定USB串口设备命名:
echo 'SUBSYSTEM=="tty", ATTRS{serial}=="5A6D016420", MODE:="0777",SYMLINK+="wheeltec_lidar"' | sudo tee /etc/udev/rules.d/wheeltec_lidar.rules
输入以下命令重启udev服务:
sudo udevadm control --reload-rules
sudo udevadm trigger
测试运行
编译轮趣科技提供的激光雷达ros2功能包进行测试:
colcon build --packages-select wheeltec_lidar_ros2
source install/setup.bash
ros2 launch lslidar_driver lsm10p_uart_launch.py
在同网段的PC上可以通过rviz2观察激光雷达的实时数据。打开一个终端发布雷达静态坐标变换:
ros2 run tf2_ros static_transform_publisher 0 0 0 0 0 0 base_link laser
打开另一个终端:
ros2 run rviz2 rviz2
修改Fixed Frame 为laser,点击add -> by topic -> /scan ,点击ok。观察激光雷达数据如下所示:
相机
硬件信息
轮趣教育版ROS差速小车使用的是单目RGB相机,型号为C70。
供电&&信号:通过USB接口与K1开发板连接。
适配方法
连接好相机到K1开发板的USB接口数据线, K1 开发板打开一个新终端,输入以下命令:
v4l2-ctl --list-devices
查看类似于以下的输出,确认相机USB设备端口号/dev/video20
:
Integrated Webcam: Integrated W (usb-xhci-hcd.0.auto-1.4):
/dev/video20
/dev/video21
/dev/media1
测试运行
安装相机usb-cam包:
sudo apt install ros-humble-usb-cam
source /opt/ros/humble/setup.bash
ros2 run usb_cam usb_cam_node_exe --ros-args -p video_device:=/dev/video20
打开一个新终端,输入以下命令查看输出图像话题:
ros2 topic echo /image_raw
也可以在同网段的PC上输入以下命令,查看实时图像:
ros2 run rqt_image_view rqt_image_view