该功能实现了通过ros2 topic的工具去控制小车的速度、蜂鸣器、以及机械臂,同时也实现了读取底层的数据,比如雷达数据,imu数据,里程计数据等等。
本节课程以jetson orin NX为例。树莓派和Jetson-nano主板,需要在宿主机中打开终端,然后输入进入docker容器的指令,进入到docker容器后的终端里边输入本节课程提及的指令,宿主机进入docker容器的教程可以参考本产品教程【0.说明书和安装步骤】中的【进入小车Dockder(Jetson-Nano和树莓派5用户看这里)】的内容。orin、NX主板直接打开终端,输入本节课程提及的指令即可。
注意:测试所有案例必须都先启动docker代理,如果已经启动,则不需要重复启动
在车机终端输入命令:
sh start_agent.sh
终端打印如下信息,说明连接成功

该功能实现了通过ros2 topic的工具去控制小车的速度、蜂鸣器、以及机械臂,同时也实现了读取底层的数据,比如雷达数据,imu数据,里程计数据等等。
开机后,需要打开终端,输入以下指令连接agent代理,
xxxxxxxxxxsh start_agent.sh如下图所示,成功启动agent代理后,

如果启动失败,则需要检测接线是否松动,以及输入ls /dev.myserial是否有识别到串口/dev/myserial。
成功连接到agent代理后,可在终端输入ros2 node list通过以下指令查看有哪些节点。
这里分主板开启终端,Jetson-Nano和树莓派5的用户需要进去docker中去输入指令,启动docker的指令请参考本产品教程【0.说明书和安装步骤】中的【进入小车Dockder(Jetson-Nano和树莓派5用户看这里)】的内容;Orin主板的用户则直接打开终端输入指令即可。这里以树莓派5的运行界面为例,进入到docker中后,在docker的终端输入,
xxxxxxxxxxros2 node list运行截图如下,

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

这里整理了一个表格,说明了该节点发布以及订阅了哪些话题,以及每个话题的消息数据类型,表格如下,
订阅话题表格
| 订阅的话题 | 话题消息类型 | 话题属性 | 
|---|---|---|
| /arm6_joints | arm_msgs/msg/ArmJoints | 控制6个舵机 | 
| /arm_joint | arm_msgs/msg/ArmJoint | 控制单个舵机 | 
| /beep | std_msgs/msg/UInt16 | 控制蜂鸣器 | 
| /cmd_vel | geometry_msgs/msg/Twist | 控制小车速度 | 
| /rgb | std_msgs/msg/ColorRGBA | 控制等待 | 
发布话题表格
| 发布的话题 | 话题消息类型 | 话题属性 | 
|---|---|---|
| /battery | std_msgs/msg/Float32 | 发布电池电量数据 | 
| /imu/data_raw | sensor_msgs/msg/Imu | 发布imu数据 | 
| /odom_raw | nav_msgs/msg/Odometry | 发布里程计数据 | 
| /scan0 | sensor_msgs/msg/LaserScan | 发布左后雷达数据 | 
| /rgb | std_msgs/msg/ColorRGBA | 发布右前雷达数据 | 
根据订阅话题的表格,使用以下格式的指令ros2 topic pub 话题名字 话题消息数据类型 消息数据 --once 发布一帧控制数据。
根据订阅话题的表格,使用以下格式的指令ros2 topic pub 话题名字 话题消息数据类型 消息数据 --once 发布一帧控制数据。
建议首次测试,把小车架起来测试,让小车的车轮不着地测试,我们让小车以线速度0.1m/s的速度往前运行,终端输入以下指令,
xxxxxxxxxxros2 topic pub /cmd_vel geometry_msgs/msg/Twist "{linear: {x: 0.1, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.0}}" --once运行后,小车会往前以0.1m/s的速度往前运动,同理,如果要控制小车以1.0rad/s的角度运动的话,则给angualr的z赋值,指令如下,
xxxxxxxxxxros2 topic pub /cmd_vel geometry_msgs/msg/Twist "{linear: {x: 0.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 1.0}}" --once运行后,小车会自转,如果我们要停车,则发布线速度和角速度都为0即可,指令如下,
xxxxxxxxxxros2 topic pub /cmd_vel geometry_msgs/msg/Twist "{linear: {x: 0.0, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.0}}" --once这里的--once是表示只发送一帧消息数据,关于ros2 topic pub的其它参数,可参考本产品课程【15.ROS2基础课程】中的【19、ROS2常用命令工具】。
启动蜂鸣器,终端输入以下指令,
xxxxxxxxxxros2 topic pub /beep std_msgs/msg/UInt16 "data: 1" --once关闭蜂鸣器,终端输入以下指令,
xxxxxxxxxxros2 topic pub /beep std_msgs/msg/UInt16 "data: 0" --once发布红色,终端输入以下指令,
xxxxxxxxxxros2 topic pub /rgb std_msgs/msg/ColorRGBA "{r: 1.0, g: 0.0, b: 0.0, a: 1.0}" --once设置6个舵机的角度为90度,机械臂整体程序向上伸直的姿态,注意这里离机械臂远一点,以免被机械打到,终端输入以下指令,
xxxxxxxxxxros2 topic pub /arm6_joints arm_msgs/msg/ArmJoints {"joint1: 90, joint2: 90, joint3: 90, joint4: 90, joint5: 90, joint6: 90, time: 1500"} --once这里的time的值表示舵机运行的时候,单位是毫秒。
设置6号舵机(夹爪)的角度为150度,呈现夹取的状态,终端输入,
xxxxxxxxxxros2 topic pub /arm_joint arm_msgs/msg/ArmJoint "{id: 6,joint: 150,time: 2000}" --once根据发布的表格,使用以下格式的指令ros2 topic exho 话题名字 接收到小车节点发布的传感器数据。
根据发布的表格,使用以下格式的指令ros2 topic exho 话题名字 接收到小车节点发布的传感器数据。
本产品有两个雷达,左后方的雷达的话题名字为/scan0,右前方的雷达的话题名字为/scan1,一定要右前方雷达数据为例,终端输入以下指令,
xxxxxxxxxxros2 topic echo /scan1订阅的数据如下图所示,

更多关于雷达数据的内容,在本课程【6.激光雷达】中会有更加详细的说明。
本产品正常工作的电池电压理论上是高于9.6V低于12V,低于9.6V,蜂鸣器会嘀嘀嘀,提示电池电压过低,需要给电池进行充电,可在终端输入以下指令来查询电池电压,
xxxxxxxxxxros2 topic echo /battery订阅的数据如下图所示,

这里表示电池电压为11.8V。
控制板上有带一块9轴imu,能够反馈小车的姿态,终端输入以下指令能够获取imu数据,
xxxxxxxxxxros2 topic echo /imu/data_raw订阅的imu数据如下图所示,

本产品的四个电机配置了编码器,ros控制板会读取编码器的信息,然后发布计算后里程计数据,终端输入以下指令来读取里程计数据,
xxxxxxxxxxros2 topic echo /odom_raw订阅到里程计数据如下图所示:
