下面整理成一份可以直接保存的调试笔记,内容对应今天你在队友电脑上复现 EPRobot 导航、RViz、2D Pose Estimate 的完整过程。
队友电脑 EPRobot 调试笔记
日期:2026-10-05
一、今天的目标
在队友电脑的 Ubuntu 虚拟机上,重新跑通之前你自己电脑上已经成功的导航流程:
连接小车
→ SSH 登录
→ 启动 robot_navigation
→ 队友 Ubuntu 连接小车 ROS Master
→ RViz 显示地图
→ 显示 LaserScan
→ AMCL
→ 2D Pose Estimate
→ 2D Nav Goal
今天主要解决的是:
网络/IP
→ ROS Master
→ RViz
→ /map
→ /scan
→ /initialpose
→ AMCL 粒子
二、今天使用的网络信息
最开始沿用了你自己电脑以前的小车 IP:
10.189.140.42
但是队友电脑当前并不在这个网络。
队友 Ubuntu:
172.20.10.5
通过:
ip addr
看到:
inet 172.20.10.5/28
网关:
172.20.10.1
因此当前网段为:
172.20.10.0/28
三、为什么最开始 SSH 没有响应
最开始执行:
ping 10.189.140.42
结果:
100% packet loss
然后:
ssh EPRobot@10.189.140.42
一直没有响应。
原因:
队友 Ubuntu:172.20.10.5
旧小车 IP:10.189.140.42
二者不在同一网段。
所以今天确认了一点:
小车换热点以后,IP 可能发生变化,不能一直使用以前的
10.189.140.42。
四、寻找小车新 IP
首先查看:
ip route
得到:
default via 172.20.10.1
172.20.10.0/28
然后扫描当前小网段:
for i in {2..14}; do ping -c 1 -W 1 172.20.10.$i >/dev/null 2>&1 && echo "在线: 172.20.10.$i"; done
当时发现:
172.20.10.4
172.20.10.5
在线。
其中:
172.20.10.5
是队友 Ubuntu 自己。
一开始怀疑:
172.20.10.4
是小车。
尝试:
ssh EPRobot@172.20.10.4
结果:
Connection refused
说明 .4 虽然在线,但不是开启 SSH 的 EPRobot。
五、使用 nmap 找到真正的小车
安装/使用 nmap 后执行:
nmap -p 22 172.20.10.0/28
扫描结果里发现:
Nmap scan report for EPRobot2 (172.20.10.2)
22/tcp open ssh
因此最终确认:
小车:172.20.10.2
队友 Ubuntu:172.20.10.5
网关:172.20.10.1
这是今天最重要的一组网络参数。
六、SSH 登录小车
执行:
ssh EPRobot@172.20.10.2
成功进入:
EPRobot@EPRobot2
然后:
cd ~/robot_ws
source devel/setup.bash
检查:
echo $ROS_DISTRO
返回:
melodic
说明:
Ubuntu / ROS 环境正常
robot_ws 正常
SSH 正常
七、启动小车导航
在小车 SSH 终端运行:
roslaunch robot_navigation robot_navigation.launch
启动后出现的重要信息:
Serial Open Succeed
Received a 384 x 384 map
Initializing likelihood field model
odom received!
同时启动了:
base_control
lslidar_driver_node
laser_filter
map_server
amcl
move_base
robot_state_publisher
地图参数:
384 × 384
resolution = 0.05 m/pixel
黄色的 costmap 警告当时没有影响正常运行。
八、小车端 ROS 环境变量
今天还明确区分了"小车"和"队友电脑"的 ROS_IP。
小车端应该使用:
export ROS_MASTER_URI=http://172.20.10.2:11311
export ROS_IP=172.20.10.2
unset ROS_HOSTNAME
source ~/robot_ws/devel/setup.bash
重点:
ROS_MASTER_URI → 小车
ROS_IP → 当前这台机器自己
所以小车自己的 ROS_IP 不能写成:
172.20.10.5
九、队友 Ubuntu 的 ROS 网络设置
队友电脑本地终端应该:
export ROS_MASTER_URI=http://172.20.10.2:11311
export ROS_IP=172.20.10.5
unset ROS_HOSTNAME
source /opt/ros/melodic/setup.bash
即:
| 参数 | 值 |
|---|---|
| ROS Master | 172.20.10.2 |
| 小车 | 172.20.10.2 |
| 队友 Ubuntu | 172.20.10.5 |
注意今天一开始写成:
ROS_MASTER_URI=...
ROS_IP=...
但没有 export。
正确必须是:
export ROS_MASTER_URI=...
export ROS_IP=...
否则 ROS 节点不一定能继承变量。
十、队友电脑没有 robot_ws
在队友 Ubuntu 上执行:
cd ~/robot_ws
出现:
没有那个文件或目录
然后:
find ~ -maxdepth 2 -type d \( -name "robot_ws" -o -name "catkin_ws" \) 2>/dev/null
也没有结果。
说明:
队友电脑本地没有机器人源码工作空间。
但是这并不妨碍作为远程 RViz 客户端使用。
只需要:
source /opt/ros/melodic/setup.bash
然后通过 ROS 网络连接小车即可。
十一、确认队友电脑已经连接 ROS Master
执行:
rostopic list
成功看到大量话题:
/map
/map_metadata
/scan
/scan_filtered
/tf
/tf_static
/amcl_pose
/initialpose
/particlecloud
/cmd_vel
/odom
/move_base/...
说明:
队友 Ubuntu
↓
172.20.10.2:11311
↓
小车 ROS Master
已经连接成功。
十二、启动 RViz
因为队友本地没有 robot_ws,所以没有使用:
roslaunch robot_navigation navigation_rviz.launch
而是直接:
rviz
RViz 中:
Fixed Frame = map
十三、第一次"地图不显示"
一开始 RViz 能看到:
Global Status: Ok
Fixed Frame: map
TF 正常
但没有地图。
展开 Map 后发现:
Status: Ok
Topic: /map
Resolution: 0.05
Width: 384
Height: 384
Position: -10, -10, 0
说明:
地图实际上已经接收到,只是 RViz 视角跑飞了。
解决方法:
Panels
→ Views
→ 调整视角
→ 缩放
最后地图成功出现。
因此以后如果:
Map Status = Ok
Width/Height 有数值
但屏幕看不到地图,
优先怀疑:
RViz View / Zoom
而不是 map_server。
十四、RViz 中需要添加的显示项目
重新启动默认 RViz 后,只剩 Grid。
需要点击:
Add
加入:
| Display | Topic |
|---|---|
| Map | /map |
| LaserScan | /scan |
| PoseArray | /particlecloud |
| TF | 默认 |
| Path | /move_base/NavfnROS/plan |
Fixed Frame:
map
十五、LaserScan 红线突然消失
有一次地图仍然存在,但:
LaserScan
不再显示红线。
最开始怀疑 /scan。
检查:
rostopic hz /scan
结果却出现:
ERROR: Unable to communicate with master!
继续检查:
ps -ef | grep rosmaster
只有:
grep rosmaster
没有真正的 rosmaster。
同时:
ss -lntp | grep 11311
没有输出。
因此确认:
ROS Master 已经停止。
十六、ROS Master 为什么会断
之前运行:
robot_navigation.launch
的终端被停止或对应 ROS Master 退出。
由于这个 launch 会:
auto-starting new master
所以它退出后:
rosmaster
也一起没了。
这也是为什么:
RViz 地图/红线开始异常
rostopic 无法连接
十七、重新启动 ROS Master / 导航
重新在小车:
export ROS_MASTER_URI=http://172.20.10.2:11311
export ROS_IP=172.20.10.2
unset ROS_HOSTNAME
source ~/robot_ws/devel/setup.bash
然后:
roslaunch robot_navigation robot_navigation.launch
重新出现:
Serial Open Succeed
Received a 384 x 384 map
odom received!
队友电脑重新执行:
rostopic list
话题全部恢复。
十八、LaserScan 恢复
队友电脑:
rostopic hz /scan
能够看到频率。
RViz:
LaserScan
Topic = /scan
Status = Ok
红色激光数据恢复。
今天确认:
有红线
≠
只是 RViz 开关问题
如果红线没了,要同时检查:
/scan
ROS Master
RViz Topic
十九、2D Pose Estimate 不生效
接下来最大的一个问题是:
点击:
2D Pose Estimate
但地图里的机器人/红框不移动。
最开始检查:
rostopic echo /initialpose
然后在 RViz 再拖一次 2D Pose。
结果:
没有任何输出
说明:
RViz 没有真正发布
/initialpose。
二十、检查 2D Pose Estimate Topic
RViz:
Panels
→ Tool Properties
→ 2D Pose Estimate
看到:
Topic = /initialpose
因此 Topic 设置本身正确。
二十一、真正定位到 2D Pose 问题
执行:
rostopic info /initialpose
得到:
Type: geometry_msgs/PoseWithCovarianceStamped
Publishers: None
Subscribers:
* /amcl
这里非常关键。
说明:
AMCL 正在订阅 /initialpose
但是 RViz 没有作为 Publisher 注册
也就是说:
AMCL 没问题
/initialpose 没问题
RViz 有问题
二十二、为什么 RViz 没注册 /initialpose
原因很可能是:
ROS Master 中途重启
但 RViz 是 ROS Master 重启以前启动的旧 RViz。
ROS Master 重启之后,旧 RViz 没有正确重新注册 Publisher。
解决:
关闭旧 RViz
→ 保持 robot_navigation 正常运行
→ 设置队友 Ubuntu ROS 环境
→ 重新启动 rviz
二十三、重新启动 RViz
队友电脑:
export ROS_MASTER_URI=http://172.20.10.2:11311
export ROS_IP=172.20.10.5
unset ROS_HOSTNAME
source /opt/ros/melodic/setup.bash
rviz
然后重新添加:
Map
LaserScan
PoseArray
TF
Path
二十四、AMCL 粒子为什么变成一大片红箭头
重新配置后看到地图上方出现非常密集的大量红色箭头。
这不是雷达坏了。
这是:
PoseArray
Topic = /particlecloud
也就是:
AMCL 粒子
当前大量粒子分散表示:
AMCL 对小车当前实际位置不确定。
也就是定位还没有收敛。
二十五、PoseArray 和 LaserScan 的区别
今天非常容易混淆:
LaserScan
Topic = /scan
用于显示激光雷达测量。
它应该大致落在:
黑色墙体
上。
PoseArray
Topic = /particlecloud
用于显示 AMCL 粒子。
它显示为:
很多小箭头
如果粒子铺满一大片:
定位未收敛
如果粒子集中在机器人周围:
定位较好
二十六、PoseArray 看起来特别乱的另一个原因
RViz 中:
PoseArray
Arrow Length = 0.3
这个箭头比较大。
因此视觉效果会非常密集。
可以改成:
0.05
或者调试激光时临时取消:
PoseArray
前面的勾。
这只影响显示,不影响 AMCL。
二十七、正确的 2D Pose Estimate 操作
恢复 /initialpose Publisher 后:
2D Pose Estimate
操作方法:
鼠标起点 = 小车现实位置
箭头方向 = 小车现实车头方向
然后观察:
LaserScan
和地图:
黑色墙体
是否重合。
如果明显错:
重新 2D Pose Estimate
不需要重启。
二十八、小车原来在地图外,要不要重启?
今天还遇到:
小车刚开始不在建图区域,后来才放回场地。
结论:
不用重启 ROS
不用重启导航
不用重启 RViz
直接重新:
2D Pose Estimate
即可。
只有出现:
/scan 不更新
TF 报错
ROS Master 掉线
odom 不更新
才需要考虑重启。
二十九、AMCL 如何逐渐收敛
做完大致正确的:
2D Pose Estimate
以后,不一定马上完全收敛。
可以让小车:
慢速前进一点
→ 小幅转弯
→ 再前进一点
AMCL 会综合:
激光雷达
+
里程计
+
地图
逐渐修正位置。
正常现象:
粒子一大片
↓
逐渐缩小
↓
集中在小车附近
三十、最终判断定位是否成功
以后不要只看"机器人图标"。
重点看三个东西:
| 检查项目 | 正常表现 |
|---|---|
/scan |
有稳定频率 |
| LaserScan | 红色激光基本贴合地图墙体 |
/particlecloud |
粒子逐渐集中 |
如果三项基本正常,再进行:
2D Nav Goal
三十一、今天完整成功流程
以后在队友电脑重新做,直接按照这一套:
# 1. 找小车
nmap -p 22 172.20.10.0/28
找到:
EPRobot2 = 172.20.10.2
然后:
# 2. 登录小车
ssh EPRobot@172.20.10.2
小车端:
cd ~/robot_ws
source devel/setup.bash
export ROS_MASTER_URI=http://172.20.10.2:11311
export ROS_IP=172.20.10.2
unset ROS_HOSTNAME
roslaunch robot_navigation robot_navigation.launch
这个终端:
不要关闭
不要 Ctrl+C
队友 Ubuntu:
export ROS_MASTER_URI=http://172.20.10.2:11311
export ROS_IP=172.20.10.5
unset ROS_HOSTNAME
source /opt/ros/melodic/setup.bash
检查:
rostopic list
然后:
rviz
RViz 设置:
Fixed Frame = map
Map → /map
LaserScan → /scan
PoseArray → /particlecloud
TF → 默认
Path → /move_base/NavfnROS/plan
然后:
2D Pose Estimate
↓
观察 LaserScan 是否贴墙
↓
观察 particlecloud 是否收敛
↓
适当让小车慢速移动
↓
2D Nav Goal
三十二、今天最重要的排障经验
| 现象 | 优先检查 |
|---|---|
| SSH 一直没响应 | IP、网段 |
| Connection refused | 对方在线,但 SSH 端口没开 |
| 不知道小车 IP | nmap -p 22 网段 |
rostopic 报 Unable to communicate with master |
rosmaster / 11311 |
| 地图 Status OK 但看不见 | RViz 视角 |
| 没有红色激光 | /scan、ROS Master、LaserScan Topic |
| 2D Pose 不生效 | /initialpose Publisher |
/initialpose Subscribers 有 /amcl,Publisher None |
RViz 没正确注册 |
| ROS Master 中途重启 | RViz 最好重新启动 |
| 一大片红箭头 | AMCL /particlecloud 未收敛 |
| 小车刚放回地图 | 不用重启,重新 2D Pose |
| 激光和墙不重合 | 初始位置/车头方向不准 |
当前队友电脑最终状态
截至今天最后一步:
小车 IP:172.20.10.2
队友 Ubuntu:172.20.10.5
ROS Melodic
robot_navigation 可正常启动
map_server 正常
/map 正常
/scan 正常
LaserScan 正常
AMCL 正常
/particlecloud 正常
RViz 已重新配置
当前主要剩下的是:
准确完成 2D Pose Estimate
→ 让 AMCL 粒子收敛
→ 确认红色激光贴合地图
→ 测试 2D Nav Goal
这份记录可以作为以后在其他队员电脑上配置 EPRobot 导航/RViz 的标准排障流程。