Skip to content

6. 连接状态查询与故障排查

6.1 如何查询连接状态

6.1.1 检查节点是否运行

bash
# 列出所有运行的节点
ros2 node list

# 输出应包含:
# /psi_glove_node

# 查看节点详细信息
ros2 node info /psi_glove_node

# 输出:
# /psi_glove_node
#   Subscribers:
#     /parameter_events: rcl_interfaces/msg/ParameterEvent
#   Publishers:
#     /parameter_events: rcl_interfaces/msg/ParameterEvent
#     /rosout: rcl_interfaces/msg/Log
#     /ruiyan_hand/left/set_angles: sensor_msgs/msg/JointState
#   Service Servers:
#     ...
#   Service Clients:
#     ...

6.1.2 检查话题是否发布

bash
# 列出所有话题
ros2 topic list

# 输出应包含:
# /ruiyan_hand/left/set_angles
# /ruiyan_hand/right/set_angles

# 查看话题信息
ros2 topic info /ruiyan_hand/left/set_angles

# 输出:
# Type: sensor_msgs/msg/JointState
# Publisher count: 1
# Subscription count: 0

# 查看话题频率(实时)
ros2 topic hz /ruiyan_hand/left/set_angles

# 输出:
# average rate: 99.876
#     min: 0.009s max: 0.011s std dev: 0.00053s window: 100

6.1.3 检查参数设置

bash
# 列出节点所有参数
ros2 param list /psi_glove_node

# 获取特定参数
ros2 param get /psi_glove_node left_port
# 输出: String value is: /dev/ttyACM0

ros2 param get /psi_glove_node baudrate
# 输出: Integer value is: 115200

ros2 param get /psi_glove_node frequency
# 输出: Integer value is: 100

6.2 如何确认程序正常运行

6.2.1 连接成功的标志

正常运行的特征:

  1. 节点正在运行

    bash
    ros2 node list | grep psi_glove_node
    # 输出: /psi_glove_node
  2. 话题正在发布

    bash
    ros2 topic hz /ruiyan_hand/left/set_angles
    # 输出: average rate: 99.876
  3. 日志显示正常

    [INFO] [psi_glove_node]: 左手连接成功
    [INFO] [psi_glove_node]: 开始发布数据
  4. 数据可以接收

    bash
    ros2 topic echo /ruiyan_hand/left/set_angles --once
    # 应该显示 JointState 消息

6.2.2 性能检查脚本

bash
#!/bin/bash
# 检查 PSI 手套系统健康状态

echo "=== PSI 手套系统诊断 ==="
echo

# 检查节点
echo "1. 检查节点是否运行..."
if ros2 node list | grep -q psi_glove_node; then
    echo "   ✅ 节点正在运行"
else
    echo "   ❌ 节点未运行"
    exit 1
fi

# 检查话题
echo "2. 检查话题是否发布..."
if ros2 topic list | grep -q "/ruiyan_hand/left/set_angles"; then
    echo "   ✅ 左手话题存在"
else
    echo "   ❌ 左手话题不存在"
fi

# 检查频率
echo "3. 检查发布频率..."
hz_output=$(timeout 5 ros2 topic hz /ruiyan_hand/left/set_angles 2>/dev/null | grep "average rate")
if [ -n "$hz_output" ]; then
    echo "   ✅ $hz_output"
else
    echo "   ❌ 无数据发布"
fi

# 检查串口
echo "4. 检查串口设备..."
port=$(ros2 param get /psi_glove_node left_port 2>/dev/null | grep "String value" | cut -d':' -f2 | tr -d ' ')
if [ -e "$port" ]; then
    echo "   ✅ 串口设备存在: $port"
else
    echo "   ❌ 串口设备不存在: $port"
fi

echo
echo "=== 诊断完成 ==="

6.3 常见故障排查

故障 1: 编译失败

症状:

CMake Error: Could not find a package configuration file provided by "rclcpp"

解决方法:

bash
# 确保已安装 ROS2
source /opt/ros/humble/setup.bash

# 检查 ROS2 是否正确安装
ros2 --version

# 安装缺失的依赖
rosdep update
rosdep install --from-paths src --ignore-src -r -y

# 清理后重新编译
cd ~/ros2_ws
rm -rf build install log
colcon build --packages-select psi_glove_ros2

故障 2: 节点启动失败

症状:

[ERROR] [psi_glove_node]: 错误: 无法连接到设备

排查步骤:

  1. 检查设备是否通电

  2. 检查串口是否存在

    bash
    ls -l /dev/ttyUSB* /dev/ttyACM*
  3. 检查串口权限

    bash
    groups  # 应包含 dialout
    ls -l /dev/ttyACM0  # 应显示 crw-rw----
  4. 检查串口是否被占用

    bash
    lsof /dev/ttyACM0
  5. 尝试不同的串口

    bash
    ros2 launch psi_glove_ros2 psi_glove.launch.py left_port:=/dev/ttyUSB0

故障 3: 无数据发布

症状:

bash
ros2 topic hz /ruiyan_hand/left/set_angles
# 输出: no messages

