Skip to main content

常见问题处理

机器人与上位机运维常见问题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

排查步骤:

相机互换测试

  • 由于机器人拆后壳比较麻烦,将机器人手上的相机拆下来
  • 左右手相机互换进行测试
  1. 判断故障原因

    • 如果原本帧率10Hz的手部相机仍然是10Hz → 可能是相机线问题
    • 如果原本帧率10Hz的手部相机变成了30Hz → 可能是相机问题
  2. 进一步排查

    • 可以借助相机的上位机软件realsense进一步排查相机的问题
# 使用realsense-viewer检查相机状态
realsense-viewer

4. 设备离线问题

Q: 设备离线时如何排查和解决?

A: 按步骤排查:

  1. 检查上位机连通性
ping `<机器人上位机IP>`  # 测试与上位机的网络连通性
  1. 若可连通上位机:
ssh leju_kuavo@`<上位机IP>`

# password: leju_kuavo

ping baidu.com # 判断外网连通性
  1. 若无法连通外网,修改wifi的网络优先级,重启网络服务:
ip route show  # 查看当前路由表
sudo nmcli connection modify "wifi名称" ipv4.route-metric 50 # 修改wifi优先级
sudo systemctl restart NetworkManager # 重启网络管理服务
ping baidu.com # 再次测试外网连通性
  1. 若不可连通上位机,通过下位机进入:
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):

创建新配置文件(推荐)

  1. 确定网口名称

进入机器人上位机之后,先确定哪个是有线网络的网口(例如eth3)

  1. 创建配置文件
sudo nano /etc/netplan/00-eth3-config.yaml
  1. 编辑配置文件内容
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
  1. 测试配置
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>