Skip to content

Commit 1f9d94e

Browse files
authored
279 add system overview to documentation. (#279)
Add system overview to documentation. --------- Signed-off-by: Jelmer de Wolde <[email protected]>
1 parent d135a1a commit 1f9d94e

File tree

9 files changed

+172
-0
lines changed

9 files changed

+172
-0
lines changed

docs/conf.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,13 @@
2424
"sphinx_rtd_theme",
2525
"sphinx_copybutton",
2626
"sphinxcontrib.video",
27+
"sphinxcontrib.mermaid",
2728
]
2829

2930
myst_enable_extensions = ["colon_fence"]
3031
templates_path = ["_templates"]
3132
exclude_patterns = []
33+
mermaid_version = "11.6.0"
3234

3335

3436
# -- Options for HTML output -------------------------------------------------

docs/content/system_overview.md

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
<!--
2+
SPDX-FileCopyrightText: Alliander N. V.
3+
4+
SPDX-License-Identifier: Apache-2.0
5+
-->
6+
7+
# System Overview
8+
9+
The following diagram gives a very simplified overview of the current state of our robot system:
10+
11+
:::{mermaid} ../diagrams/system_overview.mmd
12+
:::
13+
14+
You can see two robots (`franka` and `panther`) and four sensors (`realsense`, `zed`, `teltonika` and `velodyne`). Note that the output of the teltonika (gps) and the output of the velodyne (pointcloud) are used in `nav2` to navigate the panther. Output of the depth camera's are not used at the moment. There are three ways to control the robot:
15+
16+
:::{mermaid} ../diagrams/node_definitions.mmd
17+
:::
18+
19+
*joystick*:
20+
\
21+
This joystick contains a `joystick_topic_manager` to switch the control between franka and panther. A `joy_to_twist` node converts the joy message to a twist message. For panther, this twist message can be directly send to the drive controller. For franka, `moveit_servo` is used to calculate the required joint command that results in the desired twist command of the end effector.
22+
23+
*moveit_manager*:
24+
\
25+
For robot arms, we created a `moveit_manager` node as a layer above the `moveit_ros_move_group` node. This manager provides functionality like moving to a default configuration or moving the end effector to a given pose.
26+
27+
*nav2*
28+
\
29+
For robot vehicles, we use `nav2`, a set of nodes that provide functionality like navigating to a pose or following waypoints.
30+
31+
At the moment, we can use the joystick, or functionality of the moveit_manager or nav2 to control the robots.
32+
33+
**vendor elements**
34+
\
35+
Note that the elements in <font color="purple">purple</font> are provided by the vendor of the robot or sensor. We expect some basic functionality, like a controller for a robot and the data output of sensor, provided by the vendor of the product. We only make small adjustments or support for simulation when required.
36+
37+
**default ROS elements**
38+
\
39+
Note that the elements in <font color="blue">blue</font> are default in ROS and not created by us.
40+
41+
**namespaces**
42+
\
43+
Note that each robot and sensor *lives* in it's own namespace. This enables us to add as many robots and sensors to our system as we like, even when they are the same. For example: if we would have a second Franka arm, we can define the namespaces `franka1` and `franka2`.
44+
45+
**modularity**
46+
\
47+
With this setup we focus on the modularity of the system. We can add sensors and robots if we like and reuse nodes that we already developed. If we add another robot arm, we expect the vendor to provide the correct controller nodes. We only need to define the related parameters and should be able to use it again with our Moveit Manager and the default Moveit nodes provided in ROS. And if we add another robot vehicle, we can still use our current Nav2 setup, only requiring the correct definition of the related parameters.
48+
49+
**central controller**
50+
\
51+
At the moment, a human is still the central controller in our system. A human can control both the robots using the joystick or via service/action calls to the Moveit Manager or Nav2. Our goal is to get the human out of the loop.

docs/diagrams/node_definitions.mmd

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
classDiagram
2+
3+
class joystick{
4+
mapping parameters
5+
6+
joy_topic_manager()
7+
joy_to_twist(franka)
8+
joy_to_twist(panther)
9+
}
10+
11+
class moveit_manager:::moveit_manager{
12+
arm parameters
13+
14+
move_to_configuration()
15+
move_hand_to_pose()
16+
add_object()
17+
clear_objects()
18+
}
19+
20+
class nav2:::nav2{
21+
vehicle parameters
22+
23+
navigate_to_pose()
24+
follow_waypoints()
25+
}
26+
27+
classDef moveit_manager stroke: #ff0000
28+
classDef nav2 stroke: #00ff00
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
SPDX-FileCopyrightText: Alliander N. V.
2+
3+
SPDX-License-Identifier: Apache-2.0

docs/diagrams/system_overview.mmd

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
---
2+
config:
3+
class:
4+
hideEmptyMembersBox: true
5+
---
6+
7+
classDiagram
8+
9+
%% Franka:
10+
11+
namespace franka {
12+
class franka.moveit_manager:::moveit_manager
13+
14+
class franka.moveit_servo:::external_node
15+
16+
class franka.moveit_ros_move_group:::external_node
17+
18+
class franka.controller:::vendor
19+
}
20+
21+
franka.moveit_manager --> franka.moveit_ros_move_group
22+
franka.moveit_servo --> franka.controller
23+
franka.moveit_ros_move_group --> franka.controller
24+
25+
%% Panther:
26+
27+
namespace panther{
28+
class panther.nav2:::nav2
29+
30+
class panther.controller:::vendor
31+
}
32+
33+
panther.nav2 --> panther.controller
34+
35+
36+
%% Sensors:
37+
38+
namespace realsense{
39+
class realsense.depth_image:::vendor
40+
}
41+
42+
namespace zed{
43+
class zed.depth_image:::vendor
44+
}
45+
46+
namespace velodyne{
47+
class velodyne.pointcloud:::vendor
48+
}
49+
50+
namespace teltonika{
51+
class teltonika.gps:::vendor
52+
}
53+
54+
velodyne.pointcloud --> panther.nav2
55+
teltonika.gps --> panther.nav2
56+
57+
%% Joystick:
58+
59+
class joystick
60+
61+
joystick --> franka.moveit_servo
62+
joystick --> panther.controller
63+
64+
65+
classDef external_node stroke: #0000ff
66+
classDef moveit_manager stroke: #ff0000
67+
classDef nav2 stroke: #00ff00
68+
classDef vendor stroke: #ff00ff
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
SPDX-FileCopyrightText: Alliander N. V.
2+
3+
SPDX-License-Identifier: Apache-2.0

docs/index.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
Home <self>
1818

1919
content/getting_started.md
20+
content/system_overview.md
2021

2122
content/franka.md
2223
content/panther.md

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ dependencies = [
3636
"sphinx-autobuild>=2024.10.3",
3737
"sphinx-copybutton>=0.5.2",
3838
"sphinx-rtd-theme>=3.0.2",
39+
"sphinxcontrib-mermaid>=1.0.0",
3940
"sphinxcontrib-video>=0.4.1",
4041
"termcolor>=3.1.0",
4142
"tornado>=6.5.1",

uv.lock

Lines changed: 15 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)