ubuntu20.04下turtlebot3与cartographer结合使用–建图与定位

ubuntu20.04下turtlebot3与cartographer结合使用–建图与定位


参考链接

turtlebot3安装

Cartographer安装

GitHub

  • https://github.com/cartographer-project/cartographer
  • https://github.com/cartographer-project/cartographer_ros

Google文档–强力推荐

CSDN


2D建图仿真

1.启动Gazebo仿真

roslaunch turtlebot3_gazebo turtlebot3_stage_4.launch

p1

2.启动slam

turtlebot3已包含与cartographer相关的启动配置文件,故只需安装好cartographer,便可通过以下命令启动cartographer的slam建图,包含move_base节点

roslaucn turtlebot3_slam turtlebot3_slam.launch slam_methods:=cartographer

p2
注:
turtlebot3_slam/config文件目录下已有turtlebot3_lds_2d.lua,也可以自定义新建.lua文件
同样保存在turtlebot3_slam/config文件目录下,方便后续动态调用

参考古月居的文档
turtlebot3_carto.lua

include "map_builder.lua"
include "trajectory_builder.lua"

options = {
  map_builder = MAP_BUILDER,
  trajectory_builder = TRAJECTORY_BUILDER,
  map_frame = "map",
  tracking_frame = "base_footprint",
  published_frame = "odom",
  odom_frame = "odom",
  provide_odom_frame = false, --算法内部提供里程计
  publish_frame_projected_to_2d = false,
  use_odometry = true, --使用里程计
  use_nav_sat = false,
  use_landmarks = false,

  num_laser_scans = 1,
  num_multi_echo_laser_scans = 0,
  num_subdivisions_per_laser_scan = 1,
  num_point_clouds = 0,
  lookup_transform_timeout_sec = 0.2,
  submap_publish_period_sec = 0.3,
  pose_publish_period_sec = 5e-3,
  trajectory_publish_period_sec = 30e-3,
  rangefinder_sampling_ratio = 1.,
  odometry_sampling_ratio = 1.,
  fixed_frame_pose_sampling_ratio = 1.,
  imu_sampling_ratio = 1.,
  landmarks_sampling_ratio = 1.,
}

MAP_BUILDER.use_trajectory_builder_2d = true

TRAJECTORY_BUILDER_2D.submaps.num_range_data = 35
TRAJECTORY_BUILDER_2D.min_range = 0.3
TRAJECTORY_BUILDER_2D.max_range = 8.
TRAJECTORY_BUILDER_2D.missing_data_ray_length = 1.
TRAJECTORY_BUILDER_2D.use_imu_data = false
TRAJECTORY_BUILDER_2D.imu_gravity_time_constant = 9.8 
TRAJECTORY_BUILDER_2D.use_online_correlative_scan_matching = true
TRAJECTORY_BUILDER_2D.real_time_correlative_scan_matcher.linear_search_window = 0.1
TRAJECTORY_BUILDER_2D.real_time_correlative_scan_matcher.translation_delta_cost_weight = 10.
TRAJECTORY_BUILDER_2D.real_time_correlative_scan_matcher.rotation_delta_cost_weight = 1e-1
POSE_GRAPH.optimization_problem.huber_scale = 1e2
POSE_GRAPH.optimize_every_n_nodes = 35
POSE_GRAPH.constraint_builder.min_score = 0.65

return options

通过以下命令动态加载自定义.lua文件

roslaunch turtlebot3_slam turtlebot3_slam.launch slam_methods:=cartographer configuration_basename:=turtlebot3_carto.lua

3. 将地图保存.pbstream文件

参考链接

rosservice call /write_state "{filename: '/home/chj/maps/carto_test.pbstream', include_unfinished_submaps: true}"

filename路径自行选择

4. 可以通过cartographer提供的ros包,将后缀名为.pbstream的地图信息,转化成ros地图信息,用于其他方式的定位,如AMCL

rosrun cartographer_ros cartographer_pbstream_to_ros_map -map_filestem=/home/chj/maps/carto_test -pbstream_filename=/home/chj/maps/carto_test.pbstream -resolution=0.05

p3

5. 基于已有地图定位

使用已经建立好的地图进行定位,同时进行增量式更新地图

  • turtlebot3_slam/config文件目录下新建
    turtlebot3_carto_localization.lua
include "turtlebot3_carto.lua"

--TRAJECTORY_BUILDER.pure_localization = true (不需要这句,否则报错)
TRAJECTORY_BUILDER.pure_localization_trimmer = {
  max_submaps_to_keep = 3,
}
POSE_GRAPH.optimize_every_n_nodes = 50

return options
  • 选择在turtlebot3_slam/launch文件目录下新建turtlebot3_carto_localization.launch
<launch>
  <!-- Arguments -->
  <arg name="model" default="$(env TURTLEBOT3_MODEL)" doc="model type [burger, waffle, waffle_pi]"/>
  <arg name="configuration_basename" default="turtlebot3_carto_localization.lua"/>
  <arg name="open_rviz" default="true"/>
  <arg name="arg load_state_filename" default="/home/chj/maps/carto_test.pbstream"/>

  <!-- TurtleBot3 -->
  <include file="$(find turtlebot3_bringup)/launch/turtlebot3_remote.launch">
    <arg name="model" value="$(arg model)" />
  </include>

  <!-- move_base -->
  <include file="$(find turtlebot3_navigation)/launch/move_base.launch">
    <arg name="model" value="$(arg model)" />
  </include>

  <!-- cartographer_node -->
  <node pkg="cartographer_ros" type="cartographer_node" name="cartographer_node" 
        args="-configuration_directory $(find turtlebot3_slam)/config
              -configuration_basename $(arg configuration_basename)
              -load_state_filename $(arg load_state_filename)"
        output="screen">
    <remap from="/imu" to="/flat_imu"/>
    <!--remap from="points2" to="/camera/depth/points" / -->
  </node>

  <!-- cartographer_occupancy_grid_node -->
  <node pkg="cartographer_ros" type="cartographer_occupancy_grid_node"
        name="cartographer_occupancy_grid_node" 
        args="-resolution 0.05" />

  <!-- flat_world_imu_node -->
  <node pkg="turtlebot3_slam" type="flat_world_imu_node" name="flat_world_imu_node" output="screen">
    <remap from="imu_in" to="/imu" />
    <remap from="imu_out" to="/flat_imu" />
  </node>

  <!-- rviz -->
  <group if="$(arg open_rviz)"> 
    <node pkg="rviz" type="rviz" name="rviz" required="true"
          args="-d $(find turtlebot3_slam)/rviz/turtlebot3_$(arg slam_methods).rviz"/>
  </group>
