352 lines
9.6 KiB
Bash
352 lines
9.6 KiB
Bash
|
#!/bin/bash
|
|||
|
# 雷达检测系统 - 快速Linux打包脚本
|
|||
|
|
|||
|
echo "🚀 快速创建Linux软件包..."
|
|||
|
|
|||
|
# 检查是否在正确的目录
|
|||
|
if [ ! -f "CMakeLists.txt" ] || [ ! -d "src" ]; then
|
|||
|
echo "❌ 请在项目根目录运行此脚本"
|
|||
|
exit 1
|
|||
|
fi
|
|||
|
|
|||
|
# 创建简单的软件包
|
|||
|
PACKAGE_DIR="yushu-radar-linux"
|
|||
|
rm -rf ${PACKAGE_DIR}
|
|||
|
mkdir -p ${PACKAGE_DIR}
|
|||
|
|
|||
|
echo "🔨 编译程序..."
|
|||
|
# 确保程序已编译
|
|||
|
if [ ! -d "build" ]; then
|
|||
|
mkdir build
|
|||
|
cd build
|
|||
|
cmake .. -DCMAKE_BUILD_TYPE=Release
|
|||
|
make -j$(nproc) yushu_leida_fixed
|
|||
|
cd ..
|
|||
|
elif [ ! -f "build/yushu_leida_fixed" ]; then
|
|||
|
cd build
|
|||
|
make -j$(nproc) yushu_leida_fixed
|
|||
|
cd ..
|
|||
|
fi
|
|||
|
|
|||
|
if [ ! -f "build/yushu_leida_fixed" ]; then
|
|||
|
echo "❌ 编译失败,请检查错误信息"
|
|||
|
exit 1
|
|||
|
fi
|
|||
|
|
|||
|
echo "📦 打包文件..."
|
|||
|
|
|||
|
# 复制主程序
|
|||
|
cp build/yushu_leida_fixed ${PACKAGE_DIR}/
|
|||
|
|
|||
|
# 复制配置文件
|
|||
|
cp -r config ${PACKAGE_DIR}/
|
|||
|
|
|||
|
# 创建简单的启动脚本
|
|||
|
cat > ${PACKAGE_DIR}/start.sh << 'EOF'
|
|||
|
#!/bin/bash
|
|||
|
# 雷达检测系统启动脚本
|
|||
|
|
|||
|
echo "🚀 启动雷达检测系统..."
|
|||
|
|
|||
|
# 检查设备
|
|||
|
if [ ! -e "/dev/ttyUSB0" ] && [ ! -e "/dev/ttyUSB1" ] && [ ! -e "/dev/ttyACM0" ]; then
|
|||
|
echo "⚠️ 未找到雷达设备,请检查连接"
|
|||
|
echo "可用设备:"
|
|||
|
ls -l /dev/ttyUSB* /dev/ttyACM* 2>/dev/null || echo "无串口设备"
|
|||
|
fi
|
|||
|
|
|||
|
# 检查权限
|
|||
|
for device in /dev/ttyUSB0 /dev/ttyUSB1 /dev/ttyACM0; do
|
|||
|
if [ -e "$device" ]; then
|
|||
|
if [ ! -r "$device" ] || [ ! -w "$device" ]; then
|
|||
|
echo "⚠️ 设备权限不足:$device"
|
|||
|
echo "请运行:sudo chmod 666 $device"
|
|||
|
echo "或:sudo usermod -a -G dialout \$USER (需要重新登录)"
|
|||
|
else
|
|||
|
echo "✅ 设备权限正常:$device"
|
|||
|
break
|
|||
|
fi
|
|||
|
fi
|
|||
|
done
|
|||
|
|
|||
|
# 启动程序
|
|||
|
echo "🎯 启动主程序..."
|
|||
|
./yushu_leida_fixed
|
|||
|
EOF
|
|||
|
|
|||
|
chmod +x ${PACKAGE_DIR}/start.sh
|
|||
|
|
|||
|
# 创建桌面快捷方式文件
|
|||
|
echo "🔗 创建桌面快捷方式文件..."
|
|||
|
cat > ${PACKAGE_DIR}/yushu-radar.desktop << 'EOF'
|
|||
|
[Desktop Entry]
|
|||
|
Version=1.0
|
|||
|
Type=Application
|
|||
|
Name=雷达检测系统
|
|||
|
Name[en]=YuShu Radar Detection System
|
|||
|
Comment=雷达实时检测和点云显示系统
|
|||
|
Comment[en]=YuShu Radar real-time detection and point cloud display system
|
|||
|
Exec=bash -c 'cd "%k" && ./start.sh'
|
|||
|
Icon=applications-science
|
|||
|
Terminal=true
|
|||
|
Categories=Science;Engineering;
|
|||
|
StartupNotify=true
|
|||
|
Path=%k
|
|||
|
Keywords=radar;detection;pointcloud;宇树;雷达;检测;点云;
|
|||
|
EOF
|
|||
|
|
|||
|
# 创建快捷方式安装脚本
|
|||
|
cat > ${PACKAGE_DIR}/create_shortcuts.sh << 'EOF'
|
|||
|
#!/bin/bash
|
|||
|
# 创建雷达检测系统的快捷方式
|
|||
|
|
|||
|
echo "🔗 创建雷达检测系统快捷方式..."
|
|||
|
|
|||
|
# 获取当前目录的绝对路径
|
|||
|
INSTALL_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|||
|
DESKTOP_FILE="$INSTALL_DIR/yushu-radar.desktop"
|
|||
|
|
|||
|
echo "📁 安装目录: $INSTALL_DIR"
|
|||
|
|
|||
|
# 1. 创建桌面快捷方式
|
|||
|
if [ -d "$HOME/Desktop" ]; then
|
|||
|
echo "🖥️ 创建桌面快捷方式..."
|
|||
|
cp "$DESKTOP_FILE" "$HOME/Desktop/雷达检测系统.desktop"
|
|||
|
chmod +x "$HOME/Desktop/雷达检测系统.desktop"
|
|||
|
|
|||
|
# 修正桌面文件中的路径
|
|||
|
sed -i "s|%k|$INSTALL_DIR|g" "$HOME/Desktop/雷达检测系统.desktop"
|
|||
|
|
|||
|
echo "✅ 桌面快捷方式已创建: ~/Desktop/雷达检测系统.desktop"
|
|||
|
else
|
|||
|
echo "⚠️ 未找到桌面目录,跳过桌面快捷方式创建"
|
|||
|
fi
|
|||
|
|
|||
|
# 2. 创建应用程序菜单快捷方式
|
|||
|
APPLICATIONS_DIR="$HOME/.local/share/applications"
|
|||
|
mkdir -p "$APPLICATIONS_DIR"
|
|||
|
|
|||
|
echo "📱 创建应用程序菜单快捷方式..."
|
|||
|
cp "$DESKTOP_FILE" "$APPLICATIONS_DIR/yushu-radar.desktop"
|
|||
|
chmod +x "$APPLICATIONS_DIR/yushu-radar.desktop"
|
|||
|
|
|||
|
# 修正应用程序菜单文件中的路径
|
|||
|
sed -i "s|%k|$INSTALL_DIR|g" "$APPLICATIONS_DIR/yushu-radar.desktop"
|
|||
|
|
|||
|
echo "✅ 应用程序菜单快捷方式已创建"
|
|||
|
|
|||
|
# 3. 创建命令行快捷方式
|
|||
|
echo "⌨️ 创建命令行快捷方式..."
|
|||
|
|
|||
|
# 创建用户级快捷方式
|
|||
|
USER_BIN_DIR="$HOME/.local/bin"
|
|||
|
mkdir -p "$USER_BIN_DIR"
|
|||
|
|
|||
|
cat > "$USER_BIN_DIR/yushu-radar" << SCRIPT_EOF
|
|||
|
#!/bin/bash
|
|||
|
#雷达检测系统启动器
|
|||
|
cd "$INSTALL_DIR"
|
|||
|
./start.sh
|
|||
|
SCRIPT_EOF
|
|||
|
|
|||
|
chmod +x "$USER_BIN_DIR/yushu-radar"
|
|||
|
echo "✅ 用户命令行快捷方式已创建: ~/.local/bin/yushu-radar"
|
|||
|
|
|||
|
# 检查PATH设置
|
|||
|
if [[ ":$PATH:" != *":$HOME/.local/bin:"* ]]; then
|
|||
|
echo "⚠️ ~/.local/bin 不在PATH中"
|
|||
|
echo " 建议将以下行添加到 ~/.bashrc:"
|
|||
|
echo " export PATH=\"\$HOME/.local/bin:\$PATH\""
|
|||
|
echo " 然后运行: source ~/.bashrc"
|
|||
|
else
|
|||
|
echo "✅ 现在可以在任何位置运行: yushu-radar"
|
|||
|
fi
|
|||
|
|
|||
|
# 4. 尝试创建系统级快捷方式 (可选)
|
|||
|
read -p "是否创建系统级命令快捷方式?(需要sudo权限) (y/N): " -n 1 -r
|
|||
|
echo
|
|||
|
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
|||
|
if sudo ln -sf "$USER_BIN_DIR/yushu-radar" /usr/local/bin/yushu-radar 2>/dev/null; then
|
|||
|
echo "✅ 系统级快捷方式已创建: /usr/local/bin/yushu-radar"
|
|||
|
else
|
|||
|
echo "❌ 系统级快捷方式创建失败"
|
|||
|
fi
|
|||
|
fi
|
|||
|
|
|||
|
echo ""
|
|||
|
echo "🎉 快捷方式创建完成!"
|
|||
|
echo ""
|
|||
|
echo "📋 使用方法:"
|
|||
|
echo "1. 桌面双击: 雷达检测系统"
|
|||
|
echo "2. 应用程序菜单: 搜索 '雷达'"
|
|||
|
echo "3. 命令行: yushu-radar"
|
|||
|
echo "4. 直接启动: ./start.sh"
|
|||
|
echo ""
|
|||
|
EOF
|
|||
|
|
|||
|
chmod +x ${PACKAGE_DIR}/create_shortcuts.sh
|
|||
|
|
|||
|
# 创建安装脚本
|
|||
|
cat > ${PACKAGE_DIR}/install.sh << 'EOF'
|
|||
|
#!/bin/bash
|
|||
|
# 简单安装脚本
|
|||
|
|
|||
|
echo "📦 安装雷达检测系统..."
|
|||
|
|
|||
|
# 检查依赖
|
|||
|
echo "🔍 检查系统依赖..."
|
|||
|
missing_deps=()
|
|||
|
|
|||
|
if ! pkg-config --exists pcl_common 2>/dev/null; then
|
|||
|
missing_deps+=("libpcl-dev")
|
|||
|
fi
|
|||
|
|
|||
|
if ! pkg-config --exists yaml-cpp 2>/dev/null; then
|
|||
|
missing_deps+=("libyaml-cpp-dev")
|
|||
|
fi
|
|||
|
|
|||
|
if ! command -v espeak >/dev/null 2>&1; then
|
|||
|
missing_deps+=("espeak")
|
|||
|
fi
|
|||
|
|
|||
|
if [ ${#missing_deps[@]} -gt 0 ]; then
|
|||
|
echo "❌ 缺少依赖包:"
|
|||
|
printf '%s\n' "${missing_deps[@]}"
|
|||
|
echo ""
|
|||
|
echo "请运行以下命令安装依赖:"
|
|||
|
echo "sudo apt update"
|
|||
|
echo "sudo apt install ${missing_deps[*]}"
|
|||
|
echo ""
|
|||
|
read -p "是否现在安装依赖?(y/N): " -n 1 -r
|
|||
|
echo
|
|||
|
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
|||
|
sudo apt update
|
|||
|
sudo apt install -y "${missing_deps[@]}"
|
|||
|
else
|
|||
|
echo "⚠️ 请手动安装依赖后再运行程序"
|
|||
|
fi
|
|||
|
fi
|
|||
|
|
|||
|
# 复制到系统目录 (可选)
|
|||
|
read -p "是否安装到系统目录 /opt/yushu-radar?(y/N): " -n 1 -r
|
|||
|
echo
|
|||
|
SYSTEM_INSTALL=$REPLY
|
|||
|
if [[ $REPLY =~ ^[Yy]$ ]]; then
|
|||
|
sudo mkdir -p /opt/yushu-radar
|
|||
|
sudo cp -r * /opt/yushu-radar/
|
|||
|
sudo ln -sf /opt/yushu-radar/start.sh /usr/local/bin/yushu-radar
|
|||
|
echo "✅ 已安装到系统目录,可以使用 'yushu-radar' 命令启动"
|
|||
|
else
|
|||
|
echo "✅ 本地安装完成,使用 './start.sh' 启动程序"
|
|||
|
fi
|
|||
|
|
|||
|
# 询问是否创建快捷方式
|
|||
|
echo ""
|
|||
|
read -p "是否创建桌面和菜单快捷方式?(Y/n): " -n 1 -r
|
|||
|
echo
|
|||
|
if [[ ! $REPLY =~ ^[Nn]$ ]]; then
|
|||
|
echo "🔗 创建快捷方式..."
|
|||
|
./create_shortcuts.sh
|
|||
|
fi
|
|||
|
|
|||
|
echo ""
|
|||
|
echo "🎉 安装完成!"
|
|||
|
echo ""
|
|||
|
echo "📋 使用方法:"
|
|||
|
echo "1. 本地启动: ./start.sh"
|
|||
|
if [[ $SYSTEM_INSTALL =~ ^[Yy]$ ]]; then
|
|||
|
echo "2. 系统启动: yushu-radar"
|
|||
|
fi
|
|||
|
echo "3. 桌面快捷方式: 双击桌面图标"
|
|||
|
echo "4. 应用程序菜单: 搜索'雷达'"
|
|||
|
echo "5. 命令行快捷方式: yushu-radar"
|
|||
|
echo ""
|
|||
|
echo "⚠️ 重要提醒:"
|
|||
|
echo "如果遇到设备权限问题,请运行:"
|
|||
|
echo "sudo usermod -a -G dialout \$USER"
|
|||
|
echo "然后重新登录"
|
|||
|
EOF
|
|||
|
|
|||
|
chmod +x ${PACKAGE_DIR}/install.sh
|
|||
|
|
|||
|
# 创建使用说明
|
|||
|
cat > ${PACKAGE_DIR}/README.txt << 'EOF'
|
|||
|
雷达检测系统 - Linux版本
|
|||
|
|
|||
|
📋 功能特点:
|
|||
|
- 实时3D点云显示
|
|||
|
- 坐标轴和网格显示
|
|||
|
- 遮挡物检测 (20厘米预警)
|
|||
|
- 裂缝检测 (100米阈值)
|
|||
|
- 声音预警系统
|
|||
|
|
|||
|
📦 使用方法:
|
|||
|
|
|||
|
1. 安装依赖和程序:
|
|||
|
./install.sh
|
|||
|
|
|||
|
2. 启动程序:
|
|||
|
./start.sh
|
|||
|
|
|||
|
3. 如果遇到权限问题:
|
|||
|
sudo chmod 666 /dev/ttyUSB0
|
|||
|
或
|
|||
|
sudo usermod -a -G dialout $USER (需要重新登录)
|
|||
|
|
|||
|
🔗 快捷方式:
|
|||
|
安装后可通过以下方式启动:
|
|||
|
- 桌面快捷方式: 双击"雷达检测系统"图标
|
|||
|
- 应用程序菜单: 搜索"雷达"
|
|||
|
- 命令行: 输入 yushu-radar
|
|||
|
- 手动创建快捷方式: ./create_shortcuts.sh
|
|||
|
|
|||
|
📁 文件说明:
|
|||
|
- yushu_leida_fixed: 主程序
|
|||
|
- config/: 配置文件目录
|
|||
|
- start.sh: 启动脚本
|
|||
|
- install.sh: 安装脚本
|
|||
|
- create_shortcuts.sh: 快捷方式创建脚本
|
|||
|
- yushu-radar.desktop: 桌面快捷方式文件
|
|||
|
|
|||
|
🔧 配置文件:
|
|||
|
主要配置在 config/config.yaml 中:
|
|||
|
- port: 串口设备路径 (默认 /dev/ttyUSB0)
|
|||
|
- occlusion_detection.alert_distance: 遮挡物预警距离 (默认 0.20m)
|
|||
|
- slope_detection.crack_threshold: 裂缝检测阈值 (默认 100.0m)
|
|||
|
|
|||
|
❓ 故障排除:
|
|||
|
1. 找不到设备:检查雷达连接,查看 ls /dev/ttyUSB*
|
|||
|
2. 权限被拒绝:运行 sudo chmod 666 /dev/ttyUSB0
|
|||
|
3. 缺少依赖:运行 ./install.sh 自动安装
|
|||
|
4. 图形界面问题:确保X11转发正常 (远程连接时)
|
|||
|
5. 快捷方式问题:运行 ./create_shortcuts.sh 重新创建
|
|||
|
|
|||
|
版本:1.0.0
|
|||
|
EOF
|
|||
|
|
|||
|
# 创建压缩包
|
|||
|
echo "🗜️ 创建压缩包..."
|
|||
|
tar -czf yushu-radar-linux.tar.gz ${PACKAGE_DIR}/
|
|||
|
|
|||
|
echo ""
|
|||
|
echo "🎉 Linux软件包创建完成!"
|
|||
|
echo ""
|
|||
|
echo "📁 软件包目录: ${PACKAGE_DIR}/"
|
|||
|
echo "📦 压缩包: yushu-radar-linux.tar.gz"
|
|||
|
echo ""
|
|||
|
echo "🔗 新增功能:"
|
|||
|
echo "✅ 桌面快捷方式支持"
|
|||
|
echo "✅ 应用程序菜单集成"
|
|||
|
echo "✅ 命令行快捷方式"
|
|||
|
echo "✅ 自动快捷方式创建"
|
|||
|
echo ""
|
|||
|
echo "📋 分发方法:"
|
|||
|
echo "1. 直接使用目录: cd ${PACKAGE_DIR} && ./install.sh"
|
|||
|
echo "2. 分发压缩包: 解压后运行 ./install.sh"
|
|||
|
echo ""
|
|||
|
echo "✅ 用户只需要:"
|
|||
|
echo " tar -xzf yushu-radar-linux.tar.gz"
|
|||
|
echo " cd yushu-radar-linux"
|
|||
|
echo " ./install.sh"
|
|||
|
echo " # 然后可以通过多种方式启动程序"
|
|||
|
echo ""
|