ROS控制

<<<<<<< HEAD

1.课程内容

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

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

2.准备工作

(1)内容说明

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

(2)启动代理

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

在车机终端输入命令:

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

image-20250613104101795

 

3.启动命令

=======

1、功能说明

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

2、程序启动

2.1、查看节点信息

293e7786cdb01b0dcb8cfd277838fbf7226314fe

成功连接到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发布右前雷达数据

<<<<<<< HEAD

3.1发布控制指令

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

3.1.1控制小车速度

=======

2.3、发布控制指令

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

2.3.1、控制小车速度

293e7786cdb01b0dcb8cfd277838fbf7226314fe

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

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

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

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

<<<<<<< HEAD

3.1.2控制小车蜂鸣器

=======

2.3.2、控制小车蜂鸣器

293e7786cdb01b0dcb8cfd277838fbf7226314fe

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

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

<<<<<<< HEAD

3.1.3控制小车灯带

=======

2.3.3、控制小车灯带

293e7786cdb01b0dcb8cfd277838fbf7226314fe

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

a的相关参数

a:101.0 流水灯

a:102.0 跑马灯

a:103.0 呼吸灯

a:104.0 渐变灯

a:105.0 星光点点

a:106.0 电池电量显示

<<<<<<< HEAD

3.1.4控制六个舵机

=======

2.3.4、控制六个舵机

293e7786cdb01b0dcb8cfd277838fbf7226314fe

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

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

<<<<<<< HEAD

3.1.5控制单个舵机

=======

2.3.5、控制单个舵机

293e7786cdb01b0dcb8cfd277838fbf7226314fe

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

<<<<<<< HEAD

3.2订阅小车数据

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

3.2.1订阅雷达数据

=======

2.3、订阅小车数据

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

2.3.1、订阅雷达数据

293e7786cdb01b0dcb8cfd277838fbf7226314fe

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

订阅的数据如下图所示,

image-20250612185123429

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

<<<<<<< HEAD

3.2.2订阅电池电量数据

=======

2.3.2、订阅电池电量数据

293e7786cdb01b0dcb8cfd277838fbf7226314fe

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

订阅的数据如下图所示,

image-20250612185726290

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

<<<<<<< HEAD

3.2.3订阅imu数据

=======

2.3.3、订阅imu数据

293e7786cdb01b0dcb8cfd277838fbf7226314fe

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

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

image-20250612190200979

<<<<<<< HEAD

3.2.4订阅里程计数据

=======

2.3.4、订阅里程计数据

293e7786cdb01b0dcb8cfd277838fbf7226314fe

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

<<<<<<< HEAD

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

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

293e7786cdb01b0dcb8cfd277838fbf7226314fe

image-20250612190531906