排查步骤:

  1. 检查节点是否运行

    bash
    ros2 node list | grep psi_glove
  2. 查看节点日志

    bash
    ros2 node info /psi_glove_node
    cat ~/.ros/log/latest/psi_glove_node/stdout.log
  3. 检查参数设置

    bash
    ros2 param get /psi_glove_node left_port
    ros2 param get /psi_glove_node baudrate
  4. 重启节点

    bash
    # Ctrl+C 停止节点
    ros2 launch psi_glove_ros2 psi_glove.launch.py left_port:=/dev/ttyACM0

故障 4: 话题频率过低

症状:

bash
ros2 topic hz /ruiyan_hand/left/set_angles
# 输出: average rate: 45.123  # 远低于 100 Hz

解决方法:

  1. 提高发布频率

    bash
    ros2 param set /psi_glove_node frequency 150
  2. 提高波特率

    bash
    # 重启节点时设置
    ros2 launch psi_glove_ros2 psi_glove.launch.py \
        left_port:=/dev/ttyACM0 \
        baudrate:=500000
  3. 减少日志输出

    bash
    ros2 launch psi_glove_ros2 psi_glove.launch.py \
        --log-level warn  # 只显示警告和错误

故障 5: 可视化器无法显示

症状:

ModuleNotFoundError: No module named 'matplotlib'

解决方法:

bash
# 安装 Python 依赖
pip3 install matplotlib numpy

# 验证安装
python3 -c "import matplotlib; import numpy; print('OK')"

# 重新启动可视化器
ros2 run psi_glove_visualizer glove_visualizer

6.4 调试工具和技巧

6.4.1 ROS2 调试工具

bash
# 1. rqt_graph - 可视化节点和话题关系
sudo apt-get install ros-humble-rqt-graph
rqt_graph

# 2. rqt_topic - 监控话题
sudo apt-get install ros-humble-rqt-topic
rqt_topic

# 3. rqt_console - 查看日志
sudo apt-get install ros-humble-rqt-console
rqt_console

# 4. ros2 doctor - 系统健康检查
ros2 doctor --report

6.4.2 记录和回放数据

bash
# 记录数据到 bag 文件
ros2 bag record /ruiyan_hand/left/set_angles

# 记录所有话题
ros2 bag record -a

# 回放数据
ros2 bag play rosbag2_2025_01_15-10_30_45

# 查看 bag 文件信息
ros2 bag info rosbag2_2025_01_15-10_30_45

6.4.3 性能分析

bash
# 使用 ros2 topic bw 查看带宽
ros2 topic bw /ruiyan_hand/left/set_angles

# 使用 ros2 topic delay 查看延迟
ros2 topic delay /ruiyan_hand/left/set_angles

# 使用 top 查看 CPU 使用率
top -p $(pgrep -f psi_glove_node)

6.5 获取技术支持

如果以上方法无法解决问题,请:

  1. 收集诊断信息

    bash
    # ROS2 环境信息
    ros2 doctor --report > ros2_diagnostic.txt
    
    # 节点信息
    ros2 node info /psi_glove_node > node_info.txt
    
    # 参数信息
    ros2 param dump /psi_glove_node > params.yaml
    
    # 日志文件
    cat ~/.ros/log/latest/psi_glove_node/stdout.log > node_log.txt
    
    # 系统信息
    uname -a > system_info.txt
  2. 查看详细文档

    • ROS2 SDK README: ros2_sdk/README_CN.md
    • psi_glove_ros2 README: ros2_sdk/psi_glove_ros2/README.md
    • psi_glove_visualizer README: ros2_sdk/psi_glove_visualizer/README.md
  3. 联系技术支持

    • 提供诊断信息和日志文件
    • 描述复现步骤

📊 附录:快速参考

常用命令

bash
# 编译
colcon build --packages-select psi_glove_ros2 psi_glove_visualizer

# 加载环境
source ~/ros2_ws/install/setup.bash

# 启动驱动
ros2 launch psi_glove_ros2 psi_glove.launch.py left_port:=/dev/ttyACM0

# 查看话题
ros2 topic list
ros2 topic echo /ruiyan_hand/left/set_angles
ros2 topic hz /ruiyan_hand/left/set_angles

# 查看节点
ros2 node list
ros2 node info /psi_glove_node

# 查看参数
ros2 param list /psi_glove_node
ros2 param get /psi_glove_node left_port

# 启动可视化
ros2 launch psi_glove_visualizer visualizer.launch.py

# 记录数据
ros2 bag record /ruiyan_hand/left/set_angles

性能参数参考

场景波特率频率预期帧率
标准配置11520010095-100 Hz
高速配置500000150140-150 Hz
稳定配置1152005048-50 Hz

数据范围

  • ADC 值: 0-4095 (12-bit)
  • 关节数量: 21 个
  • 拇指: 5 个关节(索引 0-4)
  • 其他手指: 各 4 个关节

版本: 1.0.0
更新日期: 2025-01-15
版权所有: © 2025 PSI 机器人团队