hanyu 2 mēneši atpakaļ
vecāks
revīzija
f7072eaf95
4 mainītis faili ar 195 papildinājumiem un 0 dzēšanām
  1. 71 0
      README.md
  2. 38 0
      scripts/build.sh
  3. 53 0
      scripts/package.sh
  4. 33 0
      scripts/pull_submodules.sh

+ 71 - 0
README.md

@@ -0,0 +1,71 @@
+# Ghost
+
+ROS 2 机器人项目工作空间。
+
+## 项目结构
+
+```
+ghost/
+├── src/                 # 源代码(含子模块)
+├── build/               # 编译中间产物
+├── install/             # 编译输出(可执行文件、库、配置)
+├── log/                 # 编译日志
+└── scripts/             # 辅助脚本
+```
+
+## 子工程
+
+本项目包含以下 git submodules:
+
+| 路径 | 说明 |
+|------|------|
+| src/curise_sensor | 巡迹传感器 |
+| src/location-eagleye | Eagleye 定位 |
+| src/ssy_angle_control | 角度控制 |
+| src/nmea_ros_bridge | NMEA 串口桥接 |
+| src/llh_converter | 经纬度转换 |
+| src/rtklib_ros_bridge | RTKLIB 桥接 |
+| src/ghost_bringup | 启动配置 |
+
+## 快速开始
+
+### 1. 拉取子工程
+
+```bash
+./scripts/pull_submodules.sh
+```
+
+### 2. 配置 ROS 2 环境
+
+```bash
+source /opt/ros/humble/setup.bash   # 或 foxy、iron 等
+```
+
+### 3. 编译
+
+```bash
+./scripts/build.sh
+```
+
+### 4. 使用
+
+```bash
+source install/setup.bash
+# 启动相关节点...
+```
+
+## 打包部署
+
+将编译产出打包为 tar.gz 便于部署:
+
+```bash
+./scripts/package.sh
+```
+
+默认生成 `ghost_install_YYYYMMDD_HHMMSS.tar.gz`。可自定义:
+
+```bash
+OUTPUT_DIR=/tmp PACKAGE_NAME=ghost_release.tar.gz ./scripts/package.sh
+```
+
+解压部署:`tar -xzvf ghost_install_*.tar.gz -C /目标路径/`

+ 38 - 0
scripts/build.sh

@@ -0,0 +1,38 @@
+#!/bin/bash
+# 编译脚本
+# 使用 colcon 编译 ROS 2 工作空间
+
+set -e
+
+SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
+REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
+
+cd "$REPO_ROOT"
+
+echo "=========================================="
+echo "  编译 Ghost 工程"
+echo "=========================================="
+
+# 检查是否已 source ROS 2 环境
+if [ -z "$ROS_DISTRO" ]; then
+    echo "警告: 未检测到 ROS 2 环境"
+    echo "请先执行: source /opt/ros/<distro>/setup.bash"
+    echo "例如: source /opt/ros/humble/setup.bash"
+    read -p "是否继续? (y/n): " -n 1 -r
+    echo
+    if [[ ! $REPLY =~ ^[Yy]$ ]]; then
+        exit 1
+    fi
+fi
+
+# 创建 build 和 install 目录(colcon 会自动创建,但可显式指定)
+mkdir -p build install log
+
+# 编译
+echo ">>> 开始编译..."
+colcon build --symlink-install "$@"
+
+echo ""
+echo "完成: 编译成功"
+echo "安装目录: $REPO_ROOT/install"
+echo "使用前请执行: source $REPO_ROOT/install/setup.bash"

+ 53 - 0
scripts/package.sh

@@ -0,0 +1,53 @@
+#!/bin/bash
+# 打包编译产出脚本
+# 将 install 目录打包为 tar.gz 便于部署
+
+set -e
+
+SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
+REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
+
+cd "$REPO_ROOT"
+
+# 默认输出目录和包名
+OUTPUT_DIR="${OUTPUT_DIR:-$REPO_ROOT}"
+TIMESTAMP=$(date +%Y%m%d_%H%M%S)
+PACKAGE_NAME="${PACKAGE_NAME:-ghost_install_$TIMESTAMP}.tar.gz"
+
+echo "=========================================="
+echo "  打包编译产出"
+echo "=========================================="
+
+# 检查 install 目录是否存在
+if [ ! -d "install" ]; then
+    echo "错误: 未找到 install 目录,请先执行编译"
+    exit 1
+fi
+
+# 检查 install 目录是否为空
+if [ ! -f "install/setup.sh" ] && [ ! -f "install/local_setup.sh" ]; then
+    echo "错误: install 目录为空或未完成编译"
+    exit 1
+fi
+
+# 创建输出目录
+mkdir -p "$OUTPUT_DIR"
+
+PACKAGE_PATH="$OUTPUT_DIR/$PACKAGE_NAME"
+
+echo ">>> 打包中: install/ -> $PACKAGE_PATH"
+
+# 打包 install 目录,排除临时文件
+tar -czvf "$PACKAGE_PATH" \
+    --exclude='*.pyc' \
+    --exclude='__pycache__' \
+    --exclude='*.log' \
+    -C "$REPO_ROOT" \
+    install
+
+echo ""
+echo "完成: 打包成功"
+echo "输出文件: $PACKAGE_PATH"
+echo "文件大小: $(du -h "$PACKAGE_PATH" | cut -f1)"
+echo ""
+echo "解压部署: tar -xzvf $PACKAGE_NAME -C /目标路径/"

+ 33 - 0
scripts/pull_submodules.sh

@@ -0,0 +1,33 @@
+#!/bin/bash
+# 拉取子工程脚本
+# 用于初始化并更新 git submodules
+
+set -e
+
+SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
+REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
+
+cd "$REPO_ROOT"
+
+echo "=========================================="
+echo "  拉取子工程 (Git Submodules)"
+echo "=========================================="
+
+# 检查是否存在 .gitmodules
+if [ ! -f .gitmodules ]; then
+    echo "错误: 未找到 .gitmodules 文件"
+    exit 1
+fi
+
+# 初始化子模块(首次克隆时)
+echo ">>> 初始化子模块..."
+git submodule init
+
+# 拉取并更新子模块
+echo ">>> 拉取子模块..."
+git submodule update --init --recursive --remote
+
+echo ""
+echo "完成: 所有子工程已拉取完成"
+echo "子模块列表:"
+git submodule status