
RealSense 3D Camera

the camera was secured to the front of TurtleBot, facing forward (I don’t have a better picture)

Boxes of Varying Sizes (acting as chairs and tables)

Using the ROS realsense2_camera camera node, the D435 camera publishes camera data to a variety of topics, as described here. We are specifically interested in the /camera/depth/color/points topic, which publishes a PointCloud2 message containing the 3D points and their corresponding RGB values being seen by the camera.
We then want to process the pointcloud and convert it into our 3D occupancy grid. This involves a few steps:
Next, we want to process our occupancy grid to identify and locate our objects.
In order to group our voxels into objects, we first ran agglomerative clustering on occupied voxels, which worked effectively in grouping the objects. We found that single linkage with a distance_threshold of 3 voxels worked the most consistently.
Because our boxes were painted green, purple, or unpainted brown, we then analyzed the color of each voxel grouping to identify the object. Attempts to threshold the raw RGB values were unsuccessful due to variations in brightness (i.e. if the boxes were underneath the lab station in the shadow vs in the light), but we found success in threshold the ratios between two channels.
This allowed us to identify objects, and calculate the location of each object by finding the mean location of the corresponding voxels.