Summary
While reviewing ROS 2 package dependency metadata, I noticed that rmf_task_sequence appears to use rmf_traffic directly, but rmf_traffic does not seem to be declared in rmf_task_sequence/package.xml.
This may make the package rely on rmf_task and rmf_battery to provide rmf_traffic transitively.
Evidence
Direct usage
rmf_task_sequence directly includes rmf_traffic headers in production code:
include/rmf_task_sequence/events/GoToPlace.hpp:21: #include <rmf_traffic/agv/Planner.hpp>
include/rmf_task_sequence/events/DropOff.hpp:21: #include <rmf_traffic/agv/Planner.hpp>
include/rmf_task_sequence/events/PickUp.hpp:21: #include <rmf_traffic/agv/Planner.hpp>
include/rmf_task_sequence/events/PerformAction.hpp:21: #include <rmf_traffic/agv/Planner.hpp>
include/rmf_task_sequence/events/WaitFor.hpp:21: #include <rmf_traffic/Time.hpp>
src/rmf_task_sequence/events/internal_PayloadTransfer.hpp:26: #include <rmf_traffic/agv/Planner.hpp>
The task sequence implementation uses RMF traffic types directly, for example:
include/rmf_task_sequence/events/GoToPlace.hpp:32: using Goal = rmf_traffic::agv::Plan::Goal
include/rmf_task_sequence/events/PickUp.hpp:36: using Location = rmf_traffic::agv::Plan::Goal
include/rmf_task_sequence/events/WaitFor.hpp:57: static DescriptionPtr make(rmf_traffic::Duration wait_duration)
src/rmf_task_sequence/Activity.cpp:68: method parameter rmf_traffic::Time earliest_arrival_time
src/rmf_task_sequence/Task.cpp:112: returns rmf_traffic::Duration
src/rmf_task_sequence/events/GoToPlace.cpp:27: helper returns std::optional<rmf_traffic::Duration> and accepts rmf_traffic::agv::Planner
The unit tests also construct rmf_traffic::agv::Graph, rmf_traffic::Profile, rmf_traffic::agv::VehicleTraits, and rmf_traffic::agv::Planner.
Current package.xml
I could not find a direct declaration of rmf_traffic in rmf_task_sequence/package.xml. The dependency appears to be reachable through declared RMF packages.
Observed during build/test
During build/test tracing, files from rmf_traffic were accessed, for example:
lib/rmf_traffic/cmake/rmf_traffic-config.cmake
lib/rmf_traffic/cmake/rmf_traffic-targets.cmake
share/colcon-core/packages/rmf_traffic
lib/librmf_traffic.so
Transitive path
The dependency appears to be reachable transitively through:
rmf_task_sequence -> rmf_task -> rmf_battery -> rmf_traffic
Suggested fix
If RMF traffic planner/time types are direct dependencies of rmf_task_sequence, would it make sense to add:
<depend>rmf_traffic</depend>
Notes
This issue is not claiming that the package currently fails to build. The concern is that the package directly uses rmf_traffic while relying on a transitive dependency path to make it available. The observation is based on package metadata, source usage, dependency closure analysis, and build/test file-access tracing.
Could you please confirm whether this dependency is intentionally left implicit through the transitive dependency path shown above, or whether adding an explicit dependency to package.xml would be appropriate?
I would be happy to open a small PR adding the dependency if that matches the intended package metadata.
Summary
While reviewing ROS 2 package dependency metadata, I noticed that
rmf_task_sequenceappears to usermf_trafficdirectly, butrmf_trafficdoes not seem to be declared inrmf_task_sequence/package.xml.This may make the package rely on
rmf_taskandrmf_batteryto providermf_traffictransitively.Evidence
Direct usage
rmf_task_sequencedirectly includesrmf_trafficheaders in production code:include/rmf_task_sequence/events/GoToPlace.hpp:21:#include <rmf_traffic/agv/Planner.hpp>include/rmf_task_sequence/events/DropOff.hpp:21:#include <rmf_traffic/agv/Planner.hpp>include/rmf_task_sequence/events/PickUp.hpp:21:#include <rmf_traffic/agv/Planner.hpp>include/rmf_task_sequence/events/PerformAction.hpp:21:#include <rmf_traffic/agv/Planner.hpp>include/rmf_task_sequence/events/WaitFor.hpp:21:#include <rmf_traffic/Time.hpp>src/rmf_task_sequence/events/internal_PayloadTransfer.hpp:26:#include <rmf_traffic/agv/Planner.hpp>The task sequence implementation uses RMF traffic types directly, for example:
include/rmf_task_sequence/events/GoToPlace.hpp:32:using Goal = rmf_traffic::agv::Plan::Goalinclude/rmf_task_sequence/events/PickUp.hpp:36:using Location = rmf_traffic::agv::Plan::Goalinclude/rmf_task_sequence/events/WaitFor.hpp:57:static DescriptionPtr make(rmf_traffic::Duration wait_duration)src/rmf_task_sequence/Activity.cpp:68: method parameterrmf_traffic::Time earliest_arrival_timesrc/rmf_task_sequence/Task.cpp:112: returnsrmf_traffic::Durationsrc/rmf_task_sequence/events/GoToPlace.cpp:27: helper returnsstd::optional<rmf_traffic::Duration>and acceptsrmf_traffic::agv::PlannerThe unit tests also construct
rmf_traffic::agv::Graph,rmf_traffic::Profile,rmf_traffic::agv::VehicleTraits, andrmf_traffic::agv::Planner.Current package.xml
I could not find a direct declaration of
rmf_trafficinrmf_task_sequence/package.xml. The dependency appears to be reachable through declared RMF packages.Observed during build/test
During build/test tracing, files from
rmf_trafficwere accessed, for example:lib/rmf_traffic/cmake/rmf_traffic-config.cmakelib/rmf_traffic/cmake/rmf_traffic-targets.cmakeshare/colcon-core/packages/rmf_trafficlib/librmf_traffic.soTransitive path
The dependency appears to be reachable transitively through:
Suggested fix
If RMF traffic planner/time types are direct dependencies of
rmf_task_sequence, would it make sense to add:Notes
This issue is not claiming that the package currently fails to build. The concern is that the package directly uses
rmf_trafficwhile relying on a transitive dependency path to make it available. The observation is based on package metadata, source usage, dependency closure analysis, and build/test file-access tracing.Could you please confirm whether this dependency is intentionally left implicit through the transitive dependency path shown above, or whether adding an explicit dependency to
package.xmlwould be appropriate?I would be happy to open a small PR adding the dependency if that matches the intended package metadata.