type
status
date
slug
summary
tags
category
icon
password
开放场景下的机器人语义导航方法学习笔记——模拟篇
实验说明
- 终端 1 (AI 服务):切换到qwen_2b的Conda环境保持
qwen_server.py运行。 - 使用
curl命令发送测试 JSON:curl -X POST http://localhost:8000/parse_command -d '{"text": "去厨房"}'。 - 预期结果:返回
{"target": "kitchen"}。
- 终端 2 (语义节点):在 ROS 2 环境下启动语义导航节点:
- 关键验证点:观察终端是否输出“成功加载房间信息”以及列出的房间列表(如
kitchen,bedroom),确保rooms.yaml读取正确。
- 终端 3 (导航堆栈):启动导航功能:
- 注意:在 Rviz 中需手动进行“2D Pose Estimate”(初始位姿校准),直到机器人周围出现绿色的定位粒子。
- 终端 5 (发布指令):通过话题发送测试指令:
- 观测Rviz和Gazebo,机器人移动至目标点,仿真实验完成。
环境配置
1.清理环境变量
- 执行
gedit ~/.bashrc。
- 注释掉(在开头加
#) 所有关于TURTLEBOT3、GAZEBO_MODEL_PATH以及LDS_MODEL的行。
- 保存并退出。
- 【非常重要】:在终端运行
source ~/.bashrc,或者直接关闭当前所有终端窗口重新打开。环境变量只有在新的 Shell 会话中才会彻底刷新。
colcon build --symlink-install # 创建符号链接,便于开发
source install/setup.bash
2.资源同步
- 问题:
launch.py文件找不到。
- 解决方案:在
CMakeLists.txt或setup.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,终端出现重名节点警告。
- 根本原因:
- 系统环境变量中残留了
TURTLEBOT3_MODEL。 - 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。
- 解决方案:
- 通过
grep和ls在models目录下精确定位。 - 在 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.查看大模型本地端口
- 观察终端日志(最直接):
- 启动命令(如
vllm或flask)执行后,终端最后几行通常会显示:Uvicorn running on http://0.0.0.0:8000。 - 这里的 8000 即为本地端口号。
- 使用网络诊断工具:
- ss 命令(推荐):
sudo ss -tlnp | grep python。 - netstat 命令:
sudo netstat -tlnp | grep python。 - 说明:这些命令会列出所有由 Python 进程监听的端口。如果看到
:8000或127.0.0.1:8000,则端口为 8000。
- 常见默认端口:
- vLLM: 8000
- Ollama: 11434
- Flask 默认: 5000
有关问题,欢迎您在底部评论区留言,一起交流~
- Author:Koreyoshi
- URL:https://tangly1024.com/article/2d3c7b13-c6a7-8095-8ce0-c0dfdfff0d57
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!









