type
status
date
slug
summary
tags
category
icon
password

开放场景下的机器人语义导航方法学习笔记——模拟篇

实验说明


  1. 终端 1 (AI 服务):切换到qwen_2b的Conda环境保持 qwen_server.py 运行。
      • 使用 curl 命令发送测试 JSON:curl -X POST http://localhost:8000/parse_command -d '{"text": "去厨房"}'
      • 预期结果:返回 {"target": "kitchen"}
  1. 终端 2 (语义节点):在 ROS 2 环境下启动语义导航节点:
      • 关键验证点:观察终端是否输出“成功加载房间信息”以及列出的房间列表(如 kitchen, bedroom),确保 rooms.yaml 读取正确。
  1. 终端 3 (导航堆栈):启动导航功能:
      • 注意:在 Rviz 中需手动进行“2D Pose Estimate”(初始位姿校准),直到机器人周围出现绿色的定位粒子。
  1. 终端 5 (发布指令):通过话题发送测试指令:
      • 观测Rviz和Gazebo,机器人移动至目标点,仿真实验完成。
 

环境配置


1.清理环境变量

  • 执行 gedit ~/.bashrc
  • 注释掉(在开头加 # 所有关于 TURTLEBOT3GAZEBO_MODEL_PATH 以及 LDS_MODEL 的行。
  • 保存并退出。
  • 【非常重要】:在终端运行 source ~/.bashrc,或者直接关闭当前所有终端窗口重新打开。环境变量只有在新的 Shell 会话中才会彻底刷新。
colcon build --symlink-install # 创建符号链接,便于开发
source install/setup.bash
 

2.资源同步

  • 问题:launch.py 文件找不到。
  • 解决方案:在 CMakeLists.txtsetup.py 中添加 install 指令,并重新 colcon build
  • 建议:launch文件统一放在一个文件夹下。
 

3.虚拟环境

  • 进入虚拟环境:conda activate
  • 查看虚拟环境列表: conda env list
  • 进入特定虚拟环境:conda activate qwen_2b
  • 推出虚拟环境:conda deactivate
 

地图篇


1.地图保存指令

ros2 run nav2_map_server map_saver_cli -f <地图路径/名称>
成功后,会生成两个文件:
  • ~/my_map.pgm:地图的灰度图像文件。
  • ~/my_map.yaml:地图的配置文件(包含分辨率、原点、阈值等)。
 

2.地图加载

 

3.清除代价地图残留

  • 全局代价地图
    • 局部代价地图
       

      4.获取语义地图

      • 启动仿真和导航
      • 利用rviz在终端查看坐标
        • 使用Nav2导航,会出现信息如下,可以知道起点和终点的坐标
      • 编写yaml文件
         
         

        模型篇


        1.机器人模型显示错误(RViz 里的 TurtleBot3 干扰)

        • 现象:RViz 中本应显示的 WPR 机器人变成了一个圆盘形的 TurtleBot3,终端出现重名节点警告。
        • 根本原因:
            1. 系统环境变量中残留了 TURTLEBOT3_MODEL
            1. Nav2 的启动脚本默认会启动一个发布 TurtleBot3 模型的 robot_state_publisher
        • 解决方案:
          • 代码级:在 Launch 文件中给 navigation_cmd 传入参数 'use_robot_state_pub': 'False'
          • 架构级:手动解析 .model 文件并启动一个自定义名称(如 wpr_transformer)的节点来发布正确的机器人描述。
          • 环境级:运行前执行 unset TURTLEBOT3_MODEL 彻底清理变量。
         

        2.模型文件定位与识别(.model vs .urdf)

        • 现象:找不到 .urdf 文件,find 命令失效。
        • 根本原因wpr_simulation2 包使用了非标准的 .model 后缀名,但其内部格式依然兼容 URDF/Xacro。
        • 解决方案
          • 通过 greplsmodels 目录下精确定位。
          • 在 Python 脚本中使用 xacro.process_doc() 来强制解析 .model 文件。
         

        传感器


        1.话题名称不匹配(Remapping 陷阱)

        • 现象:脚本运行后没报错但没画面。
        • 根本原因:.model 文件内部对话题做了 remapping(重定向),导致实际发布的名字和预想的名字(如 qhd/image_color)不符。
        • 解决方案:
          • 使用 ros2 topic list | grep image 寻找实时生成的话题名。
          • 最终锁定有效话题为 /kinect2/qhd/image_raw
         

        2.通信策略不匹配(QoS 机制)

        • 现象:话题有数据(hz 有显示),但 Python 脚本依然接收不到。
        • 根本原因:Gazebo 发布图像默认使用 Best Effort(尽力而为)模式,而 ROS 2 默认订阅是 Reliable(可靠)模式。两者模式不统一无法建立连接。
        • 解决方案:
          • 在 Python 代码中显式定义 QoSProfile(reliability=ReliabilityPolicy.BEST_EFFORT)
         

        AI篇


        1.查看大模型本地端口

        • 观察终端日志(最直接)
          • 启动命令(如 vllmflask)执行后,终端最后几行通常会显示:Uvicorn running on http://0.0.0.0:8000
          • 这里的 8000 即为本地端口号。
        • 使用网络诊断工具
          • ss 命令(推荐)sudo ss -tlnp | grep python
          • netstat 命令sudo netstat -tlnp | grep python
          • 说明:这些命令会列出所有由 Python 进程监听的端口。如果看到 :8000127.0.0.1:8000,则端口为 8000。
        • 常见默认端口
          • vLLM: 8000
          • Ollama: 11434
          • Flask 默认: 5000
         
        💡
        有关问题,欢迎您在底部评论区留言,一起交流~
        OpenGauss 数据库环境配置6-robotwpr_simulation2
        Loading...