JetBot ROS AI Kit 教程一、雷达数据分析
来自Waveshare Wiki
JetBot ROS AI Kit 进阶教程目录
- JetBot ROS AI Kit 教程一、雷达数据分析
- JetBot ROS AI Kit 教程二、SLAM激光雷达建图
- JetBot ROS AI Kit 教程三、自主导航
- JetBot ROS AI Kit 教程四、ROS OpenCV
- JetBot ROS AI Kit 教程五、ROS智能语音
- JetBot ROS AI Kit 教程六、Jetson nano 安装ROS系统及环境配置
- JetBot ROS AI Kit 教程七、Ubuntu 虚拟机安装ROS系统及环境配置
- JetBot ROS AI Kit 教程八、ROS语音环境配置
- JetBot ROS AI Kit 主页
步骤1、启动雷达电源,启动雷达节点
- 打开雷达电源,在机器人端输入以下命令开启雷达节点
roslaunch jetbot_pro lidar.launch #启动雷达节点
- 【注意:若打开雷达节点时出现错误,请CTRL+C关闭节点,然后输入reboot重新启动机器人】
- 在虚拟机端输入以下命令,打开RVIZ图形工具
rosrun rviz rviz
- 在图形界面请添加LaserScan 组件,Topic选择 /scan 话题,Fixed Frame选择 base_footprint,添加TF组件;图像中红色的点即为雷达扫描到的点
- TF显示两个坐标,其中base_footprint为机器人底盘坐标,laser_frame为雷达坐标,雷达坐标和底盘坐标相反
步骤2、雷达数据分析
- 运行如下命令可以查看雷达的话题 /scan的数据类型
rostopic type /scan
- 如上图所示,输出类型为 sensor_msgs/LaserScan ,可输入以下命令查看LaserScan详细的消息结构
rosmsg show sensor_msgs/LaserScan
- 其中:
std_msgs/Header header # Header也是一个结构体,包含了seq,stamp,frame_id uint32 seq # 指的是扫描顺序增加的id time stamp # stamp包含了开始扫描的时间和与开始扫描的时间差.注意扫描是逆时针从正前方开始扫描的. string frame_id # frame_id是扫描的参考系名称,在ROS中作用至关重要,消息将和tf绑定才可以读取数据 float32 angle_min # 开始扫描的角度(rad) float32 angle_max # 结束扫描的角度(rad) float32 angle_increment # 每一次扫描增加的角度(rad) float32 time_increment # 测量的时间间隔(second) float32 scan_time # 扫描的时间间隔(second) float32 range_min # 距离最小值(m) float32 range_max # 距离最大值(m) float32[] ranges # 距离数组(m) ,数组长度等于扫描角度除以每次增加角度 float32[] intensities # 与设备有关,强度数组,长度和ranges一样
- 输入以下命令可以查看雷达话题 /scan 的数据
rostopic echo /scan
- 从数据中可以发现扫描角度为-3.14 ~ 3.14,即为360度一圈;雷达扫描距离范围为0.15m~12M。ranges数据为每个角度的距离数据,数组长度大约为(angle_max-angle_min)/angle_increment
- A1雷达角度如下图所示,ranges第一个数据角度为图中0度(即机器人正前方),最后一个数据为360度
步骤3、雷达数据过滤
- 从上面步骤我们知道了雷达发送的数据格式以及雷达数据信息,因此我们可以选择过滤不需要的部分
- 【注意:请先关闭雷达节点,否则多次启动雷达节点会出错】
- 在机器人端输入以下命令启动雷达过滤节点
roslaunch jetbot_pro laser_filter.launch #启动雷达过滤节点
- 在虚拟机端运行如下命令,打开RVIZ图形工具界面
rosrun rviz rviz
- 添加LaserScan 组件,Topic选择/filteredscan话题,Fixed Frame选择 base_footprint;添加TF组件显示机器人底盘坐标;图像中红色的点即为雷达扫描到的点。此时可以发现雷达数据数据只有前面一半,后面一般数据被过滤掉了
- 运行如下命令启动动态参数调试界面
rosrun rqt_reconfigure rqt_reconfigure
- 其中:
- laserAngle :设置有效角度范围,探测机器人前面的角度
- distance :设置有效距离,超过此距离的数据将被过滤
- 拖动滑条调节参数可以发现雷达显示的红点也跟着改变
步骤4、雷达避障
- 【注意:请先关闭雷达相关节点,否则多次启动雷达节点会出错】
- 在机器人端输入以下命令启动雷达避障节点
roslaunch jetbot_pro laser_avoidance.launch #启动雷达避障节点
- 程序启动后机器人将向前运动,遇到障碍物将自动转向,避开障碍物
- 在虚拟机端启动动态参数调节界面
rosrun rqt_reconfigure rqt_reconfigure
- 其中:
- linear 设置机器人前进的线速度,注意设置速度过快有可能会停止不及时撞到障碍物
- angular 设置机器人转向的角速度
- Angle 设置机器人的探测角度范围,程序探测机器人左边,前面,右边三个方向,此值设置每个方向的探测角度。
- Distance 设置障碍物距离,距离小于此值则认为遇到障碍物并转向。
- start 机器人避障开关,默认启动,取消勾选后小车则停止
步骤5、雷达警卫
- 【注意:请先关闭雷达相关节点,否则多次启动雷达节点会出错】
- 在机器人端输入以下命令启动雷达警卫节点
roslaunch jetbot_pro laser_warning.launch #启动雷达警卫节点
- 程序启动后机器人将检测前面距离最近的点,然后控制机器人转向,面朝距离最近的点
- 在虚拟机端启动动态参数调节界面,可以查看机器人是否面朝记录最近的点
rosrun rviz rviz
- 在TF组件中,可以取消勾选其他帧,只勾选base_footprint显示机器人底盘坐标
- 在虚拟机端启动动态参数调节界面
rosrun rqt_reconfigure rqt_reconfigure
- 其中:
- kp,kd 设置PID参数,程序中使用PD调节,修改此参数可以优化机器人跟随效果
- laserAngle 设置机器人的探测角度范围,默认探测机器人前方120度
- distance 设置探测距离,只探测小于此值的距离范围
- start 机器人启动开关,默认启动,取消勾选后小车则停止
步骤6、雷达跟随
- 【注意:请先关闭雷达相关节点,否则多次启动雷达节点会出错】
- 在机器人端输入以下命令启动雷达跟随节点
roslaunch jetbot_pro laser_tracking.launch #启动雷达跟随节点
- 程序启动后机器人将检测前面距离最近的点,然后机器人就会跟追距离最近的点运动
- 注意:此程序需要在空旷的地方运行,否则将会被周边环境干扰,跟随效果不理想
- 在虚拟机打开RVIZ图形工具可以查看机器人探测范围
rosrun rviz rviz
- 在虚拟机端启动动态参数调节界面
rosrun rqt_reconfigure rqt_reconfigure
- 其中:
- linear_kp,linear_kd 设置线速度PID参数,控制机器人线速度
- angular_kp,angular_kd 设置角速度PID参数,控制机器人角速度
- laserAngle 设置机器人的探测角度范围,默认探测机器人前方120度
- PriorityAngle 设置机器人的优先探测角度范围,此值需比laserAngle大,优先跟追此范围内的点
- distance 设置探测距离,只探测小于此值的距离范围
- start 机器人启动开关,默认启动,取消勾选后小车则停止