TIAN-LEIDA-JIANCE/quick_linux_package.sh

352 lines
9.6 KiB
Bash
Raw Normal View History

#!/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 ""