环境配置:
环境:Ubuntu 18.04 + ROS Melodic(不能是虚拟机!!)
更新cmake版本,不然有些包无法编译:
第一步:卸载系统旧版本 CMake(可选,但避免冲突)
# 卸载默认的cmake 3.10.2
sudo apt remove –purge cmake
sudo apt autoremove
第二步:安装新版 CMake(3.28+,适配 Ubuntu 18.04)
Ubuntu 18.04 的官方源没有高版本 CMake,需从 CMake 官网下载预编译二进制包:
# 进入临时目录(方便清理)
cd /tmp
# 下载CMake 3.28.3预编译包(x86_64架构,适配Ubuntu 18.04)
wget https://github.com/Kitware/CMake/releases/download/v3.28.3/cmake-3.28.3-linux-x86_64.tar.gz
# 解压到/usr/local(系统级路径,全局可用)
sudo tar -zxvf cmake-3.28.3-linux-x86_64.tar.gz -C /usr/local
# 创建软链接(让系统识别cmake命令)
sudo ln -s /usr/local/cmake-3.28.3-linux-x86_64/bin/cmake /usr/bin/cmake
sudo ln -s /usr/local/cmake-3.28.3-linux-x86_64/bin/cpack /usr/bin/cpack
sudo ln -s /usr/local/cmake-3.28.3-linux-x86_64/bin/ctest /usr/bin/ctest
第三步:验证 CMake 版本(确认升级成功)
cmake –version
✅ 成功标志:输出cmake version 3.28.3(而非 3.10.2)。
安装基础常用功能包:
sudo apt install ros-melodic-joint-trajectory-controller #下载关节控制包
sudo apt install ros-melodic-moveit-core #下载moveit包
sudo apt install ros-melodic-gazebo-ros ros-melodic-gazebo-ros-pkgs ros-melodic-gazebo-ros-control #下载gazebo包
sudo apt install ros-melodic-tf-conversions
sudo apt install ros-melodic-robot-state-publisher
sudo apt install ros-melodic-joint-state-publisher ros-melodic-robot-state-publisher
sudo apt install libxrandr-dev libxinerama-dev libxcursor-dev libxi-dev
创建工作空间
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws
catkin_make #编译
source devel/setup.bash
安装 Elfin E03 功能包及其依赖:
cd ~/catkin_ws/src
git clone -b melodic https://github.com/huayan-robotics/elfin_robot.git
cd ..
rosdep install –from-paths src –ignore-src -r -y #安装需要的相关依赖
cd src
git clone https://github.com/OpenEtherCATsociety/SOEM.git #soem(Simple Open EtherCAT Master,轻量级 EtherCAT 主站库)没有 ROS Melodic 官方预编译的 deb 包(无法用apt install直接装),而你的elfin_ethercat_driver(埃尔芬机械臂 EtherCAT 驱动)依赖该库
#如果github无法克隆,就直接在虚拟机打开github仓库下载,然后拖到src目录下
cd ..
catkin_make #要在工作空间目录下编译
source devel/setup.bash
roslaunch elfin_robot_bringup elfin3_bringup.launch #启动 Elfin3 机器人的基本模型发布和状态发布服务,为后续的 RViz 可视化、MoveIt 运动规划、仿真或真实机器人控制做准。(Elfin E03 对应 elfin3 模型;配置 IP 为 192.168.1.10 或实际地址)。该包提供 API 如 /elfin_ros_control/elfin/get_current_cartesian_position 服务,用于实时获取 XYZWPR 位姿。
#启动rviz测试
#打开新终端
catkin_make #要在工作空间目录下编译
source devel/setup.bash
roslaunch elfin3_moveit_config moveit_planning_execution.launch #启动rviz,测试
部署librealsense SDK:
sudo apt install ros-melodic-realsense2-camera
sudo apt install ros-melodic-realsense2-description
安装 librealsense2-dkms librealsense2-utils librealsense2-dev功能包:

