Autonomous Manipulation Pipeline UR3e lab setup
ENME480 · Fall 2025 · University of Maryland

Autonomous Manipulation Pipeline

6-DOF Robotic Arm · Perception · Kinematics · Control

Year2025
CourseENME480
RoleLead Engineer
PlatformUniversal Robots UR3e
Accuracy2–5 mm validated

This project was the final deliverable for ENME480, a robotics course at the University of Maryland, completed in Fall 2025. The objective was to design and implement a complete autonomous manipulation pipeline for a 6-DOF industrial robotic arm — a system that could detect colored geometric blocks placed at arbitrary locations on a workspace, compute the joint trajectories needed to reach them, and stack them at defined target positions, entirely without human input. Every layer of the robotics stack was built from scratch: camera calibration, perception, coordinate frame transformation, forward and inverse kinematics, control, and system integration.

Rather than treating each component as an independent module, the pipeline was designed for coherence — decisions in the kinematic model had to align precisely with what the controller expected, which had to match exactly what the perception system was outputting in the robot's coordinate frame. That end-to-end consistency is what made physical deployment straightforward: the same codebase that ran in Gazebo simulation deployed to the physical arm without modification.

The final system ran as a modular, multi-node ROS2 architecture written in Python, containerized in Docker, and validated in Gazebo before hardware deployment. On the physical UR3e, the pipeline autonomously detected ArUco-marked blocks, resolved their positions into the robot's base frame via perspective homography, solved the inverse kinematics analytically, and executed pick-and-place sequences — achieving positioning accuracy within 2–5 mm across all validated configurations.

Pipeline Architecture

Five functional stages from raw camera input to physical arm execution — each with a defined input/output contract, independently testable and replaceable.

01

Camera Calibration

Intrinsics · Homography H

Camera intrinsics and distortion coefficients from YAML calibration. Perspective matrix H computed from 4 reference point correspondences.

02

ArUco Detection

OpenCV · Marker Pose · Pixel Centers

ArUco fiducial markers detected in each frame. Four corner points extracted per marker; center computed by averaging corners.

03

Frame Transform

Homography · Image → Table

Pixel center multiplied through H and normalized by w to yield physical (X, Y) in the table coordinate frame in millimeters.

04

IK Solver

DH Parameters · Law of Cosines

Closed-form analytical solution for elbow-up configuration. Six joint angles computed in seven sequential steps from world-frame target pose.

05

Arm Execution

ROS2 · Gazebo → UR3e

CommandUR3e messages published over ROS2. Nine-step motion sequence: lift, transit, descend, grasp, lift, transit, place, release, lift.

Technical Breakdown

The full implementation — one layer at a time.

01

Camera Calibration & Perspective Mapping

Camera intrinsic parameters and distortion coefficients were loaded from a calibration YAML file produced during checkerboard calibration. A perspective homography matrix H was computed by clicking four known reference points on the live camera feed and mapping them to their corresponding real-world table coordinates in millimeters. This 3×3 matrix encodes the full projective transformation from image space to table space — applied every frame by multiplying each detected marker center's homogeneous pixel coordinates through H and dividing by the resulting w-component to recover physical (X, Y) position in millimeters.

02

ArUco Marker Detection

OpenCV's ArUco library detects fiducial markers attached to the colored geometric blocks in every camera frame. For each detected marker, the four corner pixel coordinates are extracted, the center is computed by averaging them, and the marker ID is confirmed against the DICT_6X6_250 dictionary. The annotated frame is published as a ROS2 image topic for visualization, while detected marker IDs and image-space centers are passed downstream for coordinate transformation.

03

Forward & Inverse Kinematics

The UR3e was modeled using Denavit–Hartenberg parameters across seven link transforms, building a forward kinematics function that returns the full 4×4 SE(3) homogeneous transformation from base to end-effector for any joint configuration. Inverse kinematics were solved analytically for an elbow-up configuration: θ₁ from polar geometry and a lateral offset correction, θ₆ from yaw and θ₁, the wrist center from a fixed distal offset, and θ₂/θ₃/θ₄ from the law of cosines applied to the two-link elbow triangle. Predicted and physically measured end-effector positions matched within 2–5 mm across all test cases.

04

Singularity Handling & Joint Safety

The IK implementation explicitly handles two singularity classes: configurations where the wrist center falls directly over the base Z-axis — causing a divide-by-zero in θ₁ — and configurations outside the physical workspace. Joint angle limits are enforced at the publisher level. The system resets to a predefined safe home configuration when a dangerous joint state is detected, and both singularity types are excluded from the operating workspace through validated coordinate bounds.

05

ROS2 Architecture & Deployment

All components run as decoupled nodes in a ROS2 architecture: an ArucoTracker node handling perception and coordinate publishing, a UR3eController node managing joint commands, gripper state, and position feedback via the /ur3e/command and /ur3e/position topics, and a BlockMover node orchestrating the complete pick-and-place sequence. Nodes communicate over defined typed ROS2 topics, keeping each layer independently replaceable. The full system was containerized in Docker and validated end-to-end in Gazebo before deployment on the physical UR3e, where it ran the complete detection-to-stacking sequence autonomously.

Simulation & Hardware

Gazebo simulation validation

Gazebo Simulation

Full pipeline validated in simulation — same codebase, Docker container, and ROS2 node graph. No code changes required for hardware transfer.

UR3e physical arm in action

Physical UR3e

Universal Robots UR3e — autonomous ArUco detection, IK solving, and sequential block stacking at millimeter-level accuracy.

The Docker containerization ensured the ROS2 node graph, kinematic solvers, and perception pipeline ran identically in simulation and on hardware. Validation in Gazebo exposed edge cases in the joint safety checks and singularity handling before they could cause hardware faults. On the physical UR3e, the complete pick-and-place sequence ran without human intervention — detecting blocks, computing trajectories, and stacking them at defined positions in sequence.

Validation Results

Inverse kinematics validated across five physical test cases on the UR3e.

Target Pose
Predicted (mm)
Measured (mm)
Max Error (mm)
(0.20, 0.30, 0.30, 45°)
(200, 299, 300)
(197, 298, 304)
4 mm
(0.10, 0.40, 0.10, 90°)
(100, 399, 100)
(100, 400, 103)
3 mm
(0.20, 0.20, 0.20, 0°)
(200, 199, 200)
(196, 200, 200)
4 mm
(0.20, −0.20, 0.10, 0°)
(200, −200, 100)
(200, −200, 104)
4 mm
(0.20, 0.30, 0.40, 30°)
(200, 299, 400)
(195, 297, 400)
5 mm

Discrepancies attributed to link length tolerances, joint backlash, and manual grid measurement uncertainty of ±1–2 mm.

Stack

ROS2PythonOpenCVArUco MarkersDockerGazeboUniversal Robots UR3eDH ParametersSE(3) TransformsAnalytical IKPerspective HomographyLaw of CosinesCamera CalibrationLinux

My Documents

Technical report, demo videos, and supplementary materials from ENME480 Fall 2025.