topological_navigation icon indicating copy to clipboard operation
topological_navigation copied to clipboard

New Map format

Open Jailander opened this issue 5 years ago • 10 comments

This is the proposed new map format for topnav2

name:       new_map                    # Topological map name generally should be the same as in the pointset field
metric_map: map2d                       # 2D Metric map name (not used currently)
pointset:   new_map                     # The name of the group of nodes that compose the topological map, typically the same as name
transformation:
  rotation:                        # Topological Map Rotation
    w: 1.0
    x: 0.0
    y: 0.0
    z: 0.0
  translation:                                  # Topological Map Translation
    x: 0.0
    y: 0.0
    z: 0.0
  child: topo_map
  parent: map
meta:                            # Just some meta information
  last_updated: 2020-02-18 12:00 am              # Last time the map was modified
nodes:
- meta:                            # Just some meta information
    map: map2d
    node: WayPoint001        
    pointset: new_map
  node:                                 # Actual Node Properties
    edges:                        # List of edges departing from the node
    - action: move_action                # Action Name
      edge_id: WayPoint001_WayPoint002
      node: WayPoint002
      config: &move_action_config_1             # Edge Reconfigure
      - namespace: param1_namespace                   # Parameter
        name: param1_name
        value: param1_value
      - namespace: param2_namespace                   # Parameter
        name: param2_name
        value: param2_value
      recovery_behaviours_config: ''
      action_type: 'move_action_msgs/MoveActionGoal'      # Goal type for the Action
      goal:
        target_pose:
          header:
            frame_id: $node.parent_frame
          pose: $node.pose
      fail_policy: retry_3, replan, fail        # What to do if execution fail (fail, replan, retry_#number_of_times)
      fluid_navigation: true        # if false robot must be at exact pose of origin node before traversing the edge
      restrictions_planning: (robot_tall & task_transportation) |  ~ robot_narrow
      restrictions_runtime: pose_exact
    - action: move_action                # Action Name
      edge_id: WayPoint001_WayPoint003
      node: WayPoint003
      config: &move_action_config_2             # Edge Reconfigure
      - namespace: param3_namespace                   # Parameter
        name: param3_name
        value: param3_value
      recovery_behaviours_config: ''
      action_type: move_action_msgs/MoveActionGoal      # Goal type for the Action
      goal:
        target_pose:
          header:
            frame_id: $node.parent_frame
          pose: $node.pose
      fail_policy: fail                    # What to do if execution fail (fail, replan, retry_#number_of_times)
      fluid_navigation: true        # if false robot must be at exact pose of origin node before traversing the edge
      restrictions_planning: (robot_tall & task_transportation) |  ~ robot_narrow
      restrictions_runtime: 'True'
    localise_by_topic: ''                       # Localise by topic configuration string
    name: WayPoint001                        # Node name
    parent_frame: map
    pose:                        # Node pose
      orientation:                              # Node orientation (quaternion) 
        w: 0.92388
        x: 0
        y: 0
        z: 0.38268
      position:                        # Node position
        x: 0.0
        y: 0.0
        z: 0.0
    verts:                        # Vetices of the influence zone relative to node position
    - x: 0.689
      y: 0.287
    - x: 0.287
      y: 0.689
    - x: -0.287
      y: 0.689
    - x: -0.689
      y: 0.287
    - x: -0.689
      y: -0.287
    - x: -0.287
      y: -0.689
    - x: 0.287
      y: -0.689
    - x: 0.689
      y: -0.287
    properties:
      xy_goal_tolerance: 0.3                # Goal tolerance in the XY axes
      yaw_goal_tolerance: 0.1                 # Angular goal tolerance
    restrictions_planning: (robot_tall & task_transportation) |  ~ robot_narrow
    restrictions_runtime: 'True'
