<<<<<<< HEAD
该功能实现了通过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数据,里程计数据等等。
293e7786cdb01b0dcb8cfd277838fbf7226314fe
成功连接到agent代理后,可在终端输入ros2 node list
通过以下指令查看有哪些节点。
这里分主板开启终端,Jetson-Nano和树莓派5的用户需要进去docker中去输入指令,启动docker的指令请参考本产品教程【0.说明书和安装步骤】中的【进入小车Dockder(Jetson-Nano和树莓派5用户看这里)】的内容;Orin主板的用户则直接打开终端输入指令即可。这里以树莓派5的运行界面为例,进入到docker中后,在docker的终端输入,
xxxxxxxxxx
ros2 node list
运行截图如下,
这里有个/YB_Node,说明底层控制的节点已经启动了,输入以下指令查询这个节点的相关信息,同样是在终端输入,
xxxxxxxxxx
ros2 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 | 发布右前雷达数据 |
<<<<<<< HEAD
根据订阅话题的表格,使用以下格式的指令ros2 topic pub 话题名字 话题消息数据类型 消息数据 --once
发布一帧控制数据。
=======
根据订阅话题的表格,使用以下格式的指令ros2 topic pub 话题名字 话题消息数据类型 消息数据 --once
发布一帧控制数据。
293e7786cdb01b0dcb8cfd277838fbf7226314fe
建议首次测试,把小车架起来测试,让小车的车轮不着地测试,我们让小车以线速度0.1m/s的速度往前运行,终端输入以下指令,
xxxxxxxxxx
ros2 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赋值,指令如下,
xxxxxxxxxx
ros2 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即可,指令如下,
xxxxxxxxxx
ros2 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常用命令工具】。
<<<<<<< HEAD
=======
293e7786cdb01b0dcb8cfd277838fbf7226314fe
启动蜂鸣器,终端输入以下指令,
xxxxxxxxxx
ros2 topic pub /beep std_msgs/msg/UInt16 "data: 1" --once
关闭蜂鸣器,终端输入以下指令,
xxxxxxxxxx
ros2 topic pub /beep std_msgs/msg/UInt16 "data: 0" --once
<<<<<<< HEAD
=======
293e7786cdb01b0dcb8cfd277838fbf7226314fe
发布红色,终端输入以下指令,
xxxxxxxxxx
ros2 topic pub /rgb std_msgs/msg/ColorRGBA "{r: 1.0, g: 0.0, b: 0.0, a: 1.0}" --once
a的相关参数
a:101.0 流水灯
a:102.0 跑马灯
a:103.0 呼吸灯
a:104.0 渐变灯
a:105.0 星光点点
a:106.0 电池电量显示
<<<<<<< HEAD
=======
293e7786cdb01b0dcb8cfd277838fbf7226314fe
设置6个舵机的角度为90度,机械臂整体程序向上伸直的姿态,注意这里离机械臂远一点,以免被机械打到,终端输入以下指令,
xxxxxxxxxx
ros2 topic pub /arm6_joints arm_msgs/msg/ArmJoints {"joint1: 90, joint2: 90, joint3: 90, joint4: 90, joint5: 90, joint6: 90, time: 1500"} --once
这里的time的值表示舵机运行的时候,单位是毫秒。
<<<<<<< HEAD
=======
293e7786cdb01b0dcb8cfd277838fbf7226314fe
设置6号舵机(夹爪)的角度为150度,呈现夹取的状态,终端输入,
xxxxxxxxxx
ros2 topic pub /arm_joint arm_msgs/msg/ArmJoint "{id: 6,joint: 150,time: 2000}" --once
<<<<<<< HEAD
根据发布的表格,使用以下格式的指令ros2 topic exho 话题名字
接收到小车节点发布的传感器数据。
=======
根据发布的表格,使用以下格式的指令ros2 topic exho 话题名字
接收到小车节点发布的传感器数据。
293e7786cdb01b0dcb8cfd277838fbf7226314fe
本产品有两个雷达,左后方的雷达的话题名字为/scan0,右前方的雷达的话题名字为/scan1,一定要右前方雷达数据为例,终端输入以下指令,
xxxxxxxxxx
ros2 topic echo /scan1
订阅的数据如下图所示,
更多关于雷达数据的内容,在本课程【6.激光雷达】中会有更加详细的说明。
<<<<<<< HEAD
=======
293e7786cdb01b0dcb8cfd277838fbf7226314fe
本产品正常工作的电池电压理论上是高于9.6V低于12V,低于9.6V,蜂鸣器会嘀嘀嘀,提示电池电压过低,需要给电池进行充电,可在终端输入以下指令来查询电池电压,
xxxxxxxxxx
ros2 topic echo /battery
订阅的数据如下图所示,
这里表示电池电压为11.8V。
<<<<<<< HEAD
=======
293e7786cdb01b0dcb8cfd277838fbf7226314fe
控制板上有带一块9轴imu,能够反馈小车的姿态,终端输入以下指令能够获取imu数据,
xxxxxxxxxx
ros2 topic echo /imu/data_raw
订阅的imu数据如下图所示,
<<<<<<< HEAD
=======
293e7786cdb01b0dcb8cfd277838fbf7226314fe
本产品的四个电机配置了编码器,ros控制板会读取编码器的信息,然后发布计算后里程计数据,终端输入以下指令来读取里程计数据,
xxxxxxxxxx
ros2 topic echo /odom_raw
<<<<<<< HEAD
订阅到里程计数据如下图所示,
293e7786cdb01b0dcb8cfd277838fbf7226314fe