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

    有偿求救,ros2 cartographer建图失败问题

    已定时 已固定 已锁定 已移动
    ROS 2相关问题
    cartographer建图 实机操作
    3
    11
    738
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • C
      cheesecaek
      最后由 编辑

      求救各位,我这个问题一直没在网上找到解决办法
      我机器人的配置是ros2 humble,配备realsense D435i相机,有深度图、点云图、bgr图的topic,现在在用cartographer建图,但是出现了以下问题
      a99608b9-bac7-41de-b237-2c18f68c7f6a-519868cbba3446fd94b48ee087bc3838_720.png
      配置细节为:
      launch.py文件如下
      import os
      from launch import LaunchDescription
      from launch.substitutions import LaunchConfiguration
      from launch_ros.actions import Node
      from launch_ros.substitutions import FindPackageShare

      def generate_launch_description():
      # 定位到功能包的地址
      # urdf_file_path = os.path.join(
      # get_package_share_directory('birdy_cartographer'),
      # 'urdf',
      # '<mini_ostrich>.urdf'
      # )

      # robot_description = Command(['xacro', '/home/robot/face_ws/src/birdy_cartographer/urdf/mini_ostrich.urdf'])
      pkg_share = FindPackageShare(package='birdy_cartographer').find('birdy_cartographer')
      
      #=====================运行节点需要的配置=======================================================================
      # 是否使用仿真时间,我们用gazebo,这里设置成true
      use_sim_time = LaunchConfiguration('use_sim_time', default='false')
      # 地图的分辨率
      resolution = LaunchConfiguration('resolution', default='0.05')
      # 地图的发布周期
      publish_period_sec = LaunchConfiguration('publish_period_sec', default='1.0')
      # 配置文件夹路径
      configuration_directory = LaunchConfiguration('configuration_directory',default= os.path.join(pkg_share, 'config') )
      # 配置文件
      configuration_basename = LaunchConfiguration('configuration_basename', default='birdy_2d.lua')
      
      
      #=====================声明三个节点,cartographer/occupancy_grid_node/rviz_node=================================
      cartographer_node = Node(
          package='cartographer_ros',
          executable='cartographer_node',
          name='cartographer_node',
          output='screen',
          parameters=[{'use_sim_time': False}],
          arguments=['-configuration_directory', '/home/robot/face_ws/src/birdy_cartographer/config',
                     '-configuration_basename', 'birdy_2d.lua'],
          remappings=[
              ('points', '/realsense_camera_node/sn036222070655/xyz/pointcloud'),
              ('imu', '/imu'),
              ('odom', '/odom')],
          )
      
      occupancy_grid_node = Node(
          package='cartographer_ros',
          executable='cartographer_occupancy_grid_node',
          name='occupancy_grid_node',
          output='screen',
          parameters=[{'use_sim_time': False}],
          arguments=['-resolution', '0.05', '-publish_period_sec', '1'])
      
      
      rviz_node = Node(
          package='rviz2',
          executable='rviz2',
          name='rviz2',
          # arguments=['-d', rviz_config_dir],
          parameters=[{'use_sim_time': use_sim_time}],
          output='screen')
      
      #===============================================定义启动文件========================================================
      ld = LaunchDescription()
      ld.add_action(cartographer_node)
      ld.add_action(occupancy_grid_node)
      ld.add_action(rviz_node)
      
      return ld
      

      lua文件如下:
      -- 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"

      options = {
      map_builder = MAP_BUILDER,
      trajectory_builder = TRAJECTORY_BUILDER,
      map_frame = "map",
      tracking_frame = "robot_base_frame_defined",
      published_frame = "sn036222070655_color_optical_frame",
      odom_frame = "odom",
      provide_odom_frame = false,
      publish_frame_projected_to_2d = false,
      use_pose_extrapolator = true,
      use_odometry = false,
      use_nav_sat = false,
      use_landmarks = false,
      num_laser_scans = 0,
      num_multi_echo_laser_scans = 1,
      num_subdivisions_per_laser_scan = 10,
      num_point_clouds = 1,
      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.num_accumulated_range_data = 10
      TRAJECTORY_BUILDER_2D.use_imu_data = true
      return options

      launch后topic列表如下:
      robot@robot-minipc:~/face_ws$ ros2 topic list
      /clicked_point
      /constraint_list
      /echoes
      /goal_pose
      /imu
      /initialpose
      /joy
      /joy/set_feedback
      /landmark_poses_list
      /map
      /odom
      /parameter_events
      /points2
      /realsense_camera_node/description
      /realsense_camera_node/sn036222070655/camera_info
      /realsense_camera_node/sn036222070655/color/bgr/image_raw
      /realsense_camera_node/sn036222070655/depth/u16/image_raw
      /realsense_camera_node/sn036222070655/xyz/pointcloud
      /robot_grf_x
      /robot_state
      /rosout
      /scan_matched_points2
      /submap_list
      /system_monitor_defined
      /tf
      /tf_static
      /trajectory_node_list
      /vel_cmd
      其中/map 没有输出和订阅者,仅有一个发布者;/odom 没有订阅者,有输出;/imu有订阅者,有输出

      tf树如下
      732f66b8-b447-4e71-963e-9a091abaeb86-image.png
      请问我该怎么办,能帮忙解决的话商量有偿的事情,感谢各位!

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

        针对您使用ROS2 Humble和RealSense D435i相机配合Cartographer进行建图时遇到的问题,这里有几个可能的解决方案和检查步骤。由于您提到在网上没有找到解决办法,我们可以从配置和日志分析入手,逐步排查问题。

        1. 检查TF树

        TF树是机器人系统中非常重要的一个部分,它负责不同坐标系之间的转换。您的TF树看起来需要仔细检查以下几点:

        • 确保map到odom和odom到base_link(或您的机器人基础框架)的转换存在。通常,Cartographer会发布map到odom的转换,而您的机器人应该发布odom到基础框架的转换(可能是通过里程计或轮式编码器)。
        • 检查published_frame在lua配置文件中是否正确。您设置的是sn036222070655_color_optical_frame,这通常是颜色相机的光学框架。如果Cartographer依赖于激光雷达或深度相机的框架,可能需要调整为深度相机的框架(如/realsense_camera_node/sn036222070655/xyz/optical_frame,具体取决于您的相机驱动如何命名这些框架)。

        2. 验证输入数据

        • 确保点云数据(/realsense_camera_node/sn036222070655/xyz/pointcloud)是有效的。您可以使用ros2 topic echo来查看点云数据是否正常发布。
        • 检查IMU数据(/imu)。确保IMU数据被正确发布且格式符合Cartographer的要求。

        3. 调试Cartographer

        • 查看Cartographer的日志。启动Cartographer节点后,使用ros2 node info和ros2 topic list -v查看节点的状态和发布的主题。同时,检查终端中的输出和错误消息。
        • 尝试简化配置。开始时,使用Cartographer的默认配置,逐步添加和修改参数,以确定哪些配置可能导致问题。
        • 使用RViz可视化。确保RViz正确配置以显示地图、机器人位置和其他相关TF信息。

        4. 检查参数配置

        • use_sim_time:如果您不是在仿真环境中运行,确保所有节点的use_sim_time都设置为false。
        • 重映射:在launch.py中,您已经为重映射设置了参数,但请确保这些重映射正确无误,并且与您的TF树和主题命名一致。

        5. 硬件和驱动

        • 确保RealSense驱动正常工作。使用realsense-viewer或其他工具验证相机和IMU数据是否按预期工作。

        6. 尝试不同的配置和版本

        • 尝试使用不同的Cartographer配置。有时,配置中的小更改(如增加子图数量或调整扫描匹配参数)可以显著提高性能。
        • 考虑使用不同版本的ROS2或Cartographer。虽然这通常不是首选方法,但有时软件更新可能包含重要的修复。

        有偿帮助

        如果您在尝试上述步骤后仍然遇到问题,并且愿意寻求有偿帮助,可以考虑联系专业的ROS开发者或咨询机构。在联系他们之前,准备好详细的日志、配置和您的硬件信息,这将有助于他们更快地诊断问题。同时,确保您有权分享这些信息,并遵守任何相关的隐私和许可协议。


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

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

        C 3 2 条回复 最后回复 回复 引用 0
        • C
          cheesecaek @小伊
          最后由 编辑

          @小伊 imu和点云图数据都是有效的
          odom到基础框架的转换应该是在哪里发布呢,是/odom里的一部分信息吗

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

            IMU(惯性测量单元)和点云图数据在定位与导航系统中都是至关重要的。关于odom(里程计)到基础框架的转换以及发布位置的问题,这通常涉及到SLAM(即时定位与地图构建)系统或相关的机器人导航系统。

            首先,IMU数据提供了关于设备运动(包括加速度和角速度)的实时信息,这对于确定设备的当前位置和姿态至关重要。在SLAM系统中,IMU数据常被用于辅助或增强视觉或激光数据的处理,以提高定位的准确性和鲁棒性。

            点云图数据则是由激光扫描仪或深度相机等设备生成的,它表示了环境中物体的三维形状和位置。在SLAM系统中,点云图数据被用于构建环境地图,并帮助机器人在未知环境中进行导航。

            至于odom到基础框架的转换,这通常是在SLAM系统的后端处理中完成的。后端处理负责整合来自不同传感器(如IMU和激光扫描仪)的数据,以估计机器人的全局位置和姿态。在这个过程中,odom信息(表示机器人相对于起始位置的移动)被转换为相对于基础框架(通常是全局坐标系)的位置和姿态。

            关于odom信息的发布位置,这取决于具体的SLAM系统实现和所使用的软件框架。在一些系统中,odom信息可能被发布到一个特定的ROS(机器人操作系统)主题上,如/odom。然而,这并不是一个固定的规则,因为不同的系统和框架可能有不同的命名约定和数据结构。

            因此,要确定odom到基础框架的转换是在哪里发布的,以及它是否是/odom主题的一部分信息,你需要查阅你所使用的SLAM系统或机器人导航系统的文档。这些文档通常会提供关于数据发布、接收和处理的详细信息。

            总的来说,IMU和点云图数据在SLAM系统和机器人导航中都扮演着重要角色。它们共同为机器人提供了关于其环境和自身运动状态的准确信息,从而实现了精确的定位和导航。而odom到基础框架的转换则是这些系统中的一个关键步骤,它确保了机器人能够在全局坐标系中准确地定位自己。


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

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

            C 1 条回复 最后回复 回复 引用 0
            • C
              cheesecaek @小伊
              最后由 编辑

              @小伊 我现在添加了/scan
              但是出现了这样的错误
              [cartographer_node-1] [WARN] [1731389704.922721691] [cartographer logger]: W1112 13:35:04.000000 9809 sensor_bridge.cpp:211] Ignored subdivision of a LaserScan message from sensor scan because previous subdivision time 621355968017313897 is not before current subdivision time 621355968017313897

              这是/scan信息
              header:
              stamp:
              sec: 1
              nanosec: 731389761
              frame_id: sn036222070655_color_optical_frame
              angle_min: -3.1415927410125732
              angle_max: 3.1415927410125732
              angle_increment: 0.01745329238474369
              time_increment: 0.0
              scan_time: 0.03333333507180214
              range_min: 0.0
              range_max: .inf
              ranges:

              • 0.060172129422426224
              • 0.060187626630067825
              • 0.16551685333251953
              • 0.17524026334285736
              • 0.17530372738838196
              • 0.17934346199035645
              • .inf
              • .inf
              • .inf
              • .inf
              • .inf
              • .inf
              • .inf
              • .inf
              • .inf
              • .inf
              • 0.05927778407931328
              • 0.016912968829274178
              • 0.016490917652845383
              • 0.01663563959300518
              • 0.015802869573235512
              • 0.015388795174658298
              • 0.0145117761567235
              • 0.014104803092777729
              • 0.01370001956820488
              • 0.013886692933738232
              • 0.014478813856840134
              • 0.01408478245139122
              • 0.013693698681890965
              • 0.01330582145601511
              • 0.012921440415084362
              • 0.013148977421224117
              • 0.013758635148406029
              • 0.01338726095855236
              • 0.013635726645588875
              • 0.014252007938921452
              • 0.01327565312385559
              • 0.013540619984269142
              • 0.01478188019245863
              • 0.01381466444581747
              • 0.01409725658595562
              • 0.014387893490493298
              • 0.01569528691470623
              • 0.014686097390949726
              • 0.015047354623675346
              • 0.015988286584615707
              • 1.256740927696228
              • 1.236456036567688
              • 1.2584118843078613
              • 1.3163059949874878
              • 1.3377922773361206
              • 1.3172674179077148
              • 1.3428338766098022
              • 1.3686951398849487
              • 1.3494243621826172
              • 1.3588370084762573
              • 1.341367483139038
              • 1.3678548336029053
              • 1.3244167566299438
              • 1.3933404684066772
              • 1.3438928127288818
              • 1.3443493843078613
              • 1.266227126121521
              • 1.2149559259414673
              • 1.0956717729568481
              • 1.1414600610733032
              • 1.1310813426971436
              • 0.9774243235588074
              • 1.0198127031326294
              • 0.9605922698974609
              • 1.0036917924880981
              • 0.9597606062889099
              • 0.8668673038482666
              • 0.9069702625274658
              • 0.9116668701171875
              • 0.8550470471382141
              • 0.8989764451980591
              • 0.8451510667800903
              • 0.8862372636795044
              • 0.8610127568244934
              • 0.9344863891601562
              • 0.854889988899231
              • 0.8918543457984924
              • 0.9670906662940979
              • 0.9246839284896851
              • 0.9990550875663757
              • 1.1380897760391235
              • 0.9220139980316162
              • .inf
              • .inf
              • .inf
              • .inf
              • .inf
              • .inf
              • .inf
              • .inf
              • .inf
              • .inf
              • .inf
              • .inf
              • .inf
              • .inf
              • .inf
              • .inf
              • .inf
              • .inf
              • .inf
              • .inf
              • .inf
              • .inf
              • .inf
              • .inf
              • .inf
              • .inf
              • .inf
              • .inf
              • .inf
              • .inf
              • .inf
              • .inf
              • .inf
              • .inf
              • 0.10156688839197159
              • 0.09941650182008743
              • 0.09989584237337112
              • .inf
              • .inf
              • .inf
              • '...'
                intensities: []

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

                错误信息显示Cartographer(一个用于机器人SLAM的库)在处理来自/scan话题的激光扫描数据时遇到了问题。具体来说,错误是关于激光扫描消息的细分时间戳,即Cartographer期望每个新的扫描数据的时间戳要晚于前一个数据的时间戳,但在这个情况下,时间戳没有正确递增。

                错误分析

                错误消息:

                [cartographer_node-1] [WARN] [1731389704.922721691] [cartographer logger]: W1112 13:35:04.000000  9809 sensor_bridge.cpp:211] Ignored subdivision of a LaserScan message from sensor scan because previous subdivision time 621355968017313897 is not before current subdivision time 621355968017313897
                

                这表明Cartographer试图处理一个激光扫描消息,但发现该消息的时间戳(或细分时间)与上一个消息的时间戳相同,这是不符合预期的。这可能是由于多种原因造成的,包括但不限于:

                1. 时间戳未正确更新:发送/scan消息的系统或节点可能没有正确更新时间戳。
                2. 数据发送频率:如果/scan数据的发送频率非常低,或者由于某种原因暂停发送,然后突然恢复,可能会导致时间戳未正确递增。
                3. 系统时间问题:系统时间的不一致或错误也可能导致此类问题。

                解决步骤

                1. 检查时间戳:

                  • 确保每个/scan消息的时间戳(header.stamp)是递增的。你可以通过订阅/scan话题并打印时间戳来检查这一点。
                2. 检查数据发送频率:

                  • 确认激光扫描数据的发送频率。如果频率非常低,尝试调整以提供更频繁的数据。
                3. 检查系统时间:

                  • 确保运行Cartographer和发布/scan消息的节点的系统时间是同步的。
                4. 查看Cartographer配置:

                  • 检查Cartographer的配置文件,确保关于激光扫描的处理设置是正确的。特别是与时间相关的设置,如tracking_from_tracking_odometry_frame、tracking_frame等。
                5. 调试和日志:

                  • 增加日志记录的详细级别,以便更深入地了解问题发生的上下文。
                  • 使用ROS的工具如rostopic echo和rqt_plot来监控/scan话题的数据和频率。
                6. 软件更新和兼容性:

                  • 确保你使用的Cartographer版本与ROS发行版兼容。
                  • 查看是否有关于此问题的已知bug或修复。

                通过上述步骤,你应该能够诊断并解决导致这个警告的问题。如果问题仍然存在,可能需要更深入地检查Cartographer的源代码或寻求社区的帮助。


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

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

                C 1 条回复 最后回复 回复 引用 0
                • C
                  cheesecaek @小伊
                  最后由 编辑

                  @小伊 发布的时间戳不递增是为什么呢

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

                    发布的时间戳不递增可能由多种原因造成,以下是一些可能的原因:

                    1. 时间戳生成机制问题:

                      • 在某些系统或应用中,时间戳的生成可能依赖于特定的算法或逻辑。如果这些算法或逻辑存在缺陷或配置不当,可能导致生成的时间戳不递增。
                      • 例如,在某些版本控制系统中(如Git),时间戳可能不会随着每次提交而递增,而是仅在文件内容发生变化时更新。
                    2. 系统时间同步问题:

                      • 如果系统时间没有正确同步,例如由于网络时间协议(NTP)故障或手动更改系统时间,可能导致生成的时间戳不递增。
                      • 在分布式系统中,如果各个节点的时间没有同步,也可能导致时间戳不一致。
                    3. 并发操作导致的时间戳冲突:

                      • 在高并发环境中,多个操作可能同时尝试生成时间戳。如果生成时间戳的机制不够精细,可能会导致多个操作生成相同的时间戳。
                      • 这种情况在数据库操作中尤为常见,特别是当多个事务在极短的时间内启动时。
                    4. 缓存机制导致的时间戳未更新:

                      • 在某些应用或系统中,为了提高性能,可能会采用缓存机制来存储时间戳。如果缓存没有正确更新或清除,可能导致显示的时间戳与实际时间不符。
                      • 例如,在高德地图的家人地图功能中,如果缓存机制导致时间戳没有更新,即使有新的信息,也不会显示最新的时间戳。
                    5. 人为干预或错误:

                      • 人为更改时间戳或系统配置错误也可能导致时间戳不递增。
                      • 例如,在Laravel框架中,如果模型中没有设置时间戳字段或数据库表中缺少时间戳字段,或者手动更新了时间戳字段的值,都可能导致时间戳不自动更新。
                    6. 时间戳精度问题:

                      • 如果时间戳的精度不够高(例如只精确到秒),在极短的时间内(如毫秒或微秒级)可能无法区分不同的时间戳。
                      • 这种情况在数据库操作中尤为明显,特别是当使用微秒级时间戳时,可能存在多个记录具有相同时间戳的情况。

                    为了解决这个问题,可以采取以下措施:

                    • 确保系统时间正确同步,避免由于时间同步问题导致的时间戳错误。
                    • 在高并发环境中,采用更精细的时间戳生成机制,如使用毫秒级或更高精度的时间戳。
                    • 定期检查并更新缓存机制,确保缓存中的时间戳是最新的。
                    • 在应用中正确配置时间戳字段和更新逻辑,避免人为干预或错误导致的时间戳问题。
                    • 如果需要更高的时间戳精度,可以考虑使用更高精度的时间戳类型或算法。

                    总之,发布的时间戳不递增可能由多种原因造成,需要根据具体情况进行分析和解决。


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

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

                    C 1 条回复 最后回复 回复 引用 0
                    • C
                      cheesecaek @小伊
                      最后由 编辑

                      @小伊 请告诉我timestamp中每个变量的含义

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

                        在数据库、编程和计算机科学中,"timestamp"(时间戳)是一个表示特定日期和时间点的值。时间戳通常以数字或字符串的形式出现,包含多个部分,每个部分代表不同的时间单位。虽然时间戳的具体格式可能因系统和应用程序而异,但以下是一些常见的时间戳变量及其含义:

                        1. 年(Year):

                          • 表示事件发生的具体年份。例如,2023。
                        2. 月(Month):

                          • 表示事件发生的月份。通常,月份用数字表示,从1(一月)到12(十二月)。例如,03 表示三月。
                        3. 日(Day):

                          • 表示事件发生在该月的哪一天。例如,15 表示十五日。
                        4. 时(Hour):

                          • 表示事件发生的时间点的小时数。通常使用24小时制(00到23)。例如,14 表示下午2点。
                        5. 分(Minute):

                          • 表示事件发生的时间点的分钟数。例如,30 表示30分钟。
                        6. 秒(Second):

                          • 表示事件发生的时间点的秒数。例如,45 表示45秒。
                        7. 毫秒(Millisecond)(可选):

                          • 表示事件发生的时间点的毫秒数。通常用于需要更高精度的时间记录。例如,123 表示123毫秒。
                        8. 微秒(Microsecond)(可选):

                          • 表示事件发生的时间点的微秒数。进一步提高了时间精度。例如,456789 表示456,789微秒。
                        9. 纳秒(Nanosecond)(可选):

                          • 表示事件发生的时间点的纳秒数。提供了极高的时间精度。例如,123456789 表示123,456,789纳秒。
                        10. 时区(Timezone)(可选):

                          • 表示事件发生时的地理位置时区。例如,UTC(协调世界时),PST(太平洋标准时间),CET(中欧时间)等。
                        11. 日期时间偏移(Date-Time Offset)(可选):

                          • 以小时和分钟的形式表示相对于UTC的时间偏移。例如,+02:00 表示东二区时间。

                        一个典型的时间戳例子可能是 "2023-03-15T14:30:45.123Z",其中:

                        • 2023 是年
                        • 03 是月
                        • 15 是日
                        • T 是日期和时间的分隔符(ISO 8601格式)
                        • 14 是小时
                        • 30 是分钟
                        • 45 是秒
                        • .123 是毫秒
                        • Z 表示这是UTC时间(零时区)

                        注意,时间戳的具体格式和包含的信息取决于使用的系统和标准。例如,UNIX时间戳通常只表示自1970年1月1日以来的秒数或毫秒数,不包含日期和时间的各个部分。


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

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

                        1 条回复 最后回复 回复 引用 0
                        • 3
                          318497032 @小伊
                          最后由 编辑

                          @小伊 通常,Cartographer会发布map到odom的转换,而您的机器人应该发布odom到基础框架的转换(可能是通过里程计或轮式编码器) 我想把odom改为odom_combined应该修改cartographer的那些文件 我想要把它和nav2融合起来 应为我所有的nav2都是odom_combined已经配置好了 现在是配置cartographer

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