Skip to content

Commit c9706b0

Browse files
committed
Update service architecture and ROS topography diagrams
1 parent 7b83e2d commit c9706b0

File tree

1 file changed

+21
-19
lines changed

1 file changed

+21
-19
lines changed

docs/vitepress/docs/system-architecture.md

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,6 @@ This page provides an overview of both the topography of the GISNav ROS 2 packag
1010

1111
The core ROS topography diagram below depicts how ROS messages flow through GISNav. The [API reference](/reference/) has more detailed information on the purpose and design of each ROS node.
1212

13-
::: info Todo
14-
- From BBoxNode, publish map to `base_link` and `base_link` to `camera` transformations separately to simplify implementation and reduce amount of maintained code.
15-
- Implement REP 105 properly (currently only partially implemented).
16-
- Include default topic names in diagram.
17-
:::
18-
1913
```mermaid
2014
graph TB
2115
subgraph ros_middleware["ROS middleware"]
@@ -39,24 +33,32 @@ graph TB
3933
subgraph extension["GISNav extension nodes"]
4034
UBXNode["UBXNode"]
4135
UORBNode["UORBNode"]
36+
NMEANode["NMEANode"]
4237
end
4338
39+
odometry["/robot_localization/odometry/filtered"] -->|"nav_msgs/Odometry"| UORBNode
40+
odometry -->|"nav_msgs/Odometry"| UBXNode
41+
odometry -->|"nav_msgs/Odometry"| NMEANode
42+
4443
subgraph robot_localization["robot_localization ROS package"]
45-
ekf["ekf_localization_node"] -->|"nav_msgs/Odometry"| UORBNode
46-
ekf["ekf_localization_node"] -->|"nav_msgs/Odometry"| UBXNode
44+
ekf_global_node
45+
ekf_local_node
4746
end
47+
ekf_global_node -->|"nav_msgs/Odometry"| odometry
48+
ekf_local_node -->|"nav_msgs/Odometry"| odometry
49+
TwistNode -->|"geometry_msgs/PoseWithCovarianceStamped\n(local pose, odom frame)"| ekf_local_node
4850
49-
TwistNode -->|"geometry_msgs/PoseWithCovarianceStamped\n(local pose, odom frame)"| ekf
50-
51-
PoseNode -->|"geometry_msgs/PoseWithCovarianceStamped\n(global pose, map frame)"| ekf
51+
PoseNode -->|"geometry_msgs/PoseWithCovarianceStamped\n(global pose, map frame)"| ekf_global_node
5252
UORBNode -->|"px4_msgs/SensorGps"| micro_ros_agent[" "]
5353
UBXNode -->|"ublox_msgs/NavPVT"| ubx[" "]
5454
55-
ekf["ekf_localization_node"] -->|"nav_msgs/TransformStamped\n(map->odom, odom->base_link)"| tf
55+
ekf_global_node -->|"nav_msgs/TransformStamped\n(map->odom)"| tf
56+
ekf_local_node -->|"nav_msgs/TransformStamped\n(odom->base_link)"| tf
5657
5758
style micro_ros_agent fill-opacity:0, stroke-opacity:0;
5859
style ubx fill-opacity:0, stroke-opacity:0;
59-
style tf fill-opacity:0, stroke-opacity:0;
60+
style tf fill-opacity:0, stroke-width:1px,stroke-dasharray:3;
61+
style odometry fill-opacity:0, stroke-width:1px,stroke-dasharray:3;
6062
6163
```
6264

@@ -103,6 +105,7 @@ graph TD
103105
end
104106
gscam
105107
ubx
108+
nmea
106109
px4
107110
ardupilot
108111
qgc
@@ -141,14 +144,13 @@ The diagram below depicts the GISNav services topography for SITL simulation tha
141144

142145
Some notes on the service topography:
143146

144-
- The Application services, Simulation services, Middleware services, GIS services, and Admin services terms are an attempt to identify and give descriptive names to layers that have naturally emerged in the architecture. They have no further description besides that only neighboring layers should talk to each other - there should be no jumps across layers in communication.
145-
- `socat` could also be considered a middleware service but runs non-containerized on the Docker host so it is not included in the Middleware services in the diagram.
147+
- The Application services, Simulation services, Middleware services, GIS services, and Admin services terms are an attempt to identify and give descriptive names to layers that have naturally emerged in the architecture. They have no further description.
146148
- GISnav uses `gscam` to publish the ROS `sensor_msgs.msg.CameraInfo` and `sensor_msgs.msg.Image` messages. The camera topics are not published over the MAVROS middleware.
147149

148150
::: info Todo
149151
- Serve static documentation.
150152
- Make shared memory transport work. It does not work possibly because of what's described in the note on privileged users [here](https://fast-dds.docs.eprosima.com/en/latest/fastdds/transport/shared_memory/shared_memory.html#segment). A `dds` network is included to allow Fast DDS to communicate via UDP over the network stack instead (`dds` network included in diagram and it includes the `gisnav` service).
151-
- `px4` shares the host network stack (along with `qgc`) because receiving communication from `uxrce_dds_agent` seems to depend on ephemeral ports (unverified) -> try to isolate the simulator and QGC in a `mavlink` network
153+
- `px4` shares the host network stack (along with `qgc`) because receiving communication from `uxrce_dds_agent` seems to depend on ephemeral ports which makes exposing specific ports difficult (unverified) -> try to isolate the simulator and QGC in a `mavlink` network
152154
- Show `gis` network, which connects `nginx`, `mapserver`, and `gisnav` (not in diagram)
153155
:::
154156

@@ -179,7 +181,7 @@ graph TB
179181
subgraph middleware ["Middleware Services"]
180182
middleware_mavros[mavros]
181183
middleware_micro_ros_agent["micro-ros-agent\n(uXRCE-DDS Agent)"]
182-
middleware_ubx[ubx]
184+
middleware_ubx_nmea[ubx or nmea]
183185
middleware_gscam[gscam]
184186
end
185187
subgraph application ["Application Services"]
@@ -213,11 +215,11 @@ graph TB
213215
mw_qgc -->|14550/udp\nMAVLink| simulation_px4
214216
simulation_px4 ------>|14540/udp\nMAVLink| middleware_mavros
215217
simulation_px4 ------>|8888/udp\nDDS-XRCE | middleware_micro_ros_agent
216-
simulation_px4 ------>|15000/TCP via socat\nUBX| middleware_ubx
218+
simulation_px4 ------>|15000/TCP via socat\nUBX or NMEA| middleware_ubx_nmea
217219
simulation_px4 ------>|5600/udp\nRTP H.264 Video| middleware_gscam
218220
middleware_micro_ros_agent -->|/dev/shm\nROS 2 Fast DDS| application_gisnav
219221
middleware_mavros -->|/dev/shm\nROS 2 Fast DDS| application_gisnav
220-
middleware_ubx -->|/dev/shm\nROS 2 Fast DDS| application_gisnav
222+
middleware_ubx_nmea -->|/dev/shm\nROS 2 Fast DDS| application_gisnav
221223
middleware_gscam -->|/dev/shm\nROS 2 Fast DDS| application_gisnav
222224
223225
application_gisnav -->|"80/tcp\nHTTP WMS/WFS-T\nvia nginx (local)\ndirectly (containerized)"| gis_mapserver

0 commit comments

Comments
 (0)