常见问题处理
机器人与上位机运维常见问题QA文档
1. 数据采集类
Q: 网页采集无数据时如何查找数据文件?
A: 通过SSH连接上位机后进入数据目录:
# 1. SSH连接到机器人上位机
ssh leju_kuavo@`<上位机IP>`
# password: leju_kuavo
# 2. 进入数据存储目录
cd /media/data/Data/rosbag/rosbag_out
ls # 查看采集任务目录
cd `<你的采集任务>` # 进入具体任务目录
2. 网络连接问题
Q: VR与机器人连接断开时如何重新连接?
A: 按以下步骤排查和重新建立连接:
# 1. 检查VR设备网络状态,查看VR的IP
# 在VR设备上检查WiFi连接状态
# 2. 通过上位机进入下位机检查机器人网络
ssh leju_kuavo@<上位机IP>
# password: leju_kuavo
ssh lab@192.168.26.1
# password: (三个空格)
# 3. 检查网络配置
ifconfig
ping baidu.com # 测试外网连通性
# 4. 如果网络异常,重新配置网络
sudo nmcli device wifi list
sudo nmcli device wifi connect "网络名称" password "密码"
# 5. 检查并修改ROS配置中的IP地址
cd kuavo-ros-opensource
sudo su
source ./devel/setup.bash
roscd noitom_hi5_hand_udp_python/
vim launch/launch_quest3_ik.launch
# 修改IP地址为VR设备的IP地址
# 6. 重启相关服务
sudo systemctl restart ocs2_h12pro_monitor.service # 保证机器人是在未使能的状态下执行(四肢是软的情况下)
sudo systemctl restart start_webserver.service
Q: 机器人(VR)重新换网络的问题
A: 完整的网络切换流程:
# 1. 进入机器人上位机
ssh leju_kuavo@<上位机IP>
# 2. 进入下位机
ssh lab@192.168.26.1
# 3. 扫描并连接新WiFi
sudo nmcli device wifi list
sudo nmcli device wifi connect "新网络名称" password "新网络密码"
# 4. 查看IP地址
ifconfig
# 5. 配置ROS网络
cd kuavo-ros-opensource
sudo su
source ./devel/setup.bash
roscd noitom_hi5_hand_udp_python/
vim launch/launch_quest3_ik.launch
# 修改IP地址为VR连接的网络IP
# 6. 重启相关服务(保证机器人是在未使能的状态下执行)
sudo systemctl restart ocs2_h12pro_monitor.service
# 7. 删除旧网络连接
sudo nmcli connection delete "旧网络名称"
3. 相机数据问题
Q: 相机话题数据缺失如何解决?
A: 分情况处理:
# 1. 进入机器的上位机
ssh leju_kuavo@上位机
# password: leju_kuavo
# 2. 录制相机话题的测试bag
timeout 5 rosbag record /cam_h/color/image_raw /cam_l/color/image_raw /cam_r/color/image_raw /cam_h/depth/image_raw /cam_l/depth/image_rect_raw /cam_r/depth/image_rect_raw
rosbag info 2025-xx-xx-xx-xx-xx.bag
# 检查 cam_h、cam_r、cam_l 是否都在,并且频率是否为30Hz
# 3. 根据缺失情况处理
# 如果相机话题完整并且频率为30Hz,只是数采平台缺少相机,重启数采服务
sudo systemctl restart start_webserver.service
# 如果是相机话题缺失,需要先杀死相机节点,再重启相机服务,再次检查相机话题是否完整:
rosnode kill /cam_h/camera /cam_l/realsense2_camera_manager /cam_r/realsense2_camera_manager
sudo systemctl restart start_camera.service
# 4. 查看相机服务日志
journalctl -u start_camera.service -f
# 5. 如果相机服务没有开机自启,需要查看相机服务状态
sudo systemctl status start_camera.service
# 如果服务状态为disable,需要设置开机自启
sudo systemctl enable start_camera.service
# 6. 相机话题正常后重启web服务
sudo systemctl restart start_webserver.service
Web服务重启卡死处理:
lsof -i :10780 # 查看占用进程
sudo kill -9 <PID> # 强制结束进程
Q: 相机话题频率低如何解决?
A: 分情况处理:
情况一:相机话题频率大于10Hz且小于25Hz
如果数采平台自检不通过,可能是相机流出现问题:
# 1. 录制测试的bag包检查相机话题和频率
timeout 5 rosbag record /cam_h/color/image_raw /cam_l/color/image_raw /cam_r/color/image_raw /cam_h/depth/image_raw /cam_l/depth/image_rect_raw /cam_r/depth/image_rect_raw
# 2. 检查bag包信息
rosbag info 2025-xx-xx-xx-xx-xx.bag
# 3. 如果话题和频率仍不正常,重启相机服务
rosnode kill /cam_h/camera /cam_l/realsense2_camera_manager /cam_r/realsense2_camera_manager
sudo systemctl restart start_camera.service
情况二:相机话题稳定在10Hz附近
很可能是相机的USB类型为2.1导致的:
- USB 2.1类型:相机话题帧率稳定在10Hz
- USB 3.2类型:相机话题帧率为30Hz
排查步骤:
相机互换测试
- 由于机器人拆后壳比较麻烦,将机器人手上的相机拆下来
- 左右手相机互换进行测试
-
判断故障原因
- 如果原本帧率10Hz的手部相机仍然是10Hz → 可能是相机线问题
- 如果原本帧率10Hz的手部相机变成了30Hz → 可能是相机问题
-
进一步排查
- 可以借助相机的上位机软件
realsense
进一步排查相机的问题
- 可以借助相机的上位机软件
# 使用realsense-viewer检查相机状态
realsense-viewer
4. 设备离线问题
Q: 设备离线时如何排查和解决?
A: 按步骤排查:
- 检查上位机连通性
ping `<机器人上位机IP>` # 测试与上位机的网络连通性
- 若可连通上位机:
ssh leju_kuavo@`<上位机IP>`
# password: leju_kuavo
ping baidu.com # 判断外网连通性
- 若无法连通外网,修改wifi的网络优先级,重启网络服务:
ip route show # 查看当前路由表
sudo nmcli connection modify "wifi名称" ipv4.route-metric 50 # 修改wifi优先级
sudo systemctl restart NetworkManager # 重启网络管理服务
ping baidu.com # 再次测试外网连通性
- 若不可连通上位机,通过下位机进入:
ssh lab@<下位机IP>
# password: 三个空格
ssh leju_kuavo@192.168.26.12 # 通过下位机连接上位机
# password: leju_kuavo
ping baidu.com # 判断外网连通性
5. 上位机有线网络配置
Q: 如何配置有线网络,增加30段网口网络?
A: Ubuntu 18.04+ 版本配置方法(推荐使用netplan):
创建新配置文件(推荐)
- 确定网口名称
进入机器人上位机之后,先确定哪个是有线网络的网口(例如eth3)
- 创建配置文件
sudo nano /etc/netplan/00-eth3-config.yaml
- 编辑配置文件内容
network:
ethernets:
eth3: # 目标网口:eth3
dhcp4: no # 关闭 DHCP,用静态 IP(上传稳定性优先)
addresses: [172.16.30.33/24] # 保留当前 IP,若需修改则替换为 172.16.30.x(x 避免与接收端冲突)
gateway4: 172.16.30.1 # 网关(若接收端同网段,删除此句;跨网段必须加)
nameservers:
addresses: [8.8.8.8, 114.114.114.114] # DNS(无需域名解析可删除 nameservers 段落)
version: 2
- 测试配置
sudo netplan try
可能出现的问题及解决方案
问题一: 输入 sudo netplan try
之后报错
解决方案:
# 查看 Ubuntu 版本(推荐,最直观)ubuntu必须是18.04+以上
lsb_release -a
# 1. 更新软件源(确保能找到最新的 netplan 包)
sudo apt update
# 2. 安装 netplan 核心包(netplan.io 是官方包名)
sudo apt install -y netplan.io
# 3. 验证安装是否成功(查看 netplan 版本,有输出则成功)
netplan --version
# 停止 NetworkManager 服务
sudo systemctl stop NetworkManager
# 禁止 NetworkManager 开机自启(避免下次重启冲突)
sudo systemctl disable NetworkManager
# 1. 启动 systemd-networkd 服务
sudo systemctl start systemd-networkd
# 2. 设置 systemd-networkd 开机自启(避免重启后服务又停了)
sudo systemctl enable systemd-networkd
# 3. 查看 systemd-networkd 状态(确保显示 "active (running)")
sudo systemctl status systemd-networkd
sudo netplan try
6. DHCP服务器配置脚本
Q: 如何配置上下位机有线连接以及下位机与VR的有线连接?
A: 使用以下脚本配置:
脚本使用方法:
sudo bash <脚本名称> <网卡1名称> <网卡2名称>
# 示例: sudo bash dhcp_config.sh eth0 eth1
完整脚本内容:
#!/bin/bash
# 检查是否为root用户启动
if [ "$(id -u)" -ne 0 ]; then
echo "错误: 此脚本需要以root权限运行" >&2
echo "请使用 'sudo $0' 或 root 用户身份运行" >&2
exit 1
fi
# 检查参数数量
if [ $# -ne 2 ]; then
echo "用法: $0 <网卡1名称> <网卡2名称>"
echo "示例: $0 eth0 eth1"
exit 1
fi
# 定义网卡和IP配置
INTERFACE1=$1
INTERFACE2=$2
STATIC_IP1="192.168.26.1"
STATIC_IP2="192.168.28.1"
SUBNET1="192.168.26.0"
SUBNET2="192.168.28.0"
NETMASK="255.255.255.0"
# 安装isc-dhcp-server
echo "正在安装isc-dhcp-server..."
apt-get update
apt-get install -y isc-dhcp-server
# 配置网卡1
echo "配置网卡 $INTERFACE1..."
nmcli device set $INTERFACE1 managed yes
nmcli con add type ethernet con-name "static-$INTERFACE1" ifname $INTERFACE1
nmcli con mod "static-$INTERFACE1" ipv4.addresses $STATIC_IP1/24
nmcli con mod "static-$INTERFACE1" ipv4.method manual
nmcli con up "static-$INTERFACE1"
# 配置网卡2
echo "配置网卡 $INTERFACE2..."
nmcli device set $INTERFACE2 managed yes
nmcli con add type ethernet con-name "static-$INTERFACE2" ifname $INTERFACE2
nmcli con mod "static-$INTERFACE2" ipv4.addresses $STATIC_IP2/24
nmcli con mod "static-$INTERFACE2" ipv4.method manual
nmcli con up "static-$INTERFACE2"
# 配置DHCP服务器
echo "配置DHCP服务器..."
# 备份原始配置文件
cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.backup
# 创建新的dhcpd.conf配置
cat > /etc/dhcp/dhcpd.conf << EOF
default-lease-time 600;
max-lease-time 7200;
authoritative;
# 第一个子网配置
subnet $SUBNET1 netmask $NETMASK {
range 192.168.26.12 192.168.26.12;
option routers $STATIC_IP1;
option subnet-mask $NETMASK;
option domain-name-servers 8.8.8.8, 114.114.114.114;
}
# 第二个子网配置
subnet $SUBNET2 netmask $NETMASK {
range 192.168.28.12 192.168.28.12;
option routers $STATIC_IP2;
option subnet-mask $NETMASK;
option domain-name-servers 8.8.8.8, 114.114.114.114;
}
EOF
# 配置DHCP服务器监听的接口
echo "INTERFACESv4=\"$INTERFACE1 $INTERFACE2\"" > /etc/default/isc-dhcp-server
# 重启DHCP服务
echo "重启DHCP服务..."
systemctl restart isc-dhcp-server
# 检查服务状态
echo -e "\n检查DHCP服务状态..."
systemctl status isc-dhcp-server --no-pager
echo -e "\n配置完成!"
echo "网卡 $INTERFACE1 已配置为静态IP: $STATIC_IP1"
echo "网卡 $INTERFACE2 已配置为静态IP: $STATIC_IP2"
echo "DHCP服务器已配置两个子网:"
echo " - $SUBNET1/24 (网关: $STATIC_IP1)"
echo " - $SUBNET2/24 (网关: $STATIC_IP2)"
7. 常用命令速查
网络诊断相关
网络接口查看
# 查看所有网络接口信息
ifconfig
ip addr show
# 查看特定接口状态
ip addr show <接口名>
网络连接管理
# 查看所有网络连接
nmcli connection show
# 查看WiFi列表
sudo nmcli device wifi list
# 连接WiFi网络
sudo nmcli device wifi connect "网络名称" password "密码"
# 删除网络连接
sudo nmcli connection delete "连接名称"
网络测试
# 测试网络连通性
ping baidu.com
# 查看路由表
ip route show
# 测试端口连通性
telnet <IP地址> <端口号>
网络服务重启
# 重启网络管理服务
sudo systemctl restart NetworkManager
sudo systemctl restart systemd-networkd
# 应用netplan配置
sudo netplan apply
sudo netplan try # 测试配置
系统服务管理
服务状态查看
# 查看服务状态
sudo systemctl status <服务名>
# 查看服务日志(实时)
journalctl -u <服务名> -f
服务控制
# 启动服务
sudo systemctl start <服务名>
# 停止服务
sudo systemctl stop <服务名>
# 重启服务
sudo systemctl restart <服务名>
# 设置开机自启
sudo systemctl enable <服务名>
# 禁用开机自启
sudo systemctl disable <服务名>
进程和端口管理
进程查看
# 查看所有进程
ps aux
# 查看特定进程
ps aux | grep <进程名>
# 实时查看进程
top
htop # 需要安装: sudo apt install htop
端口管理
# 查看端口占用
lsof -i :<端口号>
# 强制结束进程
sudo kill -9 <PID>