测试:
roslaunch realsense2_camera rs_camera.launch #(发布 /camera/color/image_raw、depth/image_rect_raw 和 /camera/color/camera_info 话题)。
realsense-viewer #打开gui界面测试
安装手眼标定工具:
easy_handeye(推荐,简单自动化):克隆到 src:
cd ~/catkin_ws/src
git clone https://github.com/IFL-CAMP/easy_handeye.git
安装依赖:
- rosdep install –from-paths src –ignore-src -r -y
- 然后 catkin_make。
- 备用:visp_hand2eye_calibration:sudo apt install ros-melodic-visp-hand2eye-calibration。
- OpenCV:ROS Melodic 默认包含 OpenCV 3.2;如果需更高版本,手动编译,但通常足够。
安装所需包(visp_hand2eye_calibration、aruco_ros、realsense2_camera、elfin_robot)
完整手眼标定过程:从硬件连接到软件启动和标定计算
设备型号:
大族 Han's Robot Elfin E03 机械臂
Intel RealSense D435 相机)
(相机固定在机械臂末端,标定板固定在外部)
准备工作
- 安全注意:确保机械臂启用低速模式(<250mm/s)
- 标定板:打印 ArUco marker(ID=582,大小80mm)。固定在工作台上,确保相机视野覆盖
- 电脑:Ubuntu 18.04,ROS Melodic 已安装,环境已经配置好。电脑需有 Ethernet 端口(机械臂以太网接口)和 USB 3.0 端口(相机)
步骤 1: 连接硬件设备
1.1 连接 Elfin E03 机械臂
- 电源连接:
- 将机械臂控制器电源线插入 220V AC 插座(确认电压匹配,手册指定 200-240V AC)。
- 按控制器上的电源开关打开(绿色灯亮表示正常)。
- Ethernet 连接:
- 用网线连接电脑 Ethernet 端口到控制器 LAN 端口(默认 IP: 192.168.0.10)。
- 在电脑设置静态 IP:打开设置 → 以太网→ IPv4 → 手动,IP: 192.168.0.99,子网: 255.255.255.0
- 测试连接:ping 192.168.0.10(应有响应)。
- 末端执行器连接:相机固定在末端 flange 上(用螺丝固定,确保稳定)。如果有工具,设置 TCP(Tool Center Point)在软件中调整。
- 安全连接:连接急停按钮和安全门(如果有),确保协作模式启用。
1.2 连接 RealSense D435 相机
- USB 连接:
- 用 USB 3.0 线缆连接相机到电脑 USB 3.0 端口(必须 3.0,否则深度数据丢帧)。
- 相机不需要外部电源(USB 供电)。
- 固定相机:
- 用螺丝或支架固定在机械臂末端 flange 上,镜头朝外。
- 确保线缆固定,不影响臂运动。
- 将usb接口切换到虚拟机下(虚拟机—可移动设备—-选择你的相机—-连接)
- 测试硬件:
- 打开终端运行 lsusb 检查设备,应该看到类似以下一行(关键是 8086:0b07 VID:PID,这是 D435 的 USB ID):
Bus 00X Device 00Y: ID 8086:0b07 Intel Corp. Intel(R) RealSense(TM) Depth Camera 435
用 RealSense Viewer 测试:rs-enumerate-devices #rs-enumerate-devices 是 Intel RealSense SDK(librealsense2)提供的核心命令行调试工具,核心作用是:扫描并列出当前系统上已连接的所有 Intel RealSense 深度相机的详细硬件信息、功能配置和连接状态,无需图形界面(如 realsense-viewer),是排查相机连接 / 驱动问题的首选工具 - 终端运行realsense-viewer进行测试,看看是否需要更新固件


-
rqt_image_view 实时查看相机图像
- 打开终端运行 lsusb 检查设备,应该看到类似以下一行(关键是 8086:0b07 VID:PID,这是 D435 的 USB ID):
步骤 2: 启动程序(软件环境)
- 每个终端先清理 Anaconda 干扰(复制以下到每个新终端):
export PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
unset PYTHONPATH
source /opt/ros/melodic/setup.bash
source ~/catkin_ws/devel/setup.bash - 启动顺序:
- roscore(主节点,终端1):
roscore
- 相机(终端2):
roslaunch realsense2_camera rs_camera.launch
- 测试:输入rostopic list 看是否有 /camera/color/image_raw话题。
- 机械臂(终端3):
roslaunch elfin_robot_bringup elfin3_bringup.launch
- 测试:rostopic echo /joint_states 看关节数据。
- 标定板检测(终端4,用 ArUco):
roslaunch aruco_ros single.launch markerId:=582 markerSize:=0.08 image:=/camera/color/image_raw camera_info:=/camera/color/camera_info marker_frame_name:=marker
- 测试:把标定板放进视野,rostopic echo /aruco_single/pose 看位姿数据。
- 标定服务器(终端5):
rosrun visp_hand2eye_calibration visp_hand2eye_calibration_calibrator
- 标定客户端(终端6,弹出 RViz):
rosrun visp_hand2eye_calibration visp_hand2eye_calibration_client
步骤 3: 执行标定计算
- RViz 打开后,移动臂,让标定板完整可见(ArUco 绿色框)。
- 按 s 保存样本(终端输出 added sample)。
- 重复 15-20 次(不同位姿)。
- 按 c 计算(输出 X 矩阵)。
- 按 q 退出。
步骤 4: 验证和使用 X
- X 输出如:
hand_camera:
translation:
x: 0.1
y: 0.2
z: 0.3
rotation:
x: 0.086
y: -0.086
z: 0.216
w: 0.969 - 发布 TF:
#在 ROS 的 TF(坐标系变换)系统中,发布一个相机与机械臂末端安装关系的「静态(固定不变)」的坐标变换关系
rosrun tf static_transform_publisher 0.1 0.2 0.3 0.086 -0.086 0.216 0.969 elfin_end_link camera_color_optical_frame 100 - 测试:用 RViz 查看 TF 树,确保连接正常。
如果报错,检查 IP、端口或重新 catkin_make。成功后,您的手眼标定就完成了!
验证标定精度(关键!避免白忙活)
标定后必须验证精度,否则无法确定转换矩阵是否可用。常用验证方法:
- 用求解出的 X,将机械臂末端的 3D 坐标(或标定板的 3D 坐标)投影到相机图像上,计算投影点与实际像素点的距离(重投影误差);
- 合格标准:平均误差 < 1 像素(误差越小,精度越高)。
- 原理: 既然标定板在地面上没动,那么通过不同位置的机械臂坐标和求得的 $X$,反推回去的标定板在基坐标系下的位置应该是完全重合的。
- 数学推理逻辑:

- 让相机识别一个已知尺寸的目标(如立方体),通过 X 转换得到目标在机械臂基坐标系下的坐标;
- 控制机械臂移动到该坐标进行抓取,观察是否能精准抓住(重复 5-10 次,成功率 > 90% 说明标定有效)。
- 让目标沿已知轨迹移动,相机实时输出目标坐标,通过 X 转换为机械臂关节指令,观察机械臂是否能精准跟踪目标(跟踪误差 <±0.5mm 为合格)。
影响标定精度的关键因素(避坑指南)
位姿单位(mm vs m)一致;D435 畸变需 undistortImage 处理
标定板务必测量并记录格子尺寸(精确到 0.1mm)
标定的精度依赖数据量和姿态分布,关键是 “让机械臂移动到不同位置,采集足够多的独立姿态”。需避免姿态重复




