ROS控制

1.课程内容

  1. 学习机器人通过ROS控制的基本方法

该功能实现了通过ros2 topic的工具去控制小车的速度、蜂鸣器、以及机械臂,同时也实现了读取底层的数据,比如雷达数据,imu数据,里程计数据等等。

2.准备工作

2.1内容说明

本节课程以jetson orin NX为例。树莓派和Jetson-nano主板,需要在宿主机中打开终端,然后输入进入docker容器的指令,进入到docker容器后的终端里边输入本节课程提及的指令,宿主机进入docker容器的教程可以参考本产品教程【0.说明书和安装步骤】中的【进入小车Dockder(Jetson-Nano和树莓派5用户看这里)】的内容。orin、NX主板直接打开终端,输入本节课程提及的指令即可。

2.2启动代理

注意:测试所有案例必须都先启动docker代理,如果已经启动,则不需要重复启动

在车机终端输入命令:

终端打印如下信息,说明连接成功

image-20250613104101795

3.启动命令

3.1功能说明

该功能实现了通过ros2 topic的工具去控制小车的速度、蜂鸣器、以及机械臂,同时也实现了读取底层的数据,比如雷达数据,imu数据,里程计数据等等。

3.2程序启动

3.2.1连接agent代理

开机后,需要打开终端,输入以下指令连接agent代理,

如下图所示,成功启动agent代理后,

image-20250612171011374

如果启动失败,则需要检测接线是否松动,以及输入ls /dev.myserial是否有识别到串口/dev/myserial。

3.2.2查看节点信息

成功连接到agent代理后,可在终端输入ros2 node list通过以下指令查看有哪些节点。

这里分主板开启终端,Jetson-Nano和树莓派5的用户需要进去docker中去输入指令,启动docker的指令请参考本产品教程【0.说明书和安装步骤】中的【进入小车Dockder(Jetson-Nano和树莓派5用户看这里)】的内容;Orin主板的用户则直接打开终端输入指令即可。这里以树莓派5的运行界面为例,进入到docker中后,在docker的终端输入,

运行截图如下,

image-20250612173550581

这里有个/YB_Node,说明底层控制的节点已经启动了,输入以下指令查询这个节点的相关信息,同样是在终端输入,

运行截图如下,

image-20250612173613881

这里整理了一个表格,说明了该节点发布以及订阅了哪些话题,以及每个话题的消息数据类型,表格如下,

订阅话题表格

订阅的话题话题消息类型话题属性
/arm6_jointsarm_msgs/msg/ArmJoints控制6个舵机
/arm_jointarm_msgs/msg/ArmJoint控制单个舵机
/beepstd_msgs/msg/UInt16控制蜂鸣器
/cmd_velgeometry_msgs/msg/Twist控制小车速度
/rgbstd_msgs/msg/ColorRGBA控制等待

发布话题表格

发布的话题话题消息类型话题属性
/batterystd_msgs/msg/Float32发布电池电量数据
/imu/data_rawsensor_msgs/msg/Imu发布imu数据
/odom_rawnav_msgs/msg/Odometry发布里程计数据
/scan0sensor_msgs/msg/LaserScan发布左后雷达数据
/rgbstd_msgs/msg/ColorRGBA发布右前雷达数据

3.3发布控制指令

根据订阅话题的表格,使用以下格式的指令ros2 topic pub 话题名字 话题消息数据类型 消息数据 --once 发布一帧控制数据。

3.3.1控制小车速度

根据订阅话题的表格,使用以下格式的指令ros2 topic pub 话题名字 话题消息数据类型 消息数据 --once 发布一帧控制数据。

建议首次测试,把小车架起来测试,让小车的车轮不着地测试,我们让小车以线速度0.1m/s的速度往前运行,终端输入以下指令,

运行后,小车会往前以0.1m/s的速度往前运动,同理,如果要控制小车以1.0rad/s的角度运动的话,则给angualr的z赋值,指令如下,

运行后,小车会自转,如果我们要停车,则发布线速度和角速度都为0即可,指令如下,

这里的--once是表示只发送一帧消息数据,关于ros2 topic pub的其它参数,可参考本产品课程【15.ROS2基础课程】中的【19、ROS2常用命令工具】。

3.3.2 控制小车蜂鸣器

启动蜂鸣器,终端输入以下指令,

关闭蜂鸣器,终端输入以下指令,

3.3.3 控制小车灯带

发布红色,终端输入以下指令,

3.3.4 控制六个舵机

设置6个舵机的角度为90度,机械臂整体程序向上伸直的姿态,注意这里离机械臂远一点,以免被机械打到,终端输入以下指令,

这里的time的值表示舵机运行的时候,单位是毫秒。

3.3.5 控制单个舵机

设置6号舵机(夹爪)的角度为150度,呈现夹取的状态,终端输入,

3.4 订阅小车数据

根据发布的表格,使用以下格式的指令ros2 topic exho 话题名字 接收到小车节点发布的传感器数据。

3.4.1 订阅雷达数据

根据发布的表格,使用以下格式的指令ros2 topic exho 话题名字 接收到小车节点发布的传感器数据。

本产品有两个雷达,左后方的雷达的话题名字为/scan0,右前方的雷达的话题名字为/scan1,一定要右前方雷达数据为例,终端输入以下指令,

订阅的数据如下图所示,

image-20250612185123429

更多关于雷达数据的内容,在本课程【6.激光雷达】中会有更加详细的说明。

3.4.2 订阅电池电量数据

本产品正常工作的电池电压理论上是高于9.6V低于12V,低于9.6V,蜂鸣器会嘀嘀嘀,提示电池电压过低,需要给电池进行充电,可在终端输入以下指令来查询电池电压,

订阅的数据如下图所示,

image-20250612185726290

这里表示电池电压为11.8V。

3.4.3 订阅imu数据

控制板上有带一块9轴imu,能够反馈小车的姿态,终端输入以下指令能够获取imu数据,

订阅的imu数据如下图所示,

image-20250612190200979

3.4.4 订阅里程计数据

本产品的四个电机配置了编码器,ros控制板会读取编码器的信息,然后发布计算后里程计数据,终端输入以下指令来读取里程计数据,

订阅到里程计数据如下图所示:

image-20250612190531906