Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Feature request]: Workcell support and dispenser / ingestor integration #244

Open
1 task done
luca-della-vedova opened this issue Dec 20, 2024 · 0 comments
Open
1 task done
Labels
enhancement New feature or request

Comments

@luca-della-vedova
Copy link
Member

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

Description

Span out of #210 since this is one of the TODOs for cleaning up SDF export. Legacy traffic editor has a bit of a confusing support for dispensers and ingestors, specifically:

  • In all our demos we use a model (i.e. TeleportDispenser) that runs a plugin with a dispenser interface, this is what actually does the dispensing.
  • There is also a traffic editor property, called pickup_dispenser, that however seems to not be used, specifically this is a grep on my workspace:
~/noble_ws/src/rmf$ grep -r . -e pickup_dispenser
./rmf_traffic_editor/rmf_building_map_tools/building_map_server/building_map_server.py:                                  "pickup_dispenser",
./rmf_traffic_editor/rmf_traffic_editor/gui/vertex.h:  std::string pickup_dispenser() const;
./rmf_traffic_editor/rmf_traffic_editor/gui/vertex.cpp:  { "pickup_dispenser", Param::Type::STRING },
./rmf_traffic_editor/rmf_traffic_editor/gui/vertex.cpp:  /// space for the icon, also "pickup_dispenser, dropoff_ingestor,
./rmf_traffic_editor/rmf_traffic_editor/gui/vertex.cpp:  if (!pickup_dispenser().empty())
./rmf_traffic_editor/rmf_traffic_editor/gui/vertex.cpp:std::string Vertex::pickup_dispenser() const
./rmf_traffic_editor/rmf_traffic_editor/gui/vertex.cpp:  const auto it = params.find("pickup_dispenser");
./rmf_ros2/rmf_traffic_ros2/test/resources/office_map.geojson:        "pickup_dispenser": "coke_dispenser"
./rmf_ros2/rmf_task_ros2/src/rmf_task_ros2/Dispatcher.cpp:        pickup["handler"] = delivery.pickup_dispenser;
./rmf_ros2/rmf_fleet_adapter/src/rmf_fleet_adapter/agv/FleetUpdateHandle.cpp:        .pickup_dispenser(msg["handler"].get<std::string>())
./rmf_ros2/rmf_fleet_adapter/src/rmf_fleet_adapter/agv/FleetUpdateHandle.cpp:        .pickup_dispenser("")
./rmf_ros2/rmf_fleet_adapter_python/tests/unit/test_types.py:                               "pickup_dispenser",
./rmf_ros2/rmf_fleet_adapter_python/tests/unit/test_types.py:    assert msg.pickup_dispenser == "pickup_dispenser"
./rmf_ros2/rmf_fleet_adapter_python/tests/unit/test_types.py:    msg.pickup_dispenser += "_rawr"
./rmf_ros2/rmf_fleet_adapter_python/tests/unit/test_types.py:    assert msg.pickup_dispenser == "pickup_dispenser_rawr"
./rmf_ros2/rmf_fleet_adapter_python/src/types/types.cpp:  std::string pickup_dispenser,
./rmf_ros2/rmf_fleet_adapter_python/src/types/types.cpp:  request.pickup_dispenser = pickup_dispenser;
./rmf_ros2/rmf_fleet_adapter_python/src/types/types.cpp:    py::arg("pickup_dispenser") = "",
./rmf_ros2/rmf_fleet_adapter_python/src/types/types.cpp:    "pickup_dispenser",
./rmf_ros2/rmf_fleet_adapter_python/src/types/types.cpp:    [&](Delivery& self) { return self.pickup_dispenser; },
./rmf_ros2/rmf_fleet_adapter_python/src/types/types.cpp:    std::string pickup_dispenser)
./rmf_ros2/rmf_fleet_adapter_python/src/types/types.cpp:      self.pickup_dispenser = pickup_dispenser;
./rmf_internal_msgs/rmf_task_msgs/msg/Delivery.msg:string pickup_dispenser

It's made of the following sections:

  • rmf_traffic_editor: Just the GUI to populate it and the building_map_server to publish it as a parameter.
  • rmf_fleet_adapter / rmf_task_ros2, Actually referring to the pickup_dispenser field in the Delivery.msg message, not the vertex parameter.
  • rmf_fleet_adapter_python seems to just be bindings for the Delivery.msg.

Now the question is how do we port this to the site editor? There is a (currently unused) LocationTag for Workcells. It is technically possible to "just" import TeleportDispenser and TeleportIngestor models into a new LocationTag::Workcell location, but we should probably be more careful before locking into that data format / implementation, and make sure we can capture all the information we might need from a workcell.

Implementation Considerations

No response

Alternatives

No response

Additional information

No response

@luca-della-vedova luca-della-vedova added the enhancement New feature or request label Dec 20, 2024
@github-project-automation github-project-automation bot moved this to Inbox in PMC Board Dec 20, 2024
@mxgrey mxgrey moved this from Inbox to Todo in PMC Board Dec 31, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
Status: Todo
Development

No branches or pull requests

1 participant