You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This package implements a MiR robot command handle that is managed by a fleet adapter in Python. (Along with some helpers.) It can be used to command and manage a fleet of MiR 100 robots using RMF!
23
27
24
-
It uses the `rmf_fleet_adapter_python` bindings, which allows for communication with `rmf_core` libraries and ROS2 nodes.
28
+
It uses the `rmf_fleet_adapter_python` bindings, which allows for communication with `open-rmf` libraries and ROS2 nodes.
25
29
26
-
In effect, it interfaces the MiR REST API with `rmf_core`, all without needing to directly use ROS2 messages to communicate with `rmf_core`!
30
+
In effect, it interfaces the MiR REST API with `open-rmf`, all without needing to directly use ROS 2 messages to communicate with `open-rmf`!
27
31
28
32
29
33
@@ -35,20 +39,20 @@ An example usage of the implemented adapter can be found in the `main.py` file.
35
39
36
40
Call it like so:
37
41
38
-
```shell
39
-
# Remember to source the workspace you've installed the pre-requisites in!
42
+
```bash
43
+
# Remember to source the underlay workspace!
40
44
41
45
# Get help
42
-
$ python3 main.py -h
46
+
python3 main.py -h
43
47
44
-
# Run in dry-run mode. Disables ROS2 publishing and MiR REST calls
45
-
$ python3 main.py mir_config.yaml -d
48
+
# Run in dry-run mode. Disables ROS 2 publishing and MiR REST calls
Alternatively, if you want to run everything with full capabilities, (though note that it will require an `rmf_core` schedule node to be active, and the MiR REST server to be available)
52
+
Alternatively, if you want to run everything with full capabilities, (though note that it will require an `rmf_traffic_ros2` schedule node to be active, and the MiR REST server to be available)
@@ -88,9 +92,9 @@ The example script `main.py` does this.
88
92
89
93
### Robot Transforms: Two Coordinate Systems
90
94
91
-
Since we are interfacing MiR and `rmf_core`, we need to deal with two coordinate systems and two forms of 'maps'.
95
+
Since we are interfacing MiR and `open-rmf`, we need to deal with two coordinate systems and two forms of 'maps'.
92
96
93
-
We have to deal with the `rmf_core` navgraph and the MiR map, with their own individual coordinate systems, waypoints/positions, and waypoint keys/position names.
97
+
We have to deal with the `rmf_traffic` navgraph and the MiR map, with their own individual coordinate systems, waypoints/positions, and waypoint keys/position names.
94
98
95
99
Luckily, we can leverage the `nudged` Python library to compute coordinate transforms between the two sets of coordinates. You just have to make sure to provide equivalent reference points within the two maps so transforms can be computed.
96
100
@@ -108,7 +112,7 @@ In order for the appropriate `RobotUpdateHandle.update_position()` method calls
108
112
109
113
The trouble is, since we are using the MiR REST API, the only way we can obtain information about the robot's state is by polling it via REST calls.
110
114
111
-
Even harder than that, the MiR REST API does not care to store information about the `rmf_core` navigation graph, and any goals that are set with respect ot that. In fact, the corresponding path following calls that `rmf_core` issues gets translated into move-to-coordinate missions for the MiR to execute.
115
+
Even harder than that, the MiR REST API does not care to store information about the `rmf_traffic` navigation graph, and any goals that are set with respect to that. In fact, the corresponding path following calls that `open-rmf` issues gets translated into move-to-coordinate missions for the MiR to execute.
112
116
113
117
This is **very messy**. Mainly because we cannot immediately infer the semantic state of the robot (with respect to RMF.) Instead, we have to infer it based off of what we know, from the tracking variables we are using, and the robot's mode.
114
118
@@ -132,7 +136,7 @@ The `RobotState` with the following robot modes:
132
136
-`MODE_PAUSED`: Interrupted
133
137
-`MODE_DOCKING`: Docking
134
138
135
-
And a flag that gets set whenever the robot is executing a path following request from `rmf_core`:
139
+
And a flag that gets set whenever the robot is executing a path following request from `open-rmf`:
136
140
137
141
-`rmf_path_requested`: `True` if executing a path request, `False` once complete
0 commit comments