0. 前言
PIBOT
已经支持多种雷达的支持,但新的产品不断出现,如何在PIBOT
包中适配新的雷达
1. 雷达配置与运行
配置
当前的雷达在pibot_lidar
包中定义, pibot_lidar/launch
可以看到不同雷达的支持, 配置选择雷达只需要执行pibot_init_env.sh
脚本在提示配置雷达时选择对应的雷达
please specify your pibot lidar:
(0: not config,
1: rplidar(a1,a2),
2: rplidar(a3),
3: eai(x4),
4: eai(g4),
实际改脚本会设置PIBOT_LIDAR
环境变量, 通过pibot_view_env.sh
或者echo $PIBOT_LIDAR
可以看到当前的雷达配置
root@5369f536cd24:~/pibot_ros# echo $PIBOT_LIDAR
rplidar
运行
pibot_bring/launch/robot.launch
包含底盘驱动相关信息,提供odom/imu/scan
等传感器的ros topic
输出
<launch>
....
<arg name="lidar" default="$(env PIBOT_LIDAR)" doc="lidar type [rplidar, eai-x4, eai-g4]"/>
...
<include unless="$(eval arg('lidar') == 'none')" file="$(find pibot_lidar)/launch/$(arg lidar).launch"/>
</launch>
可以看到robot.launch
引用的是pibot_lidar/launch/${PIBOT_LIDAR}.launch
, 我们只需要设置不同的PIBOT_LIDAR
环境变量就可以引用对应的launch
也就是我们适配雷达,只需要按照已有的launch新增对应雷达的launch文件即可
2. 适配
我们以rplidar-s2
为例,新增下对rplidar s2
的支持
2.1 更新下载驱动
下载雷达的驱动并且编译
cd ~
git clone https://github.com/Slamtec/rplidar_ros.git
mv rplidar_ros ~/pibot_ros/ros_ws/src
cd ~/pibot_ros/ros_ws/
catkin_make
2.2 拷贝launch文件
拷贝雷达的launch文件至pibot_lidar/launch
目录
cp ~/pibot_ros/ros_ws/src/rplidar_ros/launch/rplidar_s2.launch pibot_lidar/launch
2.3 适配配置
pibot_lidar/launch/rplidar_s2.launch
如下
<launch>
<node name="rplidarNode" pkg="rplidar_ros" type="rplidarNode" output="screen">
<param name="serial_port" type="string" value="/dev/ttyUSB0"/>
<param name="serial_baudrate" type="int" value="1000000"/>
<param name="frame_id" type="string" value="laser"/>
<param name="inverted" type="bool" value="false"/>
<param name="angle_compensate" type="bool" value="true"/>
</node>
</launch>
对比已经支持的,如pibot_lidar/launch/rplidar_s1.launch
<launch>
<node name="rplidarNode" pkg="rplidar_ros" type="rplidarNode" output="screen">
<param name="serial_port" type="string" value="/dev/rplidar"/>
<param name="serial_baudrate" type="int" value="256000"/>
<param name="frame_id" type="string" value="laser_link"/>
<param name="inverted" type="bool" value="false"/>
<param name="angle_compensate" type="bool" value="true"/>
</node>
</launch>
可以看到serial_port
serial_baudrate
和frame_id
- serial_port
因为已经配置了rplidar的udev,插入时会自动生成/dev/ttyUSBx
的软连接文件, 我们同步修改为/dev/rplidar - serial_baudrate
显然s2的设备波特率更高,无需改动 - frame_id
pibot规定雷达的坐标系名称为laser_link
, 故需要修改为laser_link
内部的tf都已经在urdf固定,故有的型号的雷达需要删除的静态的tf pub, 如EAI TG雷达中的static_transform_publisher
适配后的pibot_lidar/launch/rplidar_s2.launch
如下
<launch>
<node name="rplidarNode" pkg="rplidar_ros" type="rplidarNode" output="screen">
<param name="serial_port" type="string" value="/dev/rplidar"/>
<param name="serial_baudrate" type="int" value="1000000"/>
<param name="frame_id" type="string" value="laser_link"/>
<param name="inverted" type="bool" value="false"/>
<param name="angle_compensate" type="bool" value="true"/>
</node>
</launch>
2.4 测试运行
数据测试
export PIBOT_LIDAR=rplidar_s2
pibot_lidar
无错误输出同时打开另外的终端输入rostopic echo /scan
可以显示数据即可
方向测试
export PIBOT_LIDAR=rplidar_s2
pibot_base
打开rviz, 分别在雷达前后左右放置障碍,观察rviz中显示障碍是否与实际放置位置匹配,如果不匹配,有如下几个方法
- 可以调整雷达的安装方向
- 可以调整urdf中的
laser_link
, 以apollo为例,只需要修改~/pibot_ros/ros_ws/src/pibot_description/urdf/apollo.urdf.xacro
中的lidar_joint_rpy
,最后一个几个调整角度
例如从
...
<!-- LIDAR Pos-->
<xacro:property name="lidar_joint_rpy" value="0 0 0"/>
...
改为
...
<!-- LIDAR Pos-->
<xacro:property name="lidar_joint_rpy" value="0 0 1.57"/>
...
相当于把雷达前后旋转180度
- 调整launch中的inverted(雷达数据顺逆失真跟实际不匹配时调整该参数)
3. 写入配置
可以吧PIBOT_LIDAR=rplidar_s2
写入到~/.pibotrc
保证打开bash直接生效
4. 其他注意
pibot雷达的scan tipic名为scan, 如果雷达发出的topic名称不一致需要remap,如乐动ld06 ld06.launch
<launch>
<node name="ld06_lidar" pkg="ld06_lidar" type="ld06_lidar" args="LD06" output="screen" >
<param name="serial_port" value="/dev/ldlidar"/>
<param name="lidar_frame" value="laser_link"/>
<remap from="/LiDAR/LD06" to="scan"/> <!-- 映射topic-->
</node>
</launch>