- meta:                            # Just some meta information
    map: map2d
    node: WayPoint002
    pointset: new_map
  node:                                 # Actual Node Properties
    edges:                        # List of edges departing from the node
    - action: move_action                # Action Name
      edge_id: WayPoint002_WayPoint001
      node: WayPoint001
      config: *move_action_config_1             # Edge Reconfigure
      recovery_behaviours_config: ''
      action_type: move_action_msgs/MoveActionGoal      # Goal type for the Action
      goal:
        target_pose:
          header:
            frame_id: $node.parent_frame
          pose: $node.pose
      fail_policy: retry_3, replan, fail        # What to do if execution fail (fail, replan, retry_#number_of_times)
      fluid_navigation: true        # if false robot must be at exact pose of origin node before traversing the edge
      restrictions_planning: (robot_tall & task_transportation) |  ~ robot_narrow
      restrictions_runtime: 'True'
    - action: move_action                # Action Name
      edge_id: WayPoint002_WayPoint003
      node: WayPoint003
      config: *move_action_config_2             # Edge Reconfigure
      recovery_behaviours_config: ''
      action_type: move_action_msgs/MoveActionGoal      # Goal type for the Action
      goal:
        target_pose:
          header:
            frame_id: $node.parent_frame
          pose: $node.pose
      fail_policy: fail                    # What to do if execution fail (fail, replan, retry_#number_of_times)
      fluid_navigation: true        # if false robot must be at exact pose of origin node before traversing the edge
      restrictions_planning: 'True'
      restrictions_runtime: 'True'
    localise_by_topic: ''                       # Localise by topic configuration string
    name: WayPoint002                        # Node name
    parent_frame: map
    pose:                        # Node pose
      orientation:                              # Node orientation (quaternion) 
        w: 0.92388
        x: 0
        y: 0
        z: 0.38268
      position:                        # Node position
        x: 1.0
        y: 1.0
        z: 0.0
    verts:                        # Vetices of the influence zone relative to node position
    - x: 0.689
      y: 0.287
    - x: 0.287
      y: 0.689
    - x: -0.287
      y: 0.689
    - x: -0.689
      y: 0.287
    - x: -0.689
      y: -0.287
    - x: -0.287
      y: -0.689
    - x: 0.287
      y: -0.689
    - x: 0.689
      y: -0.287
    properties:
      xy_goal_tolerance: 0.3                # Goal tolerance in the XY axes
      yaw_goal_tolerance: 0.1                 # Angular goal tolerance
    restrictions_planning: 'True'
    restrictions_runtime: 'True'
- meta:                            # Just some meta information
    map: map2d
    node: WayPoint003
    pointset: new_map
  node:                                 # Actual Node Properties
    edges:                        # List of edges departing from the node
    - action: move_action                # Action Name
      edge_id: WayPoint003_WayPoint001
      node: WayPoint001
      config: *move_action_config_1             # Edge Reconfigure
      recovery_behaviours_config: ''
      action_type: move_action_msgs/MoveActionGoal      # Goal type for the Action
      goal:
        target_pose:
          header:
            frame_id: $node.parent_frame
          pose: $node.pose
      fail_policy: retry_3, replan, fail        # What to do if execution fail (fail, replan, retry_#number_of_times)
      fluid_navigation: true        # if false robot must be at exact pose of origin node before traversing the edge
      restrictions_planning: (robot_tall & task_transportation) |  ~ robot_narrow
      restrictions_runtime: 'True'
    - action: move_action                # Action Name
      edge_id: WayPoint003_WayPoint002
      node: WayPoint002
      config: *move_action_config_2             # Edge Reconfigure
      recovery_behaviours_config: ''
      action_type: move_action_msgs/MoveActionGoal      # Goal type for the Action
      goal:
        target_pose:
          header:
            frame_id: $node.parent_frame
          pose: $node.pose
      fail_policy: fail                    # What to do if execution fail (fail, replan, retry_#number_of_times)
      fluid_navigation: true        # if false robot must be at exact pose of origin node before traversing the edge
      restrictions_planning: 'True'
      restrictions_runtime: 'True'
    localise_by_topic: ''                       # Localise by topic configuration string
    name: WayPoint003                        # Node name
    parent_frame: map
    pose:                        # Node pose
      orientation:                              # Node orientation (quaternion) 
        w: 0.92388
        x: 0
        y: 0
        z: 0.38268
      position:                        # Node position
        x: -1.0
        y: -1.0
        z: 0.0
    verts:                        # Vertices of the influence zone relative to node position
    - x: 0.689
      y: 0.287
    - x: 0.287
      y: 0.689
    - x: -0.287
      y: 0.689
    - x: -0.689
      y: 0.287
    - x: -0.689
      y: -0.287
    - x: -0.287
      y: -0.689
    - x: 0.287
      y: -0.689
    - x: 0.689
      y: -0.287
    properties:
      xy_goal_tolerance: 0.3                # Goal tolerance in the XY axes
      yaw_goal_tolerance: 0.1                 # Angular goal tolerance
    restrictions_planning: 'True'
    restrictions_runtime: 'True'

