Skip to content

Refactor obstacle framework in Open-RMF #22

@Yadunund

Description

@Yadunund

Before proceeding, is there an existing issue or discussion for this?

Description

This is a meta ticket that broadly summarizes improvements for the obstacle detection pipeline in Open-RMF.

Goal: Report and react to obstacles that impede mobility within the Open-RMF framework.

Background

image

Sources for reporting obstacles

  • 2D vision systems: CCTVs, RPi Cameras, thermal cameras, etc
  • 3D vision systems: stereo cameras, depth sensors, etc
  • 2D/3D lidars: stationary, on robots, etc

Types of reactions

  • Replan robot routes
  • Close down lanes
  • Alert users
  • Update speed limits for robots

Checklist

  • rmf_obstacle_msgs

    • Replace our BoundingBox3D with an BoundingBox3D message from vision_msgs
    • Refactor Obstacle.msg to support obstacles represented in various forms. It currently has fields for BoundingBox3d bbox and serialized data. We could ideate other data ways to communicate obstacle presence (OccupancyGrid, octomap, bonxai, etc.) It might be better to also add a field and enum constants for users to indicate the type of obstacle populated in the msg.
    • A new message that the rmf_obstacle_server could publish with collated information on all the obstacles per level in the building. An OccupancyGrid field within the message may be helpful.
  • rmf_fleet_adapter

    • Add an API to RobotUpdateHandle to report the presence of obstacles. This information can be published to the rmf_obstacle_server which can then publish response commands to other fleet adapters.
  • rmf_obstacle_ros2

    • Add pure abstract base classes for
      • ObstacleBehavior with methods
        • init: To initialize the plugin with a ROS 2 node reference to create any pub/subs needed
        • obstacle_cb: To reach to obstacle infrormation
      • ObstacleReporter with methods
        • init: To initialize the plugin with a ROS 2 node reference to create any pub/subs needed
        • report: To report obstacle.
    • rmf_obstacle_reporter node that
      • initializes a publisher to publisher over /rmf_obstacles.
      • loads and initializes base classes of ObstacleReporter type using pluginlib.
    • Convert all existing rmf_X_detector packages in this repo into plugins for rmf_obstacle_reporter.
    • Generalize rmf_human_detector to detect other classes of objects.
    • rmf_obstacle_server
      • Create a new node that subscribes to /rmf_obstacles published by various "reporting" nodes, collate the information per level, and publish the unified data.
      • Have the node rely on pluginlib to load plugins of ObstacleBehavior base class.
      • Convert existing lane_blocker_node to a plugin that can be loaded by rmf_obstacle_server.
  • rmf_visualization

    • Switch to subscribing to collated obstacle information published by rmf_obstacle_server and visualize obstacles depending on which level is active in the view.
    • Visualize other types of obstacles (not just BoundingBox3D)
  • rmf_demos

    • Update lane_closure_request subscription callback to honor requests from approved requestors.
    • Showcase rmf_obstacle capabilities in a demo world.
  • Bonus:

    • A navigation2 costmap plugin that subscribes to this msg and updates the global costmap of the robot.
    • Have mapf receive occupancy information as well.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions