【这个型号效果不好,最终我没采用–2021.5.30】
A3驱动
从头搭建ROS巡航车,先解决激光雷达,使用的思岚RPLIDAR A3,配置步骤这里,思岚也提供了SDK,git clone下来放进src,直接根目录catkin_make,记得配置目录到bashrc中。核心在src目录下两个文件,在这里用node.cpp。先看CMakeLists.txt文件,有一句重要的脚本:
add_executable(rplidarNode src/node.cpp ${RPLIDAR_SDK_SRC})
target_link_libraries(rplidarNode ${catkin_LIBRARIES})
----通过node.cpp文件,生成了rplidarNode可执行文件,这个节点将采集雷达数据,并封装后发布出去,后面订阅这个话题处理就可以。有些小伙伴会在源码里修改雷达数据,屏蔽一定角度(比如车身遮挡),在这里不建议这样做,保留源码不动,下面再说怎么屏蔽角度。
----再看怎么启动雷达采集节点,launch目录有个rplidar_a3.launch文件,内容如下:
<launch>
<node name="rplidarNod" pkg="rplidar_ros" type="rplidarNode" output="screen">
<param name="serial_port" type="string" value="/dev/ttyUSB0"/>
<param name="serial_baudrate" type="int" value="256000"/><!--A3 -->
<param name="frame_id" type="string" value="laser"/>
<param name="inverted" type="bool" value="false"/>
<param name="angle_compensate" type="bool" value="true"/>
<param name="scan_mode" type="string" value="Sensitivity"/>
</node>
<include file="$(find laser_filters)/launch/anglarBounds.launch"> <!-- laser_filters -->
</include>
</launch>
----很直白了,节点名称、串口号、波特率、frame名称(rviz显示雷达数据时,一定Fixed Frame设置相同名称)、安装是否倒置、角度补偿、运行模式,include文件是雷达过滤处理,下面再说。
----项目空间根目录执行
roslaunch rplidar_ros rplidar_a3.launch
可以见到雷达开始转起来,tostopic list中有个/scan话题,就是思岚SDK发出的雷达数据话题,也可以rostopic echo /scan查看雷达具体数据,从rviz中也可以订阅看见雷达数据。
角度屏蔽、数据过滤
这一步还是很实用的,不用自己修改源码,直接使用laser_filters,git扒拉下来,作一个单独功能包放src下,catkin_make一通,就可以使用了。详细介绍可以看WIKI,也有人翻译了中文版本。这个节点将订阅/scan话题数据,处理后发布出/scan_filtered话题,后续处理使用这个话题就可以了。过滤器的种类还是很多的,类别都列在了laser_filters_plugins.xml文件里,可以随便尝试看看效果。
修改examples文件夹为launch(没别的原因,就是看着舒服,哈),里面有各种滤波器示例,在这里我新建一个anglarBounds.launch文件,内容:
<launch>
<node pkg="laser_filters" type="scan_to_scan_filter_chain" output="screen" name="laser_filter">
<rosparam command="load" file="$(find laser_filters)/launch/anglarBounds.yaml" />
</node>
</launch>
调用一个yaml配置文件,配置过滤器参数,yaml内容:
scan_filter_chain:
- name: angle
type: laser_filters/LaserScanAngularBoundsFilterInPlace
params:
lower_angle: -1.57
upper_angle: 1.57
- name: box_filter
type: laser_filters/LaserScanRangeFilter
params:
use_message_range_limits: false # if not specified defaults to false
lower_threshold: 0.5 # if not specified defaults to 0.0
upper_threshold: 100.0 # if not specified defaults to 100000.0
lower_replacement_value: -.inf # if not specified defaults to NaN
upper_replacement_value: .inf # if not specified defaults to NaN
- name: shadows
type: laser_filters/ScanShadowsFilter
params:
min_angle: 10
max_angle: 170
neighbors: 20
window: 1
在这里,只保留了正前方-90度至90度数据,然后用了两个过滤,这时候可以从rviz中看到效果了。