444 lines
10 KiB
Bash
444 lines
10 KiB
Bash
#!/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 "" |