catographer融合lidar和IMU进行2D建图

本文介绍如何为ROS机器人配置SLAM系统,包括创建URDF文件定义机器人结构、修改Lua配置文件设置SLAM参数及创建Launch文件启动系统。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 添加机器人的urdf文件

      我是选择新建了一个urdf文件(命名为my_robot.urdf)

      imu的link name选择ah100b发布的imu数据的frame_id

<!--
  Copyright 2016 The Cartographer Authors

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->

<robot name="zeus_x3">
  <material name="orange">
    <color rgba="1.0 0.5 0.2 1" />
  </material>
  <material name="gray">
    <color rgba="0.2 0.2 0.2 1" />
  </material>

  <link name="imu">
    <visual>
      <origin xyz="0.0 0.0 0.0" />
      <geometry>
        <box size="0.06 0.04 0.02" />
      </geometry>
      <material name="orange" />
    </visual>
  </link>

  <link name="laser_link">
    <visual>
      <origin xyz="0.0 0.0 0.0" />
      <geometry>
        <cylinder length="0.07" radius="0.05" />
      </geometry>
      <material name="gray" />
    </visual>
  </link>

  <link name="base_footprint" />

  <joint name="imu_link_joint" type="fixed">
    <parent link="base_footprint" />
    <child link="imu" />
    <origin xyz="-0.2 0 0.2" rpy="3.1416 0 0" />
  </joint>

  <joint name="laser_link_joint" type="fixed">
    <parent link="base_footprint" />
    <child link="laser_link" />
    <origin xyz="-0.405 0 0.73626" rpy="0. 0. 3.1416" />
  </joint>


</robot>

2. 修改install_isolated/share/cartographer_ros/configuration_files和src/cartographer_ros/cartographer_ros/configuration_files路径下的lua文件

    同样是选择新建了一个lua文件(命名为my_robot.lua)

-- Copyright 2016 The Cartographer Authors
--
-- Licensed under the Apache License, Version 2.0 (the "License");
-- you may not use this file except in compliance with the License.
-- You may obtain a copy of the License at
--
--      http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" BASIS,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.

include "map_builder.lua"
include "trajectory_builder.lua"
--include "revo_lds.lua"

options = {
  map_builder = MAP_BUILDER,
  trajectory_builder = TRAJECTORY_BUILDER,
  map_frame = "map",
  --tracking_frame = "base_link",   	进行SLAM的坐标系,如果有IMU的话为IMU坐标系,没有的话就是base_link或者base_footprint
  --published_frame = "base_link",	cato发布的坐标系
  tracking_frame = "imu",
  published_frame = "base_footprint",
  odom_frame = "odom", --里程计数据的坐标系名称
  provide_odom_frame = true,	--使用外部/odom,所以这里不需要内部提供(是否发布里程计坐标系)
  publish_frame_projected_to_2d = false,
  use_pose_extrapolator = true,
  --use_odometry = false,
  use_odometry = false, --是否使用odom数据
  use_nav_sat = false,  --是否使用gps数据
  use_landmarks = false,
  --num_laser_scans = 0,		by weiyang
  --num_multi_echo_laser_scans = 1,	by weiyang
  num_laser_scans = 1,  --如果使用的是单线雷达,此处为雷达的数量
  num_multi_echo_laser_scans = 0,
  --num_subdivisions_per_laser_scan = 10,
  num_subdivisions_per_laser_scan = 1, --将雷达一帧的数据分成几次发出来,对于普通雷达的驱动包来说,此处应为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.,    --下面的五个参数为5种观测的权重比
  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  --使2d还是3d的SLAM

--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 = true  --使用IMU数据
--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_we--ight = 10.
--TRAJECTORY_BUILDER_2D.real_time_correlative_scan_matcher.rotation_delta_cost_weight = 1e-1

--TRAJECTORY_BUILDER.collate_landmarks = true
--POSE_GRAPH.optimization_problem.huber_scale = 1e2
--POSE_GRAPH.optimize_every_n_nodes = 35
--POSE_GRAPH.constraint_builder.min_score = 0.65


return options

注释掉的部分是因为我在机器人上测试的时候,有没有这几句话都能够使用(暂时只做到了能够使用,可这些参数可能和优化部分相关,待下一步研究)

3. 修改install_isolated/share/cartographer_ros//launch和src/cartographer_ros/cartographer_ros/launch下的launch文件

新建my_robot.launch和demo_my_robot.launch文件

my_robot.launch:

<!--
  Copyright 2016 The Cartographer Authors

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->

<launch>
  <param name="robot_description"
    textfile="$(find zeus_x3_description)/urdf/my_robot.urdf" />
<!--"$(find cartographer_ros)/urdf/backpack_2d.urdf"-->
  <node name="robot_state_publisher" pkg="robot_state_publisher"
    type="robot_state_publisher" />

  <node name="cartographer_node" pkg="cartographer_ros"
      type="cartographer_node" args="
          -configuration_directory $(find cartographer_ros)/configuration_files
          -configuration_basename my_robot.lua"
      output="screen">
    <remap from="scan" to="/scan" />
    <remap from="imu" to="/imu" />
  </node>

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

demo_my_robot.launch:

<!--
  Copyright 2016 The Cartographer Authors

  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->

<launch>
  <param name="/use_sim_time" value="false" />

  <include file="$(find ah100b)/launch/imu.launch" />
  <include file="$(find bunker_bringup)/launch/lslidar.launch" />
  <include file="$(find cartographer_ros)/launch/my_robot.launch" />
  

  <node name="rviz" pkg="rviz" type="rviz" required="true"
      args="-d $(find cartographer_ros)/configuration_files/demo_2d.rviz" />
 
</launch>

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一起抬水泥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值