PX4与仿真入门教程-dronedoc-过滤 LiDAR 数据
PX4与仿真入门教程-dronedoc-过滤 LiDAR 数据
说明:
- 介绍如何过滤 LiDAR 数据
问题:
如果机器人干扰激光雷达射线,部分机器人将包含在扫描数据中,这会影响映射和自我位置估计的准确性。
在此页面上,您将学习如何通过过滤 LiDAR 数据来消除机器人干扰。
要过滤 LiDAR 数据,请使用laser_filters 包。
Laser_filters 包提供了各种类型的过滤器,可用于仅提取特定距离范围内的扫描数据或仅提取特定角度的扫描数据。
您还可以连接多个过滤器以创建过滤器链。
写一个配置文件
- 这一次,我们将提取特定距离范围内的扫描数据,因此我们将使用 LaseScanRangeFilter。
- LaserScanRangeFilter 是一个基于距离过滤的过滤器。
- 这里我们通过将设置写入 yaml 文件并将其加载到 Launch 文件中来设置 ROS 参数。
- 将以下内容保存在 config/laser_filter.yaml 中。
- laser_filter.yaml内容
scan_filter_chain:
- name: range
type: laser_filters/LaserScanRangeFilter
params:
use_message_range_limits: false
lower_threshold: 0.5
upper_threshold: .inf
lower_replacement_value: -.inf
upper_replacement_value: .inf
- 每个参数的含义如下。
姓名/name
过滤器名称
类型/type
过滤器类型
use_message_range_limits
是否使用激光扫描消息中定义的最大值和最小值
下限/lower_threshold
门槛越低。 过滤小于此距离的扫描数据。
上限阈值/upper_threshold
较大的门槛。 过滤更远距离的扫描数据。
较低的替换值/lower_replacement_value
lower_threshold 此值用于以下扫描数据。
upper_replacement_value
该值用于高于 upper_threshold 的扫描数据。
- 另请参阅laser_filters ROS Wiki 页面以了解参数说明。
- 在本例中,所有低于 0.5m 的扫描数据都将被过滤,值为 -.inf。
- 由于上限设置为.inf,大于0.5m的扫描数据将不会被替换。
创建启动文件
- 这一次,通过将它添加到 mymodel_sitl_tf.launch 来编辑它。
- 您可以通过将以下内容添加到 Launch 文件来使用laser_filter 包:
<node pkg="laser_filters" type="scan_to_scan_filter_chain" name="laser_filter">
<rosparam command="load" file="$(find px4_sim_pkg)/config/laser_filter.yaml" />
<remap from="scan" to="laser/scan" />
</node>
我正在使用
标签启动laser_filters 包并加载我刚刚使用 标签创建的配置文件。 另外,laser_filters 包过滤了发布到扫描主题的扫描数据,但是这次 LiDAR 将数据发布到激光/扫描主题,因此重新映射它。
由laser_filters 过滤的消息发布到scan_filtered 主题。
最后, mymodel_laser_filter.launch 看起来像这样:
<launch>
<node pkg="tf" name="base2lidar" type="static_transform_publisher" args="0 0 0.1 0 0 0 base_link lidar_link 100"/>
<node pkg="tf" name="map2odom" type="static_transform_publisher" args="0 0 0 0 0 0 map odom 100"/>
<arg name="vehicle" default="iris_2d_lidar"/>
<arg name="sdf" default="$(find px4_sim_pkg)/models/iris_2d_lidar/model.sdf" />
<arg name="verbose" default="false"/>
<arg name="debug" default="false"/>
<include file="$(find px4)/launch/mavros_posix_sitl.launch" >
<arg name="sdf" value="$(arg sdf)" />
<arg name="vehicle" value="$(arg vehicle)" />
<arg name="verbose" value="$(arg verbose)" />
<arg name="debug" value="$(arg debug)" />
</include>
<param name="/mavros/local_position/tf/send" type="bool" value="true" />
<param name="/mavros/local_position/frame_id" type="str" value="odom" />
<param name="/mavros/local_position/tf/frame_id" type="str" value="odom" />
<!-- See http://wiki.ros.org/laser_filters for details -->
<node pkg="laser_filters" type="scan_to_scan_filter_chain" name="laser_filter">
<rosparam command="load" file="$(find px4_sim_pkg)/config/laser_filter.yaml" />
<remap from="scan" to="laser/scan" />
</node>
</launch>
测试:
- 让我们看看它是否被正确过滤。
cd ~/tools/dronedoc/
source load_environment.sh
roslaunch px4_sim_pkg mymodel_laser_filter.launch
- 打开rviz,增加两个激光话题,选择话题/laser/scan和/scan_filtered
- 粉红色的点是过滤前的点,白色的点是过滤后的点。
- 您可以看到放置在附近的球体的点已被删除
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号