Jailander avatar Oct 22 '20 10:10 Jailander

updated map format to include restrictions

Jailander avatar Oct 28 '20 13:10 Jailander

Hi, I was wondering if it would be worth including the field's datum in the topological map format, and if so, should it be included in the meta field or as a field in root?

Also, we should consider that there is already a field for the transform between the metric map and the topo map so probably this won't be necessary.

Jailander avatar Nov 05 '20 16:11 Jailander

@MikHut any comments?

Jailander avatar Nov 05 '20 16:11 Jailander

It might be nice to include the datum so you can do things independently with the topomap, however, the datum is required by a lot of nodes so it might be best to just keep the one, and all the nodes get it from the same place instead of storing it independently

MikHut avatar Nov 06 '20 10:11 MikHut

I discovered that there is no field called edge_id for the edges in the new map, the old map had the edge id which was used by the navigate.py followroute() function. I think we should add that here as well.

ayu135 avatar Jan 07 '21 08:01 ayu135

The edge id field has been added in https://github.com/LCAS/topological_navigation/pull/44 - it just isnt here in the issue. Just added it.

On Thu, Jan 7, 2021 at 8:19 AM Ayush Sharma [email protected] wrote:

I discovered that there is no field called edge_id for the edges in the new map, the old map had the edge id which was used by the navigate.py followroute() function. I think we should add that here as well.

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/LCAS/topological_navigation/issues/35#issuecomment-755961668, or unsubscribe https://github.com/notifications/unsubscribe-auth/AF3YS3VV3JZHAT5QEW3C2ZDSYVVCVANCNFSM4S2646EA .

-- Dr Adam Binch | Senior Robotics Engineer SAGA ROBOTICS LTD // THORVALD Think Tank Lincoln LN6 7FL Office: 01522837293 Mobile Phone +44 7940 835 628

adambinch avatar Jan 07 '21 08:01 adambinch

The config field for an edge is now a list of dictionaries, with each setting a parameter to reconfigure and contains the parameter's namespace, name and value.

adambinch avatar Feb 10 '21 14:02 adambinch

The restrictions field for a node and for an edge has been changed from:

restrictions:
        robot_type: "Narrow"
        task_name: "NOT_UV"
        transition: "exact_pose"

to:

restrictions_planning: (robot_tall & task_transportation) |  ~ robot_narrow
restrictions_runtime: pose_exact

A restriction is now a boolean sentence (default='True'). In other words nodes and edges are not restricted by default. Node and edge restrictions can be updated using the services /topological_map_manager2/update_node_restrictions and /topological_map_manager2/update_edge_restrictions, respectively.

adambinch avatar Mar 18 '21 10:03 adambinch

default edge goal field changed from

goal:
  target_pose: $node.pose

to

goal:
  target_pose:
    header:
      frame_id: $node.parent_frame
    pose: $node.pose

and field parent_frame (default="map") added to a node.

adambinch avatar Apr 19 '21 16:04 adambinch

This seems to be done for now but will keep as an open issue as there could be changes in the future @Jailander @francescodelduchetto

adambinch avatar Nov 09 '21 15:11 adambinch