2025-09-10 21:41:21 +08:00
|
|
|
|
#!/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
|
2025-09-10 22:05:56 +08:00
|
|
|
|
echo " 用户不在dialout组中"
|
|
|
|
|
echo " 解决方案: sudo usermod -a -G dialout $USER"
|
2025-09-10 21:41:21 +08:00
|
|
|
|
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"
|