JetBot ROS AI Kit 教程一、雷达数据分析

来自Waveshare Wiki
跳转至: 导航搜索

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组件;图像中红色的点即为雷达扫描到的点
J1.png
  • TF显示两个坐标,其中base_footprint为机器人底盘坐标,laser_frame为雷达坐标,雷达坐标和底盘坐标相反
J2.png

步骤2、雷达数据分析

  • 运行如下命令可以查看雷达的话题 /scan的数据类型
  rostopic type /scan    
J3.png
  • 如上图所示,输出类型为 sensor_msgs/LaserScan ,可输入以下命令查看LaserScan详细的消息结构
  rosmsg show sensor_msgs/LaserScan  
J4.png
  • 其中:
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  
J6.png
  • 从数据中可以发现扫描角度为-3.14 ~ 3.14,即为360度一圈;雷达扫描距离范围为0.15m~12M。ranges数据为每个角度的距离数据,数组长度大约为(angle_max-angle_min)/angle_increment
  • A1雷达角度如下图所示,ranges第一个数据角度为图中0度(即机器人正前方),最后一个数据为360度
J5.png

步骤3、雷达数据过滤

  • 从上面步骤我们知道了雷达发送的数据格式以及雷达数据信息,因此我们可以选择过滤不需要的部分
  • 【注意:请先关闭雷达节点,否则多次启动雷达节点会出错】
  • 在机器人端输入以下命令启动雷达过滤节点
 roslaunch jetbot_pro laser_filter.launch     #启动雷达过滤节点   
  • 在虚拟机端运行如下命令,打开RVIZ图形工具界面
 rosrun rviz rviz    
  • 添加LaserScan 组件,Topic选择/filteredscan话题,Fixed Frame选择 base_footprint;添加TF组件显示机器人底盘坐标;图像中红色的点即为雷达扫描到的点。此时可以发现雷达数据数据只有前面一半,后面一般数据被过滤掉了

家.png

  • 运行如下命令启动动态参数调试界面
 rosrun rqt_reconfigure rqt_reconfigure    

J8.png

  • 其中:
    • laserAngle :设置有效角度范围,探测机器人前面的角度
    • distance :设置有效距离,超过此距离的数据将被过滤
  • 拖动滑条调节参数可以发现雷达显示的红点也跟着改变

步骤4、雷达避障

  • 【注意:请先关闭雷达相关节点,否则多次启动雷达节点会出错】
  • 在机器人端输入以下命令启动雷达避障节点
 roslaunch jetbot_pro laser_avoidance.launch     #启动雷达避障节点   
  • 程序启动后机器人将向前运动,遇到障碍物将自动转向,避开障碍物
  • 在虚拟机端启动动态参数调节界面
  rosrun rqt_reconfigure rqt_reconfigure      

J9.png

  • 其中:
    • linear 设置机器人前进的线速度,注意设置速度过快有可能会停止不及时撞到障碍物
    • angular 设置机器人转向的角速度
    • Angle 设置机器人的探测角度范围,程序探测机器人左边,前面,右边三个方向,此值设置每个方向的探测角度。
    • Distance 设置障碍物距离,距离小于此值则认为遇到障碍物并转向。
    • start 机器人避障开关,默认启动,取消勾选后小车则停止

步骤5、雷达警卫

  • 【注意:请先关闭雷达相关节点,否则多次启动雷达节点会出错】
  • 在机器人端输入以下命令启动雷达警卫节点
 roslaunch jetbot_pro laser_warning.launch    #启动雷达警卫节点   
  • 程序启动后机器人将检测前面距离最近的点,然后控制机器人转向,面朝距离最近的点
  • 在虚拟机端启动动态参数调节界面,可以查看机器人是否面朝记录最近的点
  rosrun rviz rviz      

J10.png

  • 在TF组件中,可以取消勾选其他帧,只勾选base_footprint显示机器人底盘坐标

J11.png

  • 在虚拟机端启动动态参数调节界面
 rosrun rqt_reconfigure rqt_reconfigure       

J12.png

  • 其中:
    • kp,kd 设置PID参数,程序中使用PD调节,修改此参数可以优化机器人跟随效果
    • laserAngle 设置机器人的探测角度范围,默认探测机器人前方120度
    • distance 设置探测距离,只探测小于此值的距离范围
    • start 机器人启动开关,默认启动,取消勾选后小车则停止


步骤6、雷达跟随

  • 【注意:请先关闭雷达相关节点,否则多次启动雷达节点会出错】
  • 在机器人端输入以下命令启动雷达跟随节点
 roslaunch jetbot_pro laser_tracking.launch    #启动雷达跟随节点   
  • 程序启动后机器人将检测前面距离最近的点,然后机器人就会跟追距离最近的点运动
  • 注意:此程序需要在空旷的地方运行,否则将会被周边环境干扰,跟随效果不理想
  • 在虚拟机打开RVIZ图形工具可以查看机器人探测范围
  rosrun rviz rviz      

J10.png

  • 在虚拟机端启动动态参数调节界面
  rosrun rqt_reconfigure rqt_reconfigure        

J14.png

  • 其中:
    • linear_kp,linear_kd 设置线速度PID参数,控制机器人线速度
    • angular_kp,angular_kd 设置角速度PID参数,控制机器人角速度
    • laserAngle 设置机器人的探测角度范围,默认探测机器人前方120度
    • PriorityAngle 设置机器人的优先探测角度范围,此值需比laserAngle大,优先跟追此范围内的点
    • distance 设置探测距离,只探测小于此值的距离范围
    • start 机器人启动开关,默认启动,取消勾选后小车则停止