注:树莓派需要与microROS控制板ROS_DOMAIN_ID需要一致,可以查看【MicroROS控制板参数配置】来设置microROS控制板ROS_DOMAIN_ID,查看教程【连接MicroROS代理】判断ID是否一致。
小车连接上代理后,会发布雷达、imu等传感器数据,可以在配套的虚拟机/树莓派5中,运行命令去查询这些信息,也可以发布速度、蜂鸣器等传感器的控制数据。
成功启动树莓派之后,输入以下指令启动代理,
sh ~/start_agent_rpi5.sh
然后,打开小车开关,等待小车连接上代理,连接成功如下图所示,
打开另一个终端输入以下指令进入docker,
xxxxxxxxxx
sh ros2_humble.sh
出现以下界面就是进入docker成功,现在即可通过指令控制小车,
终端输入以下指令查询代理节点,
xxxxxxxxxx
ros2 node list
然后输入以下指令查询该节点发布/订阅了哪些话题,
xxxxxxxxxx
ros2 node info /YB_Car_Node
可以看出订阅的话题有,
/beep:蜂鸣器控制
/cmd_vel:小车速度控制
/servo_s1:s1舵机云台控制
/servo_s2:s1舵机云台控制
发布的话题有,
/imu:imu模块数据
/odom:里程计模块数据
/scan:雷达模块数据
我们也可以通过查询话题命令,终端输入,
xxxxxxxxxx
ros2 topic list
查询雷达数据,
xxxxxxxxxx
ros2 topic echo /scan
查询imu数据,
xxxxxxxxxx
ros2 topic echo /imu
查询odom数据,
xxxxxxxxxx
ros2 topic echo /odom_raw
首先查询以下蜂鸣器话题的相关信息,终端输入,
xxxxxxxxxx
ros2 topic info /beep
得知数据类型是std_msgs/msg/UInt16。然后输入以下指令打开蜂鸣器,终端输入,
xxxxxxxxxx
ros2 topic pub /beep std_msgs/msg/UInt16 "data: 1"
输入以下指令关闭蜂鸣器,终端输入,
xxxxxxxxxx
ros2 topic pub /beep std_msgs/msg/UInt16 "data: 0"
我们假设发布小车以线速度0.5的速度,角速度0.2运动,终端输入,
xxxxxxxxxx
ros2 topic pub /cmd_vel geometry_msgs/msg/Twist "{linear: {x: 0.5, y: 0.0, z: 0.0}, angular: {x: 0.0, y: 0.0, z: 0.2}}"
停车则输入,
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}}"
这里需要注意的是s1舵机的范围是[-90,90],s2舵机的范围是[-90,20],超过范围的值,舵机不转动。
我们假设控制s1舵机转动30度,则终端输入,
xxxxxxxxxx
ros2 topic pub /servo_s1 std_msgs/msg/Int32 "data: 30"
同理,控制s2舵机转动-30度则终端输入,
xxxxxxxxxx
ros2 topic pub /servo_s2 std_msgs/msg/Int32 "data: -30"