</launch>

注:
动态参数load_state_filenamedefault应当为之前保存的.pbstream路径

  • 仿真测试
roslaunch turtlebot3_gazebo turtlebot3_stage_4.launch
roslaunch turtlebot3_slam turtlebot3_carto_localization.launch
  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
### 回答1: 好的,以下是在Ubuntu20.04上安装TurtleBot3的步骤: 1. 安装ROS 在终端中输入以下命令来安装ROS: ``` sudo apt install ros-foxy-desktop-full ``` 2. 安装依赖项 在终端中输入以下命令来安装TurtleBot3所需的依赖项: ``` sudo apt install ros-foxy-turtlebot3-msgs ros-foxy-turtlebot3 ros-foxy-turtlebot3-simulations ``` 3. 设置环境变量 在终端中输入以下命令来设置TurtleBot3的环境变量: ``` echo "source /opt/ros/foxy/setup.bash" >> ~/.bashrc echo "export TURTLEBOT3_MODEL=waffle" >> ~/.bashrc source ~/.bashrc ``` 4. 测试 在终端中输入以下命令来启动TurtleBot3仿真: ``` ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py ``` 如果一切正常,你应该能够在Gazebo仿真中看到TurtleBot3。 希望这些步骤能够帮助你在Ubuntu20.04上安装TurtleBot3。 ### 回答2: 要在Ubuntu 20.04上安装turtlebot3,您可以按照以下步骤进行操作: 1. 在您的Ubuntu 20.04系统上安装ROS(机器人操作系统)。您可以按照ROS官方网站上的说明进行安装。 2. 安装turtlebot3软件包。在终端中运行以下命令: ``` sudo apt-get install ros-${ROS_DISTRO}-turtlebot3 ``` 这将安装turtlebot3软件包及其依赖项。 3. 配置turtlebot3。首先,设置您要使用turtlebot3模型。您可以在终端中运行以下命令: ``` export TURTLEBOT3_MODEL=${模型名称} ``` 请将`${模型名称}`替换为您要使用的模型的名称,例如`waffle`或`burger`。 4. 下载TurtleBot3软件包。您可以在终端中运行以下命令: ``` mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone https://github.com/ROBOTIS-GIT/turtlebot3.git cd ~/catkin_ws && catkin_make ``` 这将在您的catkin工作空间中下载和编译TurtleBot3软件包。 5. 配置ROS环境。在终端中运行以下命令: ``` echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc source ~/.bashrc ``` 这将确保ROS所有必要的环境变量在启动时自动设置。 6. 启动TurtleBot3仿真。您可以在终端中运行以下命令: ``` export TURTLEBOT3_MODEL=${模型名称} roslaunch turtlebot3_fake turtlebot3_fake.launch ``` 这将启动TurtleBot3仿真程序,您可以使用键盘控制机器人。 通过按照上述步骤,您可以在Ubuntu 20.04上成功安装和配置turtlebot3。请注意,这只是一个简单的指南,根据您的需求可能会有一些额外步骤。详细设置和其他高级功能的使用,请参阅turtlebot3和ROS的官方文档。 ### 回答3: 要在Ubuntu 20.04上安装Turtlebot3,您可以按照以下步骤进行操作: 1. 确保您的Ubuntu 20.04系统已连接到互联网,并更新软件包列表。在终端中执行以下命令: ``` sudo apt update ``` 2. 安装ROS(机器人操作系统)。Turtlebot3是基于ROS的,所以您需要先安装ROS。执行以下命令来安装完整版的ROS Noetic: ``` sudo apt install ros-noetic-desktop-full ``` 3. 初始化ROS工作区。执行以下命令: ``` echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc source ~/.bashrc ``` 4. 创建一个Turtlebot3工作区,并将其与ROS工作区关联起来。执行以下命令: ``` mkdir -p ~/turtlebot3_ws/src cd ~/turtlebot3_ws/src catkin_init_workspace ``` 5. 克隆Turtlebot3软件包到src目录。执行以下命令: ``` git clone https://github.com/ROBOTIS-GIT/turtlebot3.git ``` 6. 切换回主Turtlebot3工作区目录,并编译软件包。执行以下命令: ``` cd ~/turtlebot3_ws catkin_make ``` 7. 将Turtlebot3模型添加到ROS环境变量中。执行以下命令: ``` echo "export TURTLEBOT3_MODEL=waffle" >> ~/.bashrc source ~/.bashrc ``` 8. 运行Turtlebot3仿真器。执行以下命令打开仿真器: ``` roslaunch turtlebot3_gazebo turtlebot3_empty_world.launch ``` 现在,您已成功在Ubuntu 20.04上安装并运行Turtlebot3仿真器。您可以通过编写ROS节点来控制Turtlebot3进行各种任务。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值