Eye-to-Base Calibration Guide
1 Environment Setup
Hardware equipment used:
-
Agile Alicia D650/750 single follower arm;
-
ORBBEC camera;
-
Aruco module
Aruco Calibration Code
Visit the following website
Click open
to print A4 PDF, cut the printed Aruco code to an appropriate size, attach it to a cardboard, and mount it on the gripper.
Camera Preparation
Fix the camera position using a camera mount or other tools, ensuring that the camera's field of view includes the Aruco code to be recognized.
The camera needs to include an RGB lens and be able to read RGB images.
2 Related ROS Libraries and Dependencies Installation
2.1 Camera ROS Library
Camera device query:
v4l2-ctl --list-devices
You will get information like this:
Orbbec DaBai DCW RGB Camera: Or (usb-0000:00:14.0-1.3):
/dev/video0
/dev/video1
After confirming it's an Orbbec type camera, install the corresponding ROS library:
mkdir -p camera_ws/src
cd camera_ws/src
git clone https://github.com/orbbec/OrbbecSDK_ROS1?tab=readme-ov-file
cd ..
catkin_make
roscd orbbec_camera
sudo bash ./scripts/install_udev_rules.sh
echo "source ~/camera_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
Then run the following commands in two separate terminals to start the camera:
roscore
roslaunch orbbec_camera dabai_dcw.launch
After startup, open a new terminal and enter:
rostopic list
Ensure the following topics appear:
/camera/color/camera_info
/camera/color/image_raw
Topic names may differ for different cameras. Launch
rqt_image_view
in the terminal to check image information for different topics. Topics that can display RGB images are suitable for calibration, typically ending withcolor/image_raw
.
2.2 Calibration ROS Library
2.2.1 Calibration Library Installation
cd ~/camera_ws/src
git clone https://gitcode.com/gh_mirrors/ea/easy_handeye.git
cd ..
rosdep install -iyr --from-paths src
# or rosdepc install -iyr --from-paths src
catkin_make
source devel/setup.bash
2.2.2 Aruco Library Installation
sudo apt update
sudo apt install ros-${ROS_DISTRO}-aruco-ros
3 Calibration Code
3.1 Calibration Launch Code
roscd easy_handeye/launch
touch alicia_orbbec_calibration.launch
Enter the following content in the newly created launch file:
<launch>
<arg name="namespace_prefix" default="orbbec_handeyecalibration" />
<arg name="marker_size" doc="Size of the ArUco marker used, in meters" default="0.1"/>
<arg name="marker_id" doc="The ID of the ArUco marker used" default="100"/>
<!-- ============================================================== -->
<!-- == Launch MoveIt Control for Robot == -->
<!-- ============================================================== -->
<include file="$(find alicia_duo_moveit)/launch/real_robot_control.launch">
</include>
<!-- ============================================================== -->
<!-- == Launch Orbbec Camera == -->
<!-- ============================================================== -->
<include file="$(find orbbec_camera)/launch/dabai_dcw.launch">
</include>
<!-- ============================================================== -->
<!-- == Launch ArUco == -->
<!-- ============================================================== -->
<node name="aruco_tracker" pkg="aruco_ros" type="single">
<remap from="/camera_info" to="/camera/color/camera_info" />
<remap from="/image" to="/camera/color/image_raw" />
<param name="image_is_rectified" value="true"/>
<param name="marker_size" value="$(arg marker_size)"/>
<param name="marker_id" value="$(arg marker_id)"/>
<!-- Publish ArUco results relative to camera_link (use correct camera coordinate system name) -->
<param name="reference_frame" value="camera_link"/>
<!-- Published marker coordinate system name -->
<param name="marker_frame" value="camera_marker" />
</node>
<!-- ============================================================== -->
<!-- == Launch easy_handeye == -->
<!-- ============================================================== -->
<include file="$(find easy_handeye)/launch/calibrate.launch" >
<arg name="namespace_prefix" value="$(arg namespace_prefix)" />
<arg name="eye_on_hand" value="false" /> <!-- Eye-on-Base configuration -->
<!-- Camera base coordinate system (TF published from here) -->
<arg name="tracking_base_frame" value="camera_link" />
<!-- Detected marker coordinate system (published by ArUco) -->
<arg name="tracking_marker_frame" value="camera_marker" />
<!-- Robot base coordinate system -->
<arg name="robot_base_frame" value="base_link" />
<!-- Which link the marker is attached to -->
<arg name="robot_effector_frame" value="tool0" />
<!-- tool0 or Link06 -->
<arg name="freehand_robot_movement" value="false" />
<arg name="robot_velocity_scaling" value="0.5" />
<arg name="robot_acceleration_scaling" value="0.2" />
</include>
</launch>
Modify the highlighted code sections, where orbbec_handeyecalibration
is the calibration result file name, and change marker_size
and marker_id
to match the specific size and number of the downloaded Aruco code (use a ruler to verify if the printed size matches the theoretical size).
Replace the camera launch below with the actual camera launch file:
<include file="$(find orbbec_camera)/launch/dabai_dcw.launch">
</include>
Finally, robot_effector_frame
can be either Link06
or tool0
, the former goes to the robotic arm end, the latter goes to the gripper tip.