# ecalib **Repository Path**: dragonlalala/ecalib ## Basic Information - **Project Name**: ecalib - **Description**: 自动化标定激光雷达和相机的外参 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-12 - **Last Updated**: 2025-12-13 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 基于LiDAR和相机的外参标定项目 (ecalib) ### 项目概述 使用Python+ROS1实现基于LiDAR和相机的外参标定,核心思想参考extrinsic_lidar_camera_calibration项目中的Matlab代码。支持Ouster OS1-32旋转雷达和单目彩色相机的标定。 ### 系统要求 - Ubuntu 18.04/20.04 - ROS Melodic/Noetic - Python 3.6+ ### 项目模块 1. **rosbag管理模块**:读取、播放、图片提取等功能 2. **图像数据预处理模块**:图像预处理、AprilTag识别、标定板角点提取 3. **标定板识别模块**:AprilTag识别、标定板四角点提取 4. **激光点云数据预处理模块**:点云滤波、标定板点云提取、L1成本函数优化 ### 安装和使用步骤 #### 1. 创建ROS工作空间并克隆项目 ```bash # 创建工作空间目录 mkdir -p ~/ecalib_ws/src # 进入src目录并克隆项目 cd ~/ecalib_ws/src # 编译工作空间 cd ~/ecalib_ws catkin_make # 激活工作空间 source devel/setup.bash ``` #### 2. 安装依赖 ```bash # 安装系统依赖 sudo apt-get install python3-pip python3-rosdep python3-catkin-tools # 安装Python依赖 pip3 install apriltag python-pcl numpy opencv-python # 安装ROS依赖 rosdep install --from-paths src --ignore-src -r -y ``` #### 3. 配置参数文件 编辑`config/calibration.yaml`文件,根据实际情况修改以下参数: ```yaml # 相机内参(必须修改) camera_intrinsics: fx: 2633.59836424 # 焦距x fy: 2631.02294407 # 焦距y cx: 971.64109562 # 主点x cy: 613.88512988 # 主点y # 相机畸变系数(必须修改) camera_distortion: k1: -0.49030989 # 径向畸变系数 k2: 0.23677133 # 径向畸变系数 p1: 0.00135158 # 切向畸变系数 p2: 0.00032218 # 切向畸变系数 k3: 0.000000 # 径向畸变系数(可选) # 标定数据参数(必须修改) calibration_params: bag_path: "/home/ljg/apps/output/bags/FILE2025121106.bag" # rosbag文件路径 image_topic: "/camera/mipi_image" # 相机图像话题 pointcloud_topic: "/os_cloud_node/points" # LiDAR点云话题 tag_family: "tag36h11" # AprilTag家族 tag_size: 0.57 # AprilTag尺寸(米) board_size: 0.6 # 标定板边长(米) ``` 可根据实际情况选择性修改以下高级参数: - `initial_guess`: LiDAR到相机的初始变换猜测 - `passthrough_filter`: 点云直通滤波参数 - `distance_range`: 标定板到LiDAR的距离范围 - `corner_order`: 角点排序特征 - `visualize_params`: 可视化开关 #### 4. 设置脚本执行权限 ```bash # 给主脚本设置执行权限 chmod +x ~/ecalib_ws/src/ecalib/main.py ``` #### 5. 编译项目 ```bash cd ~/ecalib_ws catkin_make source devel/setup.bash ``` #### 6. 运行标定 ```bash roslaunch ecalib calibration.launch # 也可以直接定位到main.py文件运行 cd ~/ecalib_ws/src/ecalib python3 main.py ``` #### 6.1 运行测试 ```bash # 运行测试用例 cd ~/ecalib_ws/src/ecalib/tests python3 test_calibration.py python3 test_preprocessor.py python3 test_pointcloud_preprocessor.py ``` #### 7. 查看结果 标定完成后,结果将保存在`output/`目录下: - `extrinsic_calibration.yaml`: 外参结果 - `pic_*.jpg`: 中间处理图像 - `visualization_*.png`: 结果可视化 ### 修改指南 #### 1. 参数文件修改 (config/calibration.yaml) 这是最主要的修改文件,几乎所有标定参数都在此配置。 #### 2. 图像预处理模块 (image_preprocessor.py) - 可修改AprilTag识别算法 - 可调整标定板角点提取逻辑 - 可优化图像预处理流程 #### 3. 点云预处理模块 (pointcloud_preprocessor.py) - 可修改点云滤波算法 - 可调整标定板点云提取策略 - 可优化L1成本函数实现 #### 4. 主标定流程 (main.py) - 可调整标定流程顺序 - 可修改优化算法 - 可添加新的标定功能 #### 5. 测试文件 (tests/) - 可添加新的测试用例 - 可修改测试数据 - 可优化测试流程 ### 数据采集说明 1. 使用带有AprilTag的正方形标定板(边长0.6米,中间AprilTag尺寸0.57米x0.57米) 2. 将标定板放置在相机前方,每个场景静置采集10秒左右 3. 移动采集系统到不同角度和距离,重复采集 ### 注意事项 - 确保ROS环境已经正确配置 - 确保rosbag文件包含正确的图像和点云话题 - 确保标定板在采集过程中保持静止 - 标定结果不理想时,可尝试调整滤波参数和距离范围 ### 许可证 MIT License