Files
AutoCalib-Workshop/README.md
T

230 lines
10 KiB
Markdown
Raw Normal View History

2026-02-25 20:30:54 +08:00
# 🛠️ AutoCalib-Workshop: 传感器自动标定仿真车间
本项目基于 NVIDIA Isaac Sim 和 ROS 2,搭建了一个用于多传感器联合标定(Camera + LiDAR)的仿真车间环境。场景内置了 4 个全局机械式旋转激光雷达和标定相机,用于输出高精度的合成数据,以供标定算法和 SLAM 算法的测试与验证。
## 📑 目录
1. [环境依赖](#1-环境依赖)
2. [快速开始](#2-快速开始)
3. [输出的 ROS 2 话题](#3-输出的-ros-2-话题)
4. [团队协作与 Git 配置指南 (必读)](#4-团队协作与-git-配置指南-必读)
5. [开发与分支规范](#5-开发与分支规范)
2026-05-04 10:48:06 +08:00
6. [相关文档](#6-相关文档)
2026-02-25 20:30:54 +08:00
---
## 1. 环境依赖
本项目不依赖 Omniverse Launcher,而是采用 **纯 Python (pip) 安装的 Isaac Sim**,便于团队在不同机器(或云端服务器)上快速复现环境。
- **操作系统:** Ubuntu 22.04
- **ROS 2:** Humble Hawksbill
- **Python 环境:** Conda (Python 3.10)
- **仿真引擎:** Isaac Sim 4.2+ (`isaacsim` pip package)
---
## 2. 快速开始
### 2.1 克隆代码
> ⚠️ **注意**:如果您是本团队的开发者,请优先完成 [第 4 节的 Git 配置指南](#4-团队协作与-git-配置指南-必读),然后再克隆代码。
使用 HTTPS 方式克隆(无需提前配置 SSH):
```bash
2026-02-25 20:43:07 +08:00
git clone https://github.com/RuiLi-Class/AutoCalib-Workshop.git
2026-02-25 20:30:54 +08:00
cd AutoCalib-Workshop
```
### 2.2 配置虚拟环境与依赖
请确保机器上已安装 Miniconda 或 Anaconda。
```bash
# 创建并激活 Conda 环境
conda create -n AutoCalib_Workshop python=3.10 -y
conda activate AutoCalib_Workshop
# 安装 Isaac Sim 核心包 (基于 NVIDIA 官方源)
pip install isaacsim==4.2.0.2 isaacsim-extscache-physics==4.2.0.2 isaacsim-extscache-kit==4.2.0.2 isaacsim-extscache-kit-sdk==4.2.0.2 --extra-index-url https://pypi.nvidia.com
# 安装 boto3 botocore s3transfer 功能包,将下列脚本复制到终端执行
python -c """
import sys
import os
import glob
import subprocess
# 1. 动态获取当前的 Python 环境根目录 (例如 /home/nvidia/.../AutoCalib_Workshop)
env_base = sys.prefix
# 2. 使用通配符动态搜索 isaacsim 的 pip_prebundle 目录,无视具体版本号和系统用户名
search_pattern = os.path.join(env_base, 'lib', 'python*', 'site-packages', 'isaacsim', 'extscache', 'omni.kit.pip_archive*', 'pip_prebundle')
matches = glob.glob(search_pattern)
if not matches:
print('❌ 错误: 在当前环境中未找到 Isaac Sim 的 pip_prebundle 缓存目录。请确认 Isaac Sim 已正确安装。')
sys.exit(1)
prebundle_path = matches[0]
sys.path.insert(0, prebundle_path)
try:
import botocore
ver = botocore.__version__
print('=========================================')
print(f'[*] 成功动态定位到底层 botocore 路径: {prebundle_path}')
print(f'[*] Isaac Sim 内部的 botocore 版本为: {ver}')
print(f'[*] 正在为你安装完美匹配的 boto3=={ver} ...')
print('=========================================')
# 3. 强制安装匹配的 boto3
subprocess.check_call([sys.executable, '-m', 'pip', 'install', f'boto3=={ver}'])
print('[*] 🎉 修复完成!现在运行仿真脚本不会再报版本冲突错误了。')
except ImportError:
print('❌ 错误: 找到了目录,但里面没有 botocore 模块。')
"""
```
### 2.3 运行仿真车间
每次运行前,请务必先 source ROS 2 环境,否则底层的 ROS 2 Bridge 插件将无法加载并发布话题!
```bash
# 1. 激活 ROS 2 环境 (请根据实际安装路径调整)
source /opt/ros/humble/setup.bash
# 2. 激活 Python 虚拟环境
conda activate AutoCalib_Workshop
# 3. 启动仿真脚本
python build_calibration_room.py
```
---
## 3. 输出的 ROS 2 话题
脚本成功运行后,将在局域网内广播以下 ROS 2 话题。可直接使用 RViz2 订阅查看。
💡 **RViz2 可视化提示:** 必须将 RViz2 的 Fixed Frame 设置为 `World`,方可查看到静止、规整的 3D 车间点云。
| 数据类型 | 话题名称 (Topic) | 说明 |
|------------------| -------------------------------- | -------------------------------------------------- |
| TF 树 s | `/tf` | 包含所有雷达与相机的全局坐标关系 (World -> Lidar_xx) |
| 图像 |`/workshop/camera/image_raw` | 标定板对齐相机 (720p, 20Hz) |
| 点云 (前左) | `/workshop/lidar/fl/pointcloud` | 机械旋转雷达 FL (fullScan 模式聚合的 360° 全帧点云) |
| 点云 (前右) | `/workshop/lidar/fr/pointcloud` | 机械旋转雷达 FR (fullScan 模式聚合的 360° 全帧点云) |
| 点云 (后左) | `/workshop/lidar/bl/pointcloud` | 机械旋转雷达 BL (fullScan 模式聚合的 360° 全帧点云) |
| 点云 (后右) | `/workshop/lidar/br/pointcloud` | 机械旋转雷达 BR (fullScan 模式聚合的 360° 全帧点云) |
---
## 4. 团队协作与 Git 配置指南 (必读)
新加入的团队成员,请严格按照以下步骤配置本地 Git 环境,以便顺畅地与组织私有仓库进行交互(使用 HTTPS 方式)。
### 4.1 声明你的 Git 身份
在首次提交代码前,必须全局设置你的身份信息:
```bash
git config --global user.name "你的名字或GitHub用户名"
git config --global user.email "你注册GitHub的邮箱@example.com"
```
### 4.2 配置 HTTPS 访问 (使用 Personal Access Token)
由于 GitHub 已废弃密码验证,HTTPS 方式需要使用 **Personal Access Token (PAT)** 作为密码。请按以下步骤生成并配置 token:
1. **生成 Token**
- 登录 GitHub,点击右上角头像 → **Settings****Developer settings****Personal access tokens****Tokens (classic)**
- 点击 **Generate new token (classic)**
-**Note** 中输入用途说明(例如 “Isaac Sim 开发”)。
- 设置过期时间(建议选 90 天或自定义)。
-**Select scopes** 中勾选 **`repo`**(完全控制私有仓库)以及必要的 **`workflow`** 权限(如需操作 GitHub Actions)。
- 点击 **Generate token**,**立即复制并保存生成的 token**(页面刷新后将无法再次查看)。
2. **配置 Git 凭据存储(避免每次输入密码):**
```bash
# 启用 Git 凭据缓存(默认缓存 15 分钟)
git config --global credential.helper cache
# 或者使用更持久的存储(凭据将明文保存在磁盘,请确保系统安全)
git config --global credential.helper store
```
2026-03-05 17:14:14 +08:00
2026-02-25 20:30:54 +08:00
3. **首次推送时输入凭据:**
- 执行 `git push` 等需要鉴权的操作时,Git 会提示输入用户名和密码。
- **用户名**:输入你的 GitHub 用户名。
- **密码**:输入刚才生成的 Personal Access Token(不是你的登录密码)。
- 如果配置了 credential helper,后续操作将不再重复提示。
### 4.3 关键:切勿忽略 .gitignore
Isaac Sim 和 ROS 2 运行期间会产生海量的缓存文件(如 `*.usd.cache`、`__pycache__`、`log/` 等)。
**严禁将这些大文件推送到远程仓库!**
本仓库根目录已配置好 `.gitignore` 文件,请在执行 `git add .` 时确保不要使用 `-f` 强行添加被忽略的文件。
---
## 5. 开发与分支规范
为了保证代码库的稳定,请团队成员遵守以下 Git 协作工作流。
### 5.1 分支命名规范
在创建新分支时,请使用 **前缀/功能描述** 的格式(例如:`feature/lidar-sync`)。
| 前缀 | 适用场景 | 示例 |
| ---------- | -------------------------------------- | ----------------------------- |
| `feature/` | **新功能**:新增传感器、模型或标定算法 | `feature/add-calibration-node` |
| `bugfix/` | **修复错误**:解决代码逻辑、话题发布等 Bug | `bugfix/fix-tf-error` |
| `docs/` | **文档更新**:修改 README 或注释 | `docs/update-readme` |
| `refactor/`| **代码重构**:优化代码结构而不改变功能 | `refactor/clean-lidar-logic` |
| `test/` | **测试**:增加单元测试或仿真验证脚本 | `test/calibration-verify` |
### 5.2 保护主分支
绝对不要直接在 `main` 分支上开发和提交代码。`main` 分支仅用于存放稳定、经过测试的代码。
### 5.3 切分支干活
开始新功能开发(如编写新的标定算法节点)时,请从最新的 `main` 切出一个独立分支:
```bash
git checkout main
git pull origin main
git checkout -b feature/your_feature_name
```
### 5.4 提交与推送
```bash
git add .
git commit -m "feat: 添加了xxx功能"
git push origin feature/your_feature_name
```
### 5.5 代码合并 (Code Review)
开发完成后,请在 GitHub 页面上针对您的分支发起 **Pull Request (PR)**。由其他团队成员进行 Code Review,确认无误后再 Merge 合并入 `main` 分支。
---
2026-03-05 17:14:14 +08:00
关于大文件的处理(可选)
如果你希望优化仓库,可以考虑使用 Git LFS 管理大文件:
bash
复制
# 1. 安装 Git LFS
git lfs install
# 2. 追踪大文件(例如 .usd 文件)
git lfs track "*.usd"
# 3. 提交 .gitattributes 文件
git add .gitattributes
git commit -m "Add Git LFS tracking for large files"
2026-05-04 10:48:06 +08:00
⚠️ 注意:如果已经提交了大文件到历史记录,需要使用 git lfs migrate 来重写历史,否则只是追踪新文件。
---
## 6. 相关文档
本项目包含多个子模块,相关文档位置如下:
| 文档 | 路径 | 说明 |
|------|------|------|
| **AGV 标定系统总述** | [`agv_calib_brain/README.md`](./agv_calib_brain/README.md) | 自动化标定车间整体架构、核心能力、快速开始 |
| **仿真启动指南** | [`agv_calib_brain/SIMULATION_GUIDE.md`](./agv_calib_brain/SIMULATION_GUIDE.md) | 如何单独启动 Isaac 仿真各组件 |
| **源码目录说明** | [`agv_calib_brain/src/README.md`](./agv_calib_brain/src/README.md) | 源码组织结构、边界规则 |
| **Isaac 仿真车间** | 本文档 | Isaac Sim 环境配置、基础仿真运行 |