< >
Home » PX4与仿真入门教程 » PX4与仿真入门教程-dronedoc-turtlebot gmapping建图

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) 是这些自位置估计方法和地图生成的同时操作

纠错,疑问,交流: 请进入讨论区点击加入Q群

获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


标签: px4与仿真入门教程