#!/bin/bash echo "🔍 宇树雷达连接调试脚本" echo "==========================" # 检查串口设备 echo "📋 1. 检查串口设备:" ls -l /dev/ttyUSB* /dev/ttyACM* 2>/dev/null || echo " 未找到串口设备" # 检查用户权限 echo "" echo "👤 2. 检查用户权限:" echo " 当前用户: $(whoami)" echo " 用户组: $(groups)" if groups | grep -q dialout; then echo " ✅ 用户在dialout组中" else echo " 用户不在dialout组中" echo " 解决方案: sudo usermod -a -G dialout $USER" fi # 检查设备权限 echo "" echo "🔐 3. 检查设备权限:" for device in /dev/ttyUSB* /dev/ttyACM*; do if [ -e "$device" ]; then echo " 设备: $device" ls -l "$device" if [ -r "$device" ] && [ -w "$device" ]; then echo " ✅ 设备可读写" else echo " ❌ 设备权限不足" echo " 💡 临时解决: sudo chmod 666 $device" fi fi done # 检查进程占用 echo "" echo "🔒 4. 检查端口占用:" for device in /dev/ttyUSB* /dev/ttyACM*; do if [ -e "$device" ]; then echo " 检查 $device 是否被占用:" lsof "$device" 2>/dev/null || echo " ✅ 端口未被占用" fi done # 测试串口通信 echo "" echo "📡 5. 测试串口通信:" for device in /dev/ttyUSB* /dev/ttyACM*; do if [ -e "$device" ] && [ -r "$device" ] && [ -w "$device" ]; then echo " 测试设备: $device" # 尝试读取设备信息 timeout 2s cat "$device" > /tmp/serial_test.txt 2>/dev/null & sleep 1 kill $! 2>/dev/null if [ -s /tmp/serial_test.txt ]; then echo " ✅ 设备有数据输出" echo " 数据样本: $(head -c 50 /tmp/serial_test.txt | hexdump -C | head -1)" else echo " ⚠️ 设备无数据输出(可能正常,取决于雷达状态)" fi rm -f /tmp/serial_test.txt fi done # 检查Unitree SDK库 echo "" echo "📚 6. 检查Unitree SDK:" SDK_PATH="unilidar_sdk-main/unilidar_sdk-main/unitree_lidar_sdk" if [ -d "$SDK_PATH" ]; then echo " ✅ SDK目录存在: $SDK_PATH" # 检查头文件 if [ -f "$SDK_PATH/include/unitree_lidar_sdk.h" ]; then echo " ✅ SDK头文件存在" else echo " ❌ SDK头文件缺失" fi # 检查库文件 LIB_PATH="$SDK_PATH/lib/x86_64/libunitree_lidar_sdk.a" if [ -f "$LIB_PATH" ]; then echo " ✅ SDK库文件存在: $LIB_PATH" echo " 库文件大小: $(ls -lh "$LIB_PATH" | awk '{print $5}')" else echo " ❌ SDK库文件缺失: $LIB_PATH" fi else echo " ❌ SDK目录不存在: $SDK_PATH" fi # 检查编译状态 echo "" echo "🔨 7. 检查编译状态:" if [ -f "build/yushu_leida" ]; then echo " ✅ 可执行文件存在" echo " 文件大小: $(ls -lh build/yushu_leida | awk '{print $5}')" # 检查动态库依赖 echo " 动态库依赖:" ldd build/yushu_leida | grep -E "(pcl|yaml|unitree)" || echo " 未找到相关库依赖" else echo " ❌ 可执行文件不存在,需要重新编译" fi # 检查配置文件 echo "" echo "📋 8. 检查配置文件:" if [ -f "config/config.yaml" ]; then echo " ✅ 配置文件存在" echo " 端口配置: $(grep -E "^port:" config/config.yaml || echo "未找到端口配置")" echo " 波特率配置: $(grep -E "^baud:" config/config.yaml || echo "未找到波特率配置")" else echo " ❌ 配置文件不存在" fi echo "" echo "🎯 调试建议:" echo "1. 如果设备权限不足,执行: sudo chmod 666 /dev/ttyUSB0" echo "2. 如果用户不在dialout组,执行: sudo usermod -a -G dialout \$USER 然后重新登录" echo "3. 如果没有串口设备,检查雷达硬件连接" echo "4. 如果编译文件不存在,执行: cd build && make" echo "5. 运行程序时添加调试输出观察具体错误" echo "" echo "🚀 运行测试命令:" echo "cd build && ./yushu_leida"