Diliverycar(五)

下面整理成一份可以直接保存的调试笔记,内容对应今天你在队友电脑上复现 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 的标准排障流程。

相关推荐
Golden小狗种自己的花[哇]1 天前
Diliverycart(四)
机器小车