Files
AutoCalib-Workshop/README.md
T

230 lines
10 KiB
Markdown
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.
# 🛠️ 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-开发与分支规范)
6. [相关文档](#6-相关文档)
---
## 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
git clone https://github.com/RuiLi-Class/AutoCalib-Workshop.git
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
```
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` 分支。
---
关于大文件的处理(可选)
如果你希望优化仓库,可以考虑使用 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"
⚠️ 注意:如果已经提交了大文件到历史记录,需要使用 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 环境配置、基础仿真运行 |