← udacity portfolio
robotics nd · robotics ros · July 2019

PR2 Perception Pick-and-Place

ROS + PCL stack for the PR2 robot: cluster a tabletop, classify objects with an SVM on color/normals features, generate grasp poses.

What it did

Final project of the Robotics nanodegree’s Perception module. PR2 (the “willow garage” robot, in simulation) sees a cluttered tabletop via its RGB-D camera, segments objects, classifies each, then publishes grasp-pose messages so a downstream motion planner can pick the right target and place it in the right bin.

The pipeline

  1. Voxel-grid downsample the depth cloud.
  2. Passthrough filter to crop to the table region in the Z axis.
  3. RANSAC plane segmentation removes the table surface; remainder is “things on the table.”
  4. Euclidean clustering → one cluster per object.
  5. Per-cluster features: color histogram (HSV) + surface-normal histogram → ~64-dim vector.
  6. SVM classifier (trained offline on labeled clouds from each target object) predicts the class.
  7. Grasp pose: cluster centroid + table normal → approach vector.
  8. Publish a PickPlaceRequest ROS message with arm + object + bin.

What was actually tricky

What I’d do differently with hindsight

What it taught me

ROS is a graph-of-nodes framework, not a programming model. Most of the debugging time on this project was getting nodes to subscribe and publish at the right rate on the right topic, not the actual perception. Lesson: a robotics stack’s hardest problem is rarely the algorithms; it’s the wiring and the timing.


Source archive: Shivam-Bhardwaj/Perception_Project (archived)
Writeup last touched: 2026-05-22