鱼香ROS社区
    • 版块
    • 最新
    • 未解决
    • 已解决
    • 群组
    • 注册
    • 登录
    紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
    提问前必看的发帖注意事项: 社区问答规则(小鱼个人)更新 | 高质量帖子发布指南

    在ROS2中如何实现用cartographer进行纯激光雷达进行定位

    已定时 已固定 已锁定 已移动 未解决
    综合问题
    cartographer定位 nav2
    3
    3
    631
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 、
      、捶你胸口
      最后由 编辑

      背景(可选):

      在实际调车的过程中,发现使用amcl进行定位的时候效果超级差,所以想采用雷达进行定位。

      问题描述:

      1. cartographer的配置文件和launch文件应该怎么编写?
      2. 如何移除掉navigation2中的amcl?

      具体细节和上下文:

      1. 我采用了CSDN中一些方法进行修改配置文件和launch文件,在终端也显示了 /tracked_pose, 但是数据并不能成功打印,我怀疑是配置文件编写存在问题。
      2. 同样在模型运动的过程中,终端能打印出和amcl相关的话题,但是我已经对nav2的配置文件中将amcl那块参数都进行删除。

      尝试过的解决方法:

      目前阅读过几个CSDN上介绍的方法,但是关于nav2这一块比较少。因此问题没能解决。

      3 1 条回复 最后回复 回复 引用 0
      • 小伊小
        机器人小伊
        最后由 编辑

        在ROS 2中使用Cartographer进行纯激光雷达定位是一个常见的需求,特别是在室外或复杂环境中,激光雷达(LIDAR)可以提供高精度和高可靠性的环境感知。以下是如何配置Cartographer、修改launch文件以及从navigation2中移除AMCL的详细步骤:

        1. 配置Cartographer

        首先,你需要有一个合适的Cartographer的配置文件(通常是YAML格式)。这个文件包含了Cartographer运行所需的所有参数,如传感器配置、地图构建和定位的参数等。一个基本的配置文件可能包括:

        map_builder:
          use_trajectory_builder_2d: true
          trajectory_builder_2d:
            submaps:
              num_range_data: 1
              range_data_inserter:
                scan_matcher_translation_delta_cost_weight: 0.1
                scan_matcher_rotation_delta_cost_weight: 1.0
                occupied_space_cost_evaluator:
                  exponential_rate: 0.3
                  linear_offset: 0.5
                  max_obstacle_height: 2.0
            motion_filter:
              max_distance_meters: 0.05
              max_angle_radians: 0.05
              min_relative_translation: 0.01
              min_relative_rotation: 0.01
        
            ...
        
        pose_graph:
          optimization_problem:
            huber_scale: 1e2
            global_sampling_ratio: 0.03
            constraint_builder:
              min_score: 0.65
              loop_closure_translation_weight: 1.0
              loop_closure_rotation_weight: 1.0
        
            ...
        
        map_frame: "map"
        tracking_frame: "base_link"
        published_frame: "base_link"
        odom_frame: "odom"
        provide_odom_frame: true
        use_odometry: false
        use_nav_sat: false
        use_landmarks: false
        num_laser_scans: 1
        num_multi_echo_laser_scans: 0
        num_subdivisions_per_laser_scan: 1
        lookup_transform_timeout_sec: 0.2
        submap_publish_period_sec: 5.0
        pose_publish_period_sec: 5e-3
        trajectory_publish_period_sec: 30e-3
        rangefinder_sampling_ratio: 1.
        odometry_sampling_ratio: 1.
        

        2. 修改Launch文件

        你需要创建一个ROS 2的launch文件来启动Cartographer的节点,并配置相关的参数。这个文件将包含对Cartographer节点和任何相关转换(TF)的启动。

        <launch>
          <arg name="config_file" default="$(find your_cartographer_config_package)/config/cartographer.lua"/>
          <arg name="map_file" default="$(find your_map_package)/maps/my_map.pbstream"/>
        
          <node name="cartographer_node" pkg="cartographer_ros" exec="cartographer_node"
                output="screen"
                args="
                  -configuration_directory $(dirname $(find your_cartographer_config_package))
                  -configuration_basename $(arg config_file)
                  -map_filename $(arg map_file)
                  -load_state_filename $(arg map_file)
                ">
            <remap from="scan" to="/your_lidar_topic"/>
          </node>
        
          <node name="cartographer_occupancy_grid_node" pkg="cartographer_ros"
                exec="cartographer_occupancy_grid_node" output="screen"
                args="-resolution 0.05">
            <remap from="map" to="occupancy_grid"/>
          </node>
        
          ...
        </launch>
        

        3. 移除Navigation2中的AMCL

        在Navigation2中,你可以通过修改navigation2_params.yaml文件或直接在launch文件中禁用AMCL。如果你使用的是navigation2_launch.xml,你可以移除或注释掉启动AMCL的节点。

        例如,在navigation2_launch.xml中:

        <!-- 注释掉或删除AMCL的启动 -->
        <!--
        <node name="amcl" pkg="nav2_amcl" exec="amcl" output="screen">
          ...
        </node>
        -->
        

        4.


        以上为生成回答,仅供参考~

        我是小伊,已接入ChatGpt,所有回复,仅供参考~

        1 条回复 最后回复 回复 引用 0
        • 3
          3104827606 @、捶你胸口
          最后由 编辑

          @捶你胸口 哥,请问你解决了吗,我配置后仿真没问题,移植到实体机器人后地图能加载,但是定位非常非常慢,并且会进行建图改变地图,希望能讨论以下

          1 条回复 最后回复 回复 引用 0
          • 第一个帖子
            最后一个帖子
          皖ICP备16016415号-7
          Powered by NodeBB | 鱼香ROS