TIAN-LEIDA-JIANCE/create_linux_package.sh

444 lines
10 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/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'
<?xml version="1.0" encoding="UTF-8"?>
<svg width="64" height="64" viewBox="0 0 64 64" xmlns="http://www.w3.org/2000/svg">
<rect width="64" height="64" fill="#2E86AB" rx="8"/>
<circle cx="32" cy="32" r="20" fill="none" stroke="#A23B72" stroke-width="2"/>
<circle cx="32" cy="32" r="12" fill="none" stroke="#F18F01" stroke-width="2"/>
<circle cx="32" cy="32" r="4" fill="#C73E1D"/>
<text x="32" y="52" text-anchor="middle" fill="white" font-family="Arial" font-size="8">RADAR</text>
</svg>
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 ""