UGV Rover PI ROS2 10. 指令交互
| ||||||||||||||||||||||
|
10. 指令交互
本章教程主要介绍如何使用指令控制机器人进行基础移动和让机器人运动到导航点。在该教程开始之前,默认您已根据第一章 UGV Rover PI ROS2 1. 准备工作里的内容已结束主程序且远程连接上 Docker 容器。
首先,在容器中启动机器人行为控制接口,保持这个指令的运行:
ros2 run ugv_tools behavior_ctrl
10.1 基础控制
在进行基础控制之前,先要确保机器人是放置在地面上的,机器人需要根据里程计判断机器人所行驶的距离是否完成目标。
接着打开一个新的 Docker 容器终端,点击左边侧栏中的“⭐”符号,双击打开 Docker 的远程终端,输入用户名:root,密码:ws。
在容器中,进入该产品 ROS 2 项目的工作空间:
cd /home/ws/ugv_ws
启动小车驱动节点,保持这个指令的运行:
ros2 launch ugv_bringup bringup_lidar.launch.py use_rviz:=true
此时,机器人云台会转至中位,摄像头面向前方,可以查看到该产品 Rviz2 模型界面,手动旋转小车可以看见模型中也会跟着一起旋转。
10.1.1 前进
接着在一个新的 Docker 容器中,发送小车前进的动作目标,“data”为小车前进的距离,单位为米:
ros2 action send_goal /behavior ugv_interface/action/Behavior "{command: '[{\"T\": 1, \"type\": \"drive_on_heading\", \"data\": 0.5}]'}"
此时小车会前进指令中 data 所设定的距离,可以查看到该产品 Rviz2 模型界面中的模型也会跟着一起前进。
10.1.2 后退
发送小车后退的动作目标,“data”为小车前进的距离,单位为米:
ros2 action send_goal /behavior ugv_interface/action/Behavior "{command: '[{\"T\": 1, \"type\": \"back_up\", \"data\": 0.5}]'}"
此时小车会后退设定的距离,可以查看到该产品 Rviz2 模型界面中的模型也会跟着一起前进。
10.1.3 旋转
发送小车旋转的动作目标("data" 单位 度 正数左转 负数右转 ):
ros2 action send_goal /behavior ugv_interface/action/Behavior "{command: '[{\"T\": 1, \"type\": \"spin\", \"data\": -50}]'}"
此时小车会旋转设定的角度,可以查看到该产品 Rviz2 模型界面中的模型也会跟着一起旋转。
10.1.3 停止
发送小车停止的动作目标:
ros2 action send_goal /behavior ugv_interface/action/Behavior "{command: '[{\"T\": 1, \"type\": \"stop\", \"data\": 0}]'}"
此时小车会停止运动,可以查看到该产品 Rviz2 模型界面中的模型也会跟着停止运动。正常情况下,小车运动完所给定 data 参数的值也会停止运动。
10.2 获取当前点位置
在进行以下教程指令交互之前,需要先开启导航,开启导航前先确定您已经建了一个环境地图,若您没有跟着前面的教程操作下来,则先需要根据 UGV Rover PI ROS2 4. 基于激光雷达的二维建图或者 UGV Rover PI ROS2 5. 基于深度相机的三维建图任一教程进行建图。
建图完成后,将机器人放置所建地图实际中的位置,机器人需要根据里程计判断是否完成到目标位置的运动,在一个新的容器中运行启动导航的指令:
ros2 launch ugv_nav nav.launch.py use_rviz:=true
该指令中没有指定 use_localization ,默认使用的是基于 AMCL 算法的导航,详情可参考 UGV Rover PI ROS2 6. 自动导航部分的教程说明。
在使用指令控制机器人运动至导航点之前,可以先保存几个目标位置为导航点。先获取当前点位置信息:
ros2 topic echo /robot_pose --once
10.3 保存为导航点
将前面获取到的位置信息保存为导航点,下述指令中,data 为导航点名称,可设置为 a~g 之间的任一字母:
ros2 action send_goal /behavior ugv_interface/action/Behavior "{command: '[{\"T\": 1, \"type\": \"save_map_point\", \"data\": \"a\"}]'}"
可以在 RViz 导航界面中通过 “Nav2 Goal” 让机器人运动至下一目标位置,将其保存为下一个导航点。
10.4 运动到导航点
保存好导航点后,发送控制指令让机器人运动到对应导航点,data 为前面所保存的导航点名称:
ros2 action send_goal /behavior ugv_interface/action/Behavior "{command: '[{\"T\": 1, \"type\": \"pub_nav_point\", \"data\": \"a\"}]'}"
保存的导航点信息也会存在 map_points.txt 文件里,该文件位于 /home/ws/ugv_ws/ 目录下。