realsense 手眼标定 ros
时间: 2025-05-09 14:17:27 浏览: 31
### Realsense 手眼标定 ROS 实现方法
#### 一、手眼标定概述
手眼标定的目标是确定相机坐标系与机器人坐标系之间的相对关系。根据相机的位置不同,分为两种情况:Eye-to-hand 和 Eye-in-hand[^3]。
- **Eye-to-hand**(眼在手外):标定的是相机坐标系相对于机器人基座坐标系的位姿。
- **Eye-in-hand**(眼在手上):标定的是相机坐标系相对于机器人工具坐标系的位姿。
#### 二、环境准备
为了完成基于 Realsense 的手眼标定,在 ROS 环境下需要安装以下依赖包:
1. **aruco_ros**: 提供 ArUco 标记检测功能,用于辅助标定过程。
```bash
mkdir eye_out_hand/src && cd eye_out_hand/src
git clone https://github.com/pal-robotics/aruco_ros.git
```
2. **easy_handeye**: 提供简单易用的手眼标定接口。
```bash
git clone https://github.com/IFL-CAMP/easy_handeye.git
```
3. **realsense-ros**: 支持 Intel RealSense 相机的功能包。
```bash
git clone https://github.com/IntelRealSense/realsense-ros.git
```
4. **机械臂控制包**: 针对具体型号的机械臂驱动程序和控制器配置文件需单独下载并编译。
#### 三、启动流程
##### (1)Eye-to-hand 标定
对于 Eye-to-hand 场景,可以运行如下命令来启动标定界面:
```bash
cd realsense_wc
roslaunch easy_handeye eye_to_hand_calibration1.launch
```
此 Launch 文件会加载必要的节点和服务,并通过 GUI 或 CLI 完成交互式标定操作[^2]。
##### (2)Eye-in-hand 标定
如果目标是 Eye-in-hand,则可以通过指定参数 `eye_on_hand` 来调整设置:
```xml
<arg name="eye_on_hand" value="false"/>
<tracking_base_frame>camera_color_optical_frame</tracking_base_frame>
<tracking_marker_frame>camera_marker</tracking_marker_frame>
<robot_base_frame>base_link</robot_base_frame>
<robot_effector_frame>tool0</robot_effector_frame>
```
随后执行对应的 Launch 脚本:
```bash
roslaunch easy_handeye ur5_realsense_handeyecalibration.launch
```
上述脚本适用于 UR5 机械臂搭配 RealSense D435 的场景,其中各帧定义遵循标准命名约定[^4]。
#### 四、注意事项
- 在实际应用中,确保所有硬件设备正常连接至主机,并验证网络通信状态良好。
- 使用 RViz 工具可视化各个坐标系及其变换矩阵,便于调试和确认最终结果准确性。
- 如果遇到特定错误提示,请查阅官方文档或社区论坛获取解决方案。
---
### 示例代码片段
以下是部分 Python 脚本示例,展示如何订阅标定后的数据流:
```python
import rospy
from sensor_msgs.msg import Image, CameraInfo
from cv_bridge import CvBridge
def callback(data):
bridge = CvBridge()
image = bridge.imgmsg_to_cv2(data, desired_encoding='bgr8')
# 处理图像逻辑...
if __name__ == '__main__':
rospy.init_node('hand_eye_subscriber', anonymous=True)
sub = rospy.Subscriber('/camera/color/image_raw', Image, callback)
rospy.spin()
```
---
阅读全文
相关推荐


















