#!/bin/bash # 宇树雷达检测系统 - Linux软件包创建脚本 set -e echo "🚀 创建宇树雷达检测系统Linux软件包..." # 版本信息 VERSION="1.0.0" PACKAGE_NAME="yushu-radar-detector" PACKAGE_DIR="linux-package" INSTALL_DIR="/opt/yushu-radar" DESKTOP_DIR="/usr/share/applications" ICON_DIR="/usr/share/pixmaps" # 清理旧的包目录 rm -rf ${PACKAGE_DIR} mkdir -p ${PACKAGE_DIR} echo "📦 准备软件包结构..." # 创建目录结构 mkdir -p ${PACKAGE_DIR}/{bin,lib,config,docs,scripts,desktop} # 1. 编译程序 echo "🔨 编译程序..." if [ ! -d "build" ]; then mkdir build fi cd build cmake .. -DCMAKE_BUILD_TYPE=Release make -j$(nproc) yushu_leida_fixed if [ ! -f "yushu_leida_fixed" ]; then echo "❌ 编译失败" exit 1 fi cd .. # 2. 复制主程序 echo "📁 复制程序文件..." cp build/yushu_leida_fixed ${PACKAGE_DIR}/bin/ chmod +x ${PACKAGE_DIR}/bin/yushu_leida_fixed # 3. 复制配置文件 cp -r config/* ${PACKAGE_DIR}/config/ # 4. 复制宇树SDK库文件 echo "📚 复制依赖库..." UNITREE_LIB="unilidar_sdk-main/unilidar_sdk-main/unitree_lidar_sdk/lib/x86_64/libunitree_lidar_sdk.a" if [ -f "$UNITREE_LIB" ]; then cp "$UNITREE_LIB" ${PACKAGE_DIR}/lib/ fi # 5. 创建启动脚本 echo "📝 创建启动脚本..." cat > ${PACKAGE_DIR}/bin/yushu-radar << 'EOF' #!/bin/bash # 宇树雷达检测系统启动脚本 # 设置环境变量 export YUSHU_RADAR_HOME="/opt/yushu-radar" export LD_LIBRARY_PATH="$YUSHU_RADAR_HOME/lib:$LD_LIBRARY_PATH" # 检查设备权限 check_device_permissions() { local devices=("/dev/ttyUSB0" "/dev/ttyUSB1" "/dev/ttyACM0") local found_device="" for device in "${devices[@]}"; do if [ -e "$device" ]; then found_device="$device" break fi done if [ -z "$found_device" ]; then echo "⚠️ 未找到雷达设备,请检查连接" echo "可用设备:" ls -l /dev/ttyUSB* /dev/ttyACM* 2>/dev/null || echo "无串口设备" return 1 fi if [ ! -r "$found_device" ] || [ ! -w "$found_device" ]; then echo "⚠️ 设备权限不足:$found_device" echo "请运行:sudo chmod 666 $found_device" echo "或将用户添加到dialout组:sudo usermod -a -G dialout $USER" return 1 fi echo "✅ 设备检查通过:$found_device" return 0 } # 检查依赖 check_dependencies() { local missing_deps=() # 检查PCL if ! pkg-config --exists pcl_common; then missing_deps+=("libpcl-dev") fi # 检查yaml-cpp if ! pkg-config --exists yaml-cpp; then missing_deps+=("libyaml-cpp-dev") fi # 检查espeak (语音) 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 "请运行:sudo apt install ${missing_deps[*]}" return 1 fi return 0 } # 主函数 main() { echo "🚀 启动宇树雷达检测系统..." # 切换到程序目录 cd "$YUSHU_RADAR_HOME" # 检查依赖 if ! check_dependencies; then exit 1 fi # 检查设备权限 if ! check_device_permissions; then exit 1 fi # 启动程序 echo "🎯 启动主程序..." exec "$YUSHU_RADAR_HOME/bin/yushu_leida_fixed" } # 处理命令行参数 case "$1" in --check) check_dependencies && check_device_permissions ;; --help) echo "宇树雷达检测系统" echo "用法:" echo " yushu-radar 启动程序" echo " yushu-radar --check 检查系统依赖" echo " yushu-radar --help 显示帮助" ;; *) main ;; esac EOF chmod +x ${PACKAGE_DIR}/bin/yushu-radar # 6. 创建桌面文件 echo "🖥️ 创建桌面应用..." cat > ${PACKAGE_DIR}/desktop/yushu-radar.desktop << 'EOF' [Desktop Entry] Version=1.0 Type=Application Name=宇树雷达检测系统 Name[en]=Unitree Radar Detection System Comment=坡面裂缝和遮挡物检测系统 Comment[en]=Slope crack and occlusion detection system Exec=/opt/yushu-radar/bin/yushu-radar Icon=yushu-radar Terminal=true Categories=Science;Engineering; Keywords=radar;detection;lidar;unitree; StartupNotify=true EOF # 7. 创建图标 (简单的文本图标) echo "🎨 创建应用图标..." cat > ${PACKAGE_DIR}/desktop/yushu-radar.svg << 'EOF' RADAR EOF # 8. 创建安装脚本 echo "⚙️ 创建安装脚本..." cat > ${PACKAGE_DIR}/install.sh << 'EOF' #!/bin/bash # 宇树雷达检测系统安装脚本 set -e INSTALL_DIR="/opt/yushu-radar" DESKTOP_FILE="/usr/share/applications/yushu-radar.desktop" ICON_FILE="/usr/share/pixmaps/yushu-radar.svg" BIN_LINK="/usr/local/bin/yushu-radar" echo "🚀 安装宇树雷达检测系统..." # 检查权限 if [ "$EUID" -ne 0 ]; then echo "❌ 请使用sudo运行此脚本" exit 1 fi # 1. 创建安装目录 echo "📁 创建安装目录..." mkdir -p "$INSTALL_DIR" # 2. 复制文件 echo "📦 复制程序文件..." cp -r bin lib config docs "$INSTALL_DIR/" # 3. 设置权限 chmod +x "$INSTALL_DIR/bin/yushu_leida_fixed" chmod +x "$INSTALL_DIR/bin/yushu-radar" # 4. 创建符号链接 echo "🔗 创建系统链接..." ln -sf "$INSTALL_DIR/bin/yushu-radar" "$BIN_LINK" # 5. 安装桌面文件 echo "🖥️ 安装桌面应用..." cp desktop/yushu-radar.desktop "$DESKTOP_FILE" cp desktop/yushu-radar.svg "$ICON_FILE" # 6. 更新桌面数据库 if command -v update-desktop-database >/dev/null 2>&1; then update-desktop-database /usr/share/applications fi # 7. 安装依赖 echo "📚 检查并安装依赖..." apt update apt install -y libpcl-dev libyaml-cpp-dev espeak # 8. 设置用户组权限 echo "👥 配置用户权限..." if ! getent group dialout >/dev/null; then groupadd dialout fi # 提示用户添加到dialout组 echo "" echo "✅ 安装完成!" echo "" echo "📋 使用方法:" echo "1. 命令行启动:yushu-radar" echo "2. 图形界面:在应用菜单中找到'宇树雷达检测系统'" echo "" echo "⚠️ 重要提醒:" echo "请将当前用户添加到dialout组以访问串口设备:" echo "sudo usermod -a -G dialout \$USER" echo "然后重新登录或重启系统" echo "" EOF chmod +x ${PACKAGE_DIR}/install.sh # 9. 创建卸载脚本 cat > ${PACKAGE_DIR}/uninstall.sh << 'EOF' #!/bin/bash # 宇树雷达检测系统卸载脚本 INSTALL_DIR="/opt/yushu-radar" DESKTOP_FILE="/usr/share/applications/yushu-radar.desktop" ICON_FILE="/usr/share/pixmaps/yushu-radar.svg" BIN_LINK="/usr/local/bin/yushu-radar" echo "🗑️ 卸载宇树雷达检测系统..." # 检查权限 if [ "$EUID" -ne 0 ]; then echo "❌ 请使用sudo运行此脚本" exit 1 fi # 删除文件 rm -rf "$INSTALL_DIR" rm -f "$DESKTOP_FILE" rm -f "$ICON_FILE" rm -f "$BIN_LINK" # 更新桌面数据库 if command -v update-desktop-database >/dev/null 2>&1; then update-desktop-database /usr/share/applications fi echo "✅ 卸载完成" EOF chmod +x ${PACKAGE_DIR}/uninstall.sh # 10. 创建文档 echo "📖 创建文档..." cat > ${PACKAGE_DIR}/docs/README.md << 'EOF' # 宇树雷达检测系统 ## 功能特点 - 🎯 实时3D点云显示 - 📊 坐标轴和网格显示 - ⚠️ 遮挡物检测 (20厘米预警) - 🔍 裂缝检测 (100米阈值) - 🔊 声音预警系统 - 🖥️ 图形化界面 ## 系统要求 - Ubuntu 18.04 或更高版本 - PCL (Point Cloud Library) - yaml-cpp - espeak (语音合成) - 宇树雷达设备 ## 安装方法 ```bash sudo ./install.sh ``` ## 使用方法 ### 命令行启动 ```bash yushu-radar ``` ### 图形界面启动 在应用菜单中找到"宇树雷达检测系统" ### 检查系统状态 ```bash yushu-radar --check ``` ## 配置文件 配置文件位于:`/opt/yushu-radar/config/config.yaml` 主要配置项: - `port`: 串口设备路径 - `occlusion_detection.alert_distance`: 遮挡物预警距离 - `slope_detection.crack_threshold`: 裂缝检测阈值 ## 故障排除 ### 设备权限问题 ```bash sudo chmod 666 /dev/ttyUSB0 # 或 sudo usermod -a -G dialout $USER ``` ### 依赖包问题 ```bash sudo apt install libpcl-dev libyaml-cpp-dev espeak ``` ## 卸载 ```bash sudo ./uninstall.sh ``` EOF # 11. 创建打包脚本 cat > ${PACKAGE_DIR}/package.sh << 'EOF' #!/bin/bash # 创建分发包 VERSION="1.0.0" PACKAGE_NAME="yushu-radar-detector-${VERSION}" echo "📦 创建分发包..." # 创建tar.gz包 cd .. tar -czf "${PACKAGE_NAME}.tar.gz" linux-package/ echo "✅ 创建完成: ${PACKAGE_NAME}.tar.gz" # 创建deb包 (如果有dpkg-deb) if command -v dpkg-deb >/dev/null 2>&1; then echo "📦 创建DEB包..." mkdir -p deb-package/DEBIAN cat > deb-package/DEBIAN/control << DEBEOF Package: yushu-radar-detector Version: ${VERSION} Section: science Priority: optional Architecture: amd64 Depends: libpcl-dev, libyaml-cpp-dev, espeak Maintainer: Yushu Radar Team Description: 宇树雷达检测系统 坡面裂缝和遮挡物检测系统,支持实时3D点云显示和智能预警。 DEBEOF # 复制文件到deb结构 mkdir -p deb-package/opt/yushu-radar cp -r linux-package/{bin,lib,config,docs} deb-package/opt/yushu-radar/ mkdir -p deb-package/usr/share/applications cp linux-package/desktop/yushu-radar.desktop deb-package/usr/share/applications/ mkdir -p deb-package/usr/share/pixmaps cp linux-package/desktop/yushu-radar.svg deb-package/usr/share/pixmaps/ mkdir -p deb-package/usr/local/bin ln -sf /opt/yushu-radar/bin/yushu-radar deb-package/usr/local/bin/yushu-radar dpkg-deb --build deb-package "${PACKAGE_NAME}.deb" echo "✅ DEB包创建完成: ${PACKAGE_NAME}.deb" fi EOF chmod +x ${PACKAGE_DIR}/package.sh echo "" echo "🎉 Linux软件包创建完成!" echo "" echo "📁 软件包位置: ${PACKAGE_DIR}/" echo "" echo "📋 使用方法:" echo "1. 安装: cd ${PACKAGE_DIR} && sudo ./install.sh" echo "2. 启动: yushu-radar" echo "3. 卸载: sudo ./uninstall.sh" echo "" echo "📦 创建分发包: cd ${PACKAGE_DIR} && ./package.sh" echo ""