Surface Normals Costmap - umrover/mrover-ros GitHub Wiki

Context: URC rules indicate a significant obstacle will obstruct the water bottle during the auton mission.

The second object will be a standard 1 L wide-mouthed plastic water bottle of unspecified color/markings (approximately 21.5 cm tall by 9 cm diameter). The second object may have obstacles in the way that require autonomous avoidance.

Problem: When navigating during the auton mission, we assume the ground is flat enough for the rover to drive over any obstacles. This is not a realistic assumption for driving to the water bottle so perception must provide information about surrounding obstacles so navigation can avoid them.

Solution: Perception will construct a local costmap using the ZED's point cloud surface normals. This costmap will be stitched together over time in the map frame and allow navigation to autonomously path plan.

IMPORTANT NOTE: The design for this has changed from having two separate nodes for projection and stitching respectively. This is because projection is relatively straightforward and we think having both steps in the same node is fine.

Interface (subject to change)

Node: costmap

Subscribes: sensor_msgs/PointCloud2 (ZED point cloud)

Publishes: nav_msgs/OccupancyGrid (Global costmap)

Note: This will have to run as a nodelet under the perception_nodelet_manager

Rough Steps:

  1. Create subscriber for the point cloud topic
  2. Compute surface normals from the point cloud using PCL (see last year's branch https://github.com/umrover/mrover-ros/tree/arschallwig/cost-mapping for reference)
  3. Project surface normals into local occupancy grid
  4. Apply transform on local occupancy grid from the zed frame to map frame
  5. Fill global costmap in using local costmap

Screenshot from 2023-11-15 14-04-34

Ask an auton lead if you have any questions about this.