PikaTang 2026-04-14 18:59 采纳率: 0%
浏览 8

ROS2和激光雷达MID360建图导航

我的系统是ubuntu22.04,ROS2 humble,已经有搭建好的实物小车,我想实现激光雷达的实时建图和超声波的避障,地图可以再次导入使用。但是现在运行以下代码只能得到点云图,而且还无法保存。想知道如何解决,或者给我一个思路也可以v ^ v

#终端1--运行 FAST-LIO
cd /lidar/ros2_ws
source install/setup.bash
ros2 launch fast_lio mapping.launch.py config_file:=mid360.yaml

#终端2--运行雷达驱动
cd /lidar/ros2_ws
source install/setup.bash
ros2 launch livox_ros_driver2 msg_MID360_launch.py

img

  • 写回答

3条回答 默认 最新

  • 檀越@新空间 2026-04-14 19:00
    关注

    晚上好🌙🌙🌙
    本答案参考通义千问

    你目前的系统是 Ubuntu 22.04,使用的是 ROS2 Humble,并且已经搭建好了实物小车。目标是实现 激光雷达(MID360)的实时建图与导航,并结合 超声波传感器进行避障,同时能够保存地图并在后续使用。

    你当前的问题是:只能得到点云图,无法保存,并且没有实现真正的建图和导航功能。下面我将从以下几个方面为你提供详细解决方案:


    一、问题分析

    你目前运行了 FAST-LIOLivox 雷达驱动,但只得到了 点云数据,并没有生成地图。这说明你可能混淆了 点云可视化SLAM建图 的概念。

    • 点云图 是原始的激光雷达数据,不包含环境信息。
    • 建图 是通过 SLAM 算法(如 FAST-LIOHector SLAM)对点云进行处理,生成地图。

    二、解决思路

    1. 明确你的目标

    你需要完成以下三个核心任务:

    • 激光雷达数据采集(已实现)
    • 基于激光雷达的实时建图(需要调整配置)
    • 地图保存与重新加载
    • 超声波避障模块(可选)

    三、具体解决方案

    1. 确保 FAST-LIO 正确运行并生成地图

    1.1 修改 fast_lio 的配置文件

    你使用的配置文件是 mid360.yaml,请确认其是否正确支持 MID360 激光雷达。

    # 示例 mid360.yaml 内容
    # 参考官方文档或示例配置
    

    如果配置文件中没有指定地图输出路径,请添加如下内容:

    map:
      map_topic: "/slam/map"
      save_map: true
      map_file: "/path/to/save/map.pgm"
    

    1.2 保存地图

    在运行 ros2 launch fast_lio mapping.launch.py 后,可以通过以下命令保存地图:

    ros2 topic echo /slam/map > map_data.txt
    

    或者使用工具如 map_server 来保存为 .pgm.yaml 格式:

    ros2 run nav2_map_server map_saver_cli -f /path/to/save/map
    

    注意: 如果你使用的是 FAST-LIO,它本身不直接支持保存地图,建议改用 Hector SLAMcartographer 进行更完善的建图。


    2. 使用 Hector SLAM 实现建图

    如果你发现 FAST-LIO 不适合你的需求,可以尝试使用 Hector SLAM,它更适合室内建图。

    2.1 安装 Hector SLAM

    sudo apt install ros-humble-hector-slam
    

    2.2 修改 launch 文件

    创建一个 launch 文件,例如 hector_slam_launch.py

    from launch import LaunchDescription
    from launch_ros.actions import Node
    
    def generate_launch_description():
        return LaunchDescription([
            Node(
                package='hector_slam',
                executable='hector_slam',
                name='hector_slam',
                output='screen',
                parameters=[
                    {'use_sim_time': False},
                    {'scan_topic': '/livox/points'},
                    {'map_frame': 'map', 'base_frame': 'base_link'}
                ]
            ),
            Node(
                package='rviz2',
                executable='rviz2',
                name='rviz',
                arguments=['-d', '/path/to/your/rviz_config.rviz']
            )
        ])
    

    2.3 保存地图

    运行后,在 RVIZ 中查看地图,然后使用以下命令保存地图:

    ros2 run nav2_map_server map_saver_cli -f /path/to/save/map
    

    3. 超声波避障模块(可选)

    你可以使用 Ultrasonic Sensor 数据进行避障,结合 ROS2 的 move_basenavigation stack 实现自动避障。

    3.1 示例代码(Python)

    import rclpy
    from rclpy.node import Node
    from sensor_msgs.msg import Range
    
    class ObstacleAvoidance(Node):
        def __init__(self):
            super().__init__('obstacle_avoidance')
            self.subscription = self.create_subscription(
                Range,
                '/ultrasonic',
                self.listener_callback,
                10)
            self.publisher = self.create_publisher(String, '/cmd_vel', 10)
    
        def listener_callback(self, msg):
            if msg.range < 0.5:  # 如果距离小于0.5米
                self.get_logger().info("Obstacle detected! Stopping...")
                # 发送停止指令
                self.publisher.publish("stop")
            else:
                self.get_logger().info("No obstacle. Moving forward.")
                # 发送前进指令
                self.publisher.publish("forward")
    
    def main(args=None):
        rclpy.init(args=args)
        node = ObstacleAvoidance()
        rclpy.spin(node)
        node.destroy_node()
        rclpy.shutdown()
    
    if __name__ == '__main__':
        main()
    

    4. 地图导入与重用

    要再次使用地图,可以使用 nav2_map_server 加载 .pgm.yaml 文件:

    ros2 run nav2_map_server map_server --ros-args -p use_sim_time:=false -p map:=/path/to/map.yaml
    

    四、总结

    | 任务 | 解决方案 | |------|----------| | 实时建图 | 使用 Hector SLAMFAST-LIO,确保配置正确 | | 保存地图 | 使用 map_saver_cli 命令保存为 .pgm.yaml | | 导入地图 | 使用 nav2_map_server 加载地图 | | 超声波避障 | 使用 Range 消息监听距离,控制小车动作 |


    五、推荐流程

    1. 启动雷达驱动livox_ros_driver2
    2. 启动 SLAM 模块hector_slamfast_lio
    3. 在 RVIZ 中观察地图
    4. 保存地图
    5. 导入地图用于导航

    如果你希望我帮你修改或编写完整的 launch 文件、配置文件或避障代码,请告诉我,我可以进一步协助!😊

    评论

报告相同问题?

问题事件

  • 创建了问题 4月14日