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

    gmapping建图时小车位置不能实时更新

    已定时 已固定 已锁定 已移动 未解决
    Nav2
    gmapping rviz2
    2
    5
    543
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 2
      🥥
      最后由 编辑

      初始建图状态QQ截图20240613153335.png
      小车左转向之后QQ截图20240613153423.png
      左转向后直行一段距离QQ截图20240613153514.png
      小车只有ydlidar x3pro激光雷达,没有配置imu和里程计,是因为这个问题吗

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

        gmapping 是一个常用的激光SLAM(Simultaneous Localization and Mapping)算法,它用于机器人通过激光雷达数据来构建环境地图。在SLAM过程中,机器人的位置估计对于地图构建的准确性和一致性至关重要。

        如果在使用 gmapping 进行建图时,小车位置不能实时更新到初始建图状态,这可能是由于多种原因造成的。没有配置IMU(Inertial Measurement Unit)和里程计(Odometry)确实是一个可能的原因,因为它们提供了关于机器人运动的重要信息,有助于更精确地估计机器人在环境中的位置。

        具体来说,IMU提供加速度和角速度数据,可以用于估计机器人的姿态和速度变化;而里程计则提供基于轮子转动信息的相对位移估计。这些传感器数据能够辅助激光雷达数据进行SLAM过程,提高建图的精度和鲁棒性。

        在没有IMU和里程计的情况下,gmapping 只能依赖激光雷达数据来进行定位和建图。这通常意味着它只能利用连续的激光扫描数据之间的相对变化来推断机器人的运动。这种方法在环境特征丰富且机器人运动缓慢时可能表现良好,但在特征稀少或机器人运动较快时,可能会出现较大的定位误差。

        因此,如果小车在左转向或直行一段距离后,位置不能实时更新到初始建图状态,可能是由于缺乏IMU和里程计数据导致的定位误差累积。为了改善这种情况,你可以考虑添加IMU和里程计,或者优化现有的激光雷达数据处理和参数配置。

        此外,还有其他一些可能的原因和解决方法:

        1. 激光雷达配置:确保激光雷达正确安装并校准,以获得准确的扫描数据。
        2. 参数调整:尝试调整 gmapping 的参数,如激光扫描的最大和最小范围、粒子滤波器的参数等,以优化建图效果。
        3. 环境特征:确保建图环境中有足够的特征点,以便 gmapping 能够准确估计机器人的位置。
        4. 软件同步:确保激光雷达数据、IMU数据和里程计数据(如果可用)在时间上同步,以便正确地进行数据融合和定位估计。

        综上所述,虽然缺乏IMU和里程计可能是导致小车位置不能实时更新到初始建图状态的原因之一,但也可能存在其他因素。因此,建议综合考虑上述各种可能性,并进行相应的调整和优化。


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

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

        1 条回复 最后回复 回复 引用 0
        • 2 2172144091 将这个主题转为问答主题,在
        • 2
          🥥
          最后由 编辑

          平台是ubuntu20.04,ros2版本为foxy,使用树莓派4b作为开发板
          命令1
          ros2 launch ydlidar_ros2_driver test_gmapping_launch.py
          test_gmapping_launch.py:
          from launch import LaunchDescription
          from launch.substitutions import EnvironmentVariable
          import launch.actions
          import launch_ros.actions
          import os
          from ament_index_python.packages import get_package_share_directory

          def generate_launch_description():

          return LaunchDescription([
              launch_ros.actions.Node(
                  package='slam_gmapping', 
                  executable='slam_gmapping', 
                  output='screen', 
                  parameters=[os.path.join(get_package_share_directory("slam_gmapping"), "params", "slam_gmapping.yaml")]),
          ])
          

          命令2
          ros2 launch slam_gmapping gmapping_x3_launch.py
          gmapping_x3_launch.py:
          #!/usr/bin/env python3

          import os
          import launch
          from ament_index_python.packages import get_package_share_directory
          from launch import LaunchDescription
          from launch_ros.actions import Node
          from launch.actions import DeclareLaunchArgument
          from launch.actions import IncludeLaunchDescription

          def generate_launch_description():
          use_sim_time = launch.substitutions.LaunchConfiguration('use_sim_time', default='True')

          return LaunchDescription([
          
              Node(
                  package='slam_gmapping',
                  executable='slam_gmapping',
                  output='screen',
                  #parameters=[os.path.join(get_package_share_directory("slam_gmapping"), "params", "slam_gmapping.yaml")]
              ),
              
          ])
          

          命令3
          ros2 launch fishbot_bringup fishbot_bringup.launch.py
          fishbot_bringup.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():
          package_name = 'fishbot_description'
          urdf_name = "myboot.urdf"

          ld = LaunchDescription()
          pkg_share = FindPackageShare(package=package_name).find(package_name)
          urdf_model_path = os.path.join(pkg_share, f'urdf/{urdf_name}')
          
          robot_state_publisher_node = Node(
              package='robot_state_publisher',
              executable='robot_state_publisher',
              arguments=[urdf_model_path]
          )
          
          joint_state_publisher_node = Node(
              package='joint_state_publisher',
              executable='joint_state_publisher',
              name='joint_state_publisher',
              arguments=[urdf_model_path],
              output='screen',
          )
          
          fishbot_bringup_node = Node(
              package='fishbot_bringup',
              executable='fishbot_bringup',
              name='fishbot_bringup',
              output='screen',
          )
          
          ld.add_action(joint_state_publisher_node)
          ld.add_action(robot_state_publisher_node)
          ld.add_action(fishbot_bringup_node)
          
          return ld
          
          1 条回复 最后回复 回复 引用 0
          • 2
            🥥
            最后由 编辑

            urdf文件:myboot.urdf
            <?xml version="1.0"?>
            <robot name="smcar">

            <!-- Robot Footprint -->
            

            <link name="base_footprint"/>

            <joint name="base_joint" type="fixed">
            <parent link="base_footprint"/>
            <child link="base_link"/>
            <origin xyz="0.0 0.0 0.076" rpy="0 0 0"/>
            </joint>

            <!-- base link -->
            <link name="base_link">
            <visual>
            <geometry>
            <box size="0.2 0.14 0.1" />
            </geometry>
            <origin xyz="0 0 0.0" rpy="0 0 0"/>
            <material name="blue">
            <color rgba="0.1 0.1 1.0 0.5" />
            </material>
            </visual>
            </link>

            <!-- laser link -->
            <link name="laser">
            <visual>
            <origin xyz="0 0 0" rpy="0 0 0"/>
            <geometry>
            <cylinder length="0.02" radius="0.02"/>
            </geometry>
            <material name="black">
            <color rgba="0.0 0.0 0.0 0.5" />
            </material>
            </visual>
            </link>

            <!-- laser joint -->
            <joint name="laser_joint" type="fixed">
            <parent link="base_link" />
            <child link="laser" />
            <origin xyz="0 0 0.075" />
            </joint>

            <link name="imu_link">
            <visual>
            <origin xyz="0 0 0.0" rpy="0 0 0"/>
            <geometry>
            <box size="0.02 0.02 0.02"/>
            </geometry>
            </visual>
            </link>

            <!-- imu joint -->
            <joint name="imu_joint" type="fixed">
            <parent link="base_link" />
            <child link="imu_link" />
            <origin xyz="0 0 0.02" />
            </joint>

            <link name="lf_wheel_link">
            <visual>
            <origin xyz="0 0 0" rpy="1.57079 0 0"/>
            <geometry>
            <cylinder length="0.04" radius="0.032"/>
            </geometry>
            <material name="black">
            <color rgba="0.0 0.0 0.0 0.5" />
            </material>
            </visual>
            </link>

            <joint name="lf_wheel_joint" type="continuous">
            <parent link="base_link" />
            <child link="lf_wheel_link" />
            <origin xyz="0.04 0.07 -0.06" />
            <axis xyz="0 1 0" />
            </joint>

            <link name="rf_wheel_link">
            <visual>
            <origin xyz="0 0 0" rpy="1.57079 0 0"/>
            <geometry>
            <cylinder length="0.04" radius="0.032"/>
            </geometry>
            <material name="black">
            <color rgba="0.0 0.0 0.0 0.5" />
            </material>
            </visual>
            </link>

            <joint name="rf_wheel_joint" type="continuous">
            <parent link="base_link" />
            <child link="rf_wheel_link" />
            <origin xyz="0.04 -0.07 -0.06" />
            <axis xyz="0 1 0" />
            </joint>

            <link name="lb_wheel_link">
            <visual>
            <origin xyz="0 0 0" rpy="1.57079 0 0"/>
            <geometry>
            <cylinder length="0.04" radius="0.032"/>
            </geometry>
            <material name="black">
            <color rgba="0.0 0.0 0.0 0.5" />
            </material>
            </visual>
            </link>

            <joint name="lb_wheel_joint" type="continuous">
            <parent link="base_link" />
            <child link="lb_wheel_link" />
            <origin xyz="-0.04 0.07 -0.06" />
            <axis xyz="0 1 0" />
            </joint>

            <link name="rb_wheel_link">
            <visual>
            <origin xyz="0 0 0" rpy="1.57079 0 0"/>
            <geometry>
            <cylinder length="0.04" radius="0.032"/>
            </geometry>
            <material name="black">
            <color rgba="0.0 0.0 0.0 0.5" />
            </material>
            </visual>
            </link>

            <joint name="rb_wheel_joint" type="continuous">
            <parent link="base_link" />
            <child link="rb_wheel_link" />
            <origin xyz="-0.04 -0.07 -0.06" />
            <axis xyz="0 1 0" />
            </joint>

            </robot>

            1 条回复 最后回复 回复 引用 0
            • 2
              🥥
              最后由 编辑

              现在连建图也不行了
              [slam_gmapping-1] update frame 0
              [slam_gmapping-1] update ld=0 ad=0
              [slam_gmapping-1] m_count 0
              [slam_gmapping-1] Registering First Scan
              [slam_gmapping-1] [INFO] [1718270259.029730073] [slam_gmapping]: Initialization complete
              [slam_gmapping-1] Laser Pose= 0.1 0.2 0
              [slam_gmapping-1] update frame 12
              [slam_gmapping-1] update ld=0 ad=0
              [slam_gmapping-1] m_count 1
              [slam_gmapping-1] Laser Pose= 0.1 0.2 0
              [slam_gmapping-1] Average Scan Matching Score=319.326
              [slam_gmapping-1] neff= 30
              [slam_gmapping-1] Registering Scans:Done
              [slam_gmapping-1] update frame 27
              [slam_gmapping-1] update ld=0 ad=0
              [slam_gmapping-1] m_count 2
              [slam_gmapping-1] Laser Pose= 0.1 0.2 0
              [slam_gmapping-1] Average Scan Matching Score=323.649
              [slam_gmapping-1] neff= 30
              [slam_gmapping-1] Registering Scans:Done

              卡住没动没有完成更新
              QQ截图20240613172058.png

              1 条回复 最后回复 回复 引用 0
              • 小鱼小 小鱼 从 中的 ROS2机器人开发:从入门到实践 移动了该主题
              • 第一个帖子
                最后一个帖子
              皖ICP备16016415号-7
              Powered by NodeBB | 鱼香ROS