PX4与仿真入门教程-dronedoc-turtlebot gmapping建图
PX4与仿真入门教程-dronedoc-turtlebot建图
说明:
本页介绍如何使用 Turtlebot 和 costmap_2d 在 Gazebo 模拟中生成地图。
如果使用无人机,由于姿势倾斜,可能无法制作出准确的地图,所以这次我们将使用Turtlebot。
costmap_2d 包是一个提供节点的包,该节点生成用于机器人导航的占用网格图。
占用网格图是根据传感器信息计算出障碍物存在概率的地图,并考虑机器人的形状和障碍物的信息生成成本图。
完整代码参考https://github.com/ncnynl/dronedoc/tree/master/dronedoc
安装turtlebot仿真:
创建世界文件
启动 Gazebo 并创建一个 World 文件。 如果要使用现有的 World 文件,则不需要此步骤。
这一次,我们将使用 Gazebo 模型数据库(http://models.gazebosim.org/)中的 Willow Garage 模型。
可以从“插入”选项卡添加 Willow Garage 模型。 模型会自动从数据库中下载,但下载需要一些时间。
创建一个如下所示的世界并将其保存为 World 文件willow_garage.world
目录位于/dronedoc_ws/src/px4_sim_pkg/worlds/
如图:
为制图创建节点
- 保存地图的 map_saver 节点订阅 /map 主题中的消息,必须从 costmap_2d 发布地图的 costmap/costmap 重新映射。
- 它还使用 costmap_2d 包中的 costmap_2d_node 来创建成本图。
- 至于参数,配置文件中描述的和之前一样加载到rosparam标签中。
- 进入launch目录
cd ~/dronedoc_ws/src/px4_sim_pkg/launch
- 新建map_builder.launch
<launch>
<remap from="/costmap_node/costmap/costmap" to="map" />
<node pkg="costmap_2d" type="costmap_2d_node" name="costmap_node" respawn="false" output="screen">
<rosparam command="load" ns="costmap" file="$(find px4_sim_pkg)/config/costmap_params.yaml"/>
</node>
</launch>
- 进入config目录
cd ~/dronedoc_ws/src/px4_sim_pkg/config
- 新建costmap_2d_node的参数设置文件costmap_params.yaml
- 内容如下:
footprint: [[0.2, 0.2], [0.2, -0.2], [-0.2, -0.2], [-0.2, 0.2]]
inflation_radius: 0
observation_sources: laser_scan_sensor
obstacle_range: 5
laser_scan_sensor: {
sensor_frame: camera_depth_frame,
data_type: LaserScan,
topic: /scan,
marking: true
}
global_frame: odom
robot_base_frame: base_link
update_frequency: 5.0
publish_frequency: 2.0
#static_map: false
rolling_window: false
width: 50.0
height: 50.0
resolution: 0.05
origin_x: -12
origin_y: 0
- 参数说明
膨胀半径/inflation_raduis
将障碍物的成本增加到该值的距离。这是为了在成本图中反映机器人的形状,但是这次我要生成一个地图,所以将其设置为0。
发布频率/publish_frequency
我们已经设置了发布信息用于地图显示的频率。请注意,它默认设置为 0,不显示。
全局坐标系/global_frame
这次使用Turtlebot的轮子里程计作为自身位置,所以设置为odom。
激光扫描传感器/laser_scan_sensor
这次使用的 Turtlebot 节点将 RGBD 相机的深度图像发布为伪激光扫描。帧是camera_depth_frame,主题是/scan,所以分别改一下。
障碍物范围/obstacle_range
只有在该值距离内的障碍物才会反映在地图上。这次设置为5 m,以提高制图速度。
滚动窗口/rolling_window
设置为false来固定生成地图的区域。如果设置为true,当机器人移动时,地图区域将随之移动。我们还更改了 origin_x 和 origin_y,以便 willow_garage.world 中的建筑物适合地图区域。
如果地图不够大,请更改宽度和高度参数。
测试
- 启动所需节点
- 这次我们将在 Gazebo 中创建模型的地图,因此启动模拟器。
cd ~/tools/dronedoc/
source load_environment.sh
roslaunch turtlebot_gazebo turtlebot_world.launch world_file:=$HOME/dronedoc_ws/src/px4_sim_pkg/worlds/willow_garage.world
- 启动 Teleop 节点。 使用适合您的控制器的 Launch 文件。
- 新终端,使用键盘时,请使用 keyboard_teleop.launch 文件。
cd ~/tools/dronedoc/
source load_environment.sh
roslaunch turtlebot_teleop keyboard_teleop.launch
- 如果使用xbox360手柄运行
roslaunch turtlebot_teleop xbox360_teleop.launch
- 新终端,启动制图节点。
cd ~/tools/dronedoc/
source load_environment.sh
roslaunch turtlebot_gazebo gmapping_demo.launch
- 打开rviz
rviz
订阅map话题
移动小车建图,效果如下:
- 保存地图
rosrun map_server map_saver -f ~/map
- 这一次,我使用Turtlebot的车轮里程计制作了一张地图。
- 本来,由于滑移和扰动的影响,自身位置会出现误差,但是在这种模拟的情况下,可以忽略不计,因此可以通过这种方式创建地图。
- 为了在误差不可忽略的情况下,以更高的精度估计自身位置,我们 将使用下一章中使用的AMCL和卡尔曼滤波器等方法。
- 同时定位和映射 (SLAM) 是这些自位置估计方法和地图生成的同时操作
获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号