Commit 770d6872 authored by Florent Lamiraux's avatar Florent Lamiraux Committed by Florent Lamiraux florent@laas.fr
Browse files

Add diagram on roslaunch architecture.

parent 647ec217
......@@ -43,6 +43,9 @@ ADD_DOC_DEPENDENCY (agimus_demos)
ADD_DOC_DEPENDENCY (hpp-manipulation-corba)
CONFIGURE_FILE (doc/main-page.hh.in ${CMAKE_BINARY_DIR}/doc/main-page.hh
@ONLY)
@ONLY)
CONFIGURE_FILE (doc/figures/talos-manipulate-boxes-geometric-simu.launch.dot.in
${CMAKE_BINARY_DIR}/doc/figures/talos-manipulate-boxes-geometric-simu.launch.dot
@ONLY)
SETUP_HPP_PROJECT_FINALIZE ()
INPUT = @CMAKE_SOURCE_DIR@/doc @CMAKE_BINARY_DIR@/doc
\ No newline at end of file
INPUT = @CMAKE_SOURCE_DIR@/doc @CMAKE_BINARY_DIR@/doc
DOTFILE_DIRS=@CMAKE_BINARY_DIR@/doc/figures
To generate the ROS node graphs
rosrun rqt_graph rqt_graph
To generate the roslaunch diagram, go to roslaunch_to_dot and type
./roslaunch-to-dot.py --show-node-type /home/florent/devel/pyrene/agimus/install/share/agimus_demos/launch/talos_manipulate_boxes_geometric_simu.launch --svg talos-manipulate-boxes-geometric-simu.launch.svg
./roslaunch-to-dot.py --show-node-type /home/florent/devel/pyrene/agimus/install/share/agimus_demos/launch/talos_manipulate_boxes_geometric_simu.launch talos-manipulate-boxes-geometric-simu.launch.dot.in
then
1. add size information by hand: size = "15,15",
2. add links to agimus packages documentations.
then resize the figure in inkscape.
This diff is collapsed.
digraph talos_manipulate_boxes_geometric_simu {
size = "15,15"
graph [compound=True,
fontsize=35,
nodesep=2,
ranksep=2,
ratio=0.772727272727
];
node [fontsize=35,
label="\N"
];
edge [fontsize=35];
subgraph cluster_dynamic_graph_bridge {
graph [label=dynamic_graph_bridge,
penwidth=3
];
node_dynamic_graph_bridge_geometric_simu_node_stack_of_tasks [fillcolor="#6495ed",
label="node_stack_of_tasks
type: geometric_simu",
shape=rectangle,
style=filled];
}
subgraph cluster_tf2_ros {
graph [label=tf2_ros,
penwidth=3
];
node_tf2_ros_buffer_server_tf2_buffer_server [fillcolor="#6495ed",
label="tf2_buffer_server
type: buffer_server",
shape=rectangle,
style=filled];
}
subgraph cluster_gerard_bauzil {
graph [label=gerard_bauzil,
penwidth=3
];
launch_gerard_bauzil_plank_of_wood [fillcolor="#d3d3d3",
label="plank_of_wood.launch",
shape=rectangle,
style=filled];
launch_gerard_bauzil_table_140_70_73 [fillcolor="#d3d3d3",
label="table_140_70_73.launch",
shape=rectangle,
style=filled];
}
subgraph cluster_agimus_hpp {
graph [label=agimus_hpp,
href="@AGIMUS_HPP_DOXYGENDOCDIR@/index.html",
penwidth=3
];
"node_agimus_hpp_hpp_node.py_hpp_node" [fillcolor="#6495ed",
label="hpp_node
type: hpp_node.py",
shape=rectangle,
style=filled];
}
subgraph cluster_sot_pyrene_bringup {
graph [label=sot_pyrene_bringup,
penwidth=3
];
launch_sot_pyrene_bringup_geometric_simu [fillcolor="#d3d3d3",
label="geometric_simu.launch",
shape=rectangle,
style=filled];
launch_sot_pyrene_bringup_geometric_simu_context [fillcolor="#d3d3d3",
label="geometric_simu_context.launch",
shape=rectangle,
style=filled];
yaml_sot_pyrene_bringup_pyrene_yaml [label="pyrene.yaml"];
}
subgraph cluster_agimus_demos {
graph [label=agimus_demos
penwidth=3
];
launch_agimus_demos_talos_manipulate_boxes_geometric_simu [fillcolor="#d3d3d3",
label="talos_manipulate_boxes_geometric_simu.launch",
shape=rectangle,
style=filled];
}
subgraph cluster_agimus_sot {
graph [label=agimus_sot,
href="@AGIMUS_SOT_DOXYGENDOCDIR@/index.html",
penwidth=3
];
launch_agimus_sot_supervisor [fillcolor="#d3d3d3",
label="supervisor.launch",
shape=rectangle,
style=filled];
"node_agimus_sot_start_supervisor.py_start_supervisor" [fillcolor="#6495ed",
label="start_supervisor
type: start_supervisor.py",
shape=rectangle,
style=filled];
}
subgraph cluster_robot_state_publisher {
graph [label=robot_state_publisher,
penwidth=3
];
node_robot_state_publisher_robot_state_publisher_robot_state_publisher [fillcolor=red,
label="robot_state_publisher
type: robot_state_publisher",
shape=rectangle,
style=filled];
node_robot_state_publisher_state_publisher_robot_state_publisher [fillcolor=red,
label="robot_state_publisher
type: state_publisher",
shape=rectangle,
style=filled];
}
subgraph cluster_tf {
graph [label=tf,
penwidth=3
];
node_tf_static_transform_publisher_to_tf [fillcolor="#6495ed",
label="to_tf
type: static_transform_publisher",
shape=rectangle,
style=filled];
}
subgraph cluster_agimus {
graph [label=agimus,
href="@AGIMUS_DOXYGENDOCDIR@/index.html",
penwidth=3
];
launch_agimus_path_execution [fillcolor="#d3d3d3",
label="path_execution.launch",
shape=rectangle,
style=filled];
"node_agimus_path_execution_fsm.py_path_execution_fsm" [fillcolor="#6495ed",
label="path_execution_fsm
type: path_execution_fsm.py",
shape=rectangle,
style=filled];
node_agimus_rqt_path_execution_path_execution_supervision [fillcolor="#6495ed",
label="path_execution_supervision
type: rqt_path_execution",
shape=rectangle,
style=filled];
}
launch_agimus_sot_supervisor -> "node_agimus_sot_start_supervisor.py_start_supervisor" [color=black,
penwidth=3];
launch_sot_pyrene_bringup_geometric_simu -> launch_sot_pyrene_bringup_geometric_simu_context [color=black,
penwidth=3];
launch_sot_pyrene_bringup_geometric_simu -> node_dynamic_graph_bridge_geometric_simu_node_stack_of_tasks [color=black,
penwidth=3];
launch_sot_pyrene_bringup_geometric_simu_context -> yaml_sot_pyrene_bringup_pyrene_yaml [color=black,
penwidth=3];
launch_sot_pyrene_bringup_geometric_simu_context -> node_robot_state_publisher_state_publisher_robot_state_publisher [color=black,
penwidth=3];
launch_sot_pyrene_bringup_geometric_simu_context -> node_tf2_ros_buffer_server_tf2_buffer_server [color=black,
penwidth=3];
launch_agimus_path_execution -> "node_agimus_path_execution_fsm.py_path_execution_fsm" [color=black,
penwidth=3];
launch_agimus_path_execution -> node_agimus_rqt_path_execution_path_execution_supervision [color="#ff8c00",
label="gui:=true",
penwidth=3];
launch_agimus_demos_talos_manipulate_boxes_geometric_simu -> launch_agimus_sot_supervisor [color=black,
penwidth=3];
launch_agimus_demos_talos_manipulate_boxes_geometric_simu -> launch_sot_pyrene_bringup_geometric_simu [color=black,
penwidth=3];
launch_agimus_demos_talos_manipulate_boxes_geometric_simu -> "node_agimus_hpp_hpp_node.py_hpp_node" [color=black,
penwidth=3];
launch_agimus_demos_talos_manipulate_boxes_geometric_simu -> launch_agimus_path_execution [color=black,
penwidth=3];
launch_agimus_demos_talos_manipulate_boxes_geometric_simu -> node_tf_static_transform_publisher_to_tf [color=black,
penwidth=3];
launch_agimus_demos_talos_manipulate_boxes_geometric_simu -> launch_gerard_bauzil_plank_of_wood [color=black,
penwidth=3];
launch_agimus_demos_talos_manipulate_boxes_geometric_simu -> launch_gerard_bauzil_table_140_70_73 [color=black,
penwidth=3];
launch_gerard_bauzil_plank_of_wood -> node_robot_state_publisher_robot_state_publisher_robot_state_publisher [color=black,
penwidth=3];
launch_gerard_bauzil_table_140_70_73 -> node_robot_state_publisher_robot_state_publisher_robot_state_publisher [color=black,
penwidth=3];
}
// Copyright 2019 CNRS Airbus
// Copyright 2019 CNRS Airbus SAS
// Author: Florent Lamiraux
// Redistribution and use in source and binary forms, with or without
......@@ -64,11 +64,20 @@
///
/// In this mode, the control input computed by the Stack of Tasks software is
/// integrated to update the configuration of the robot. The two figures below
/// display the architecture.
/// display the ROS node architecture.
///
/// \image html talos-manipulate-boxes-geometric-simu.launch.svg "Example of ROS architecture for a humanoid robot manipulating a box on a table. Blue and red boxes represent ROS nodes grouped by packages. Grey boxes represent launch files."
/// The nodes more specific to agimus architecture are the following
///
/// \image html geometric-simu-rosgraph.svg "Example of ROS architecture for a humanoid robot manipulating a box on a table. Ellipses represent ROS nodes, arrows represent topics."
/// Node name | package | type | description
/// --------- | ------- | ---- | -----------
/// hpp_node | <a href="@AGIMUS_HPP_DOXYGENDOCDIR@/index.html">agimus_hpp</a> | hpp_node.py | Client to HPP manipulation planner. Note that \c hppcorbaserver executable must be running and accessible via CORBA channel. This node reads from \c hppcorbaserver. Manipulation planning requests should be launched by the user.
/// start_supervisor | <a href="@AGIMUS_SOT_DOXYGENDOCDIR@/index.html">agimus_sot</a> | start_supervisor.py | Runs a script in the remote python interpreter of the Stack Of Tasks (service \c RunCommand). The name of the script is given as a parameter.
/// path_execution_fsm | <a href="@AGIMUS_DOXYGENDOCDIR@/index.html"> agimus </a> | path_execution_fsm.py | Creates a finite-state machine implemented using smach (see ROS wiki for displaying the fsm).
/// path_execution_supervision | <a href="@AGIMUS_DOXYGENDOCDIR@/index.html"> agimus </a> | rqt_path_execution | GUI that enables the user to control the above finite-state machine in order to follow the planned trajectory as desired (step by step, one shot,...)
///
/// \dotfile talos-manipulate-boxes-geometric-simu.launch.dot "Example of ROS architecture for a humanoid robot manipulating a box on a table. Blue and red boxes represent ROS nodes grouped by packages. Grey boxes represent launch files." width=100%
///
/// \image html talos-manipulate-boxes-geometric-simu-rosgraph.svg "Example of ROS architecture for a humanoid robot manipulating a box on a table. Ellipses represent ROS nodes, rectangles represent topics." width=100%
///
/// \subsection agimus_doc_subsec_gazebo_simulation Gazebo simulation
///
......@@ -78,7 +87,7 @@
/// \li \c hpp_node
/// \li ...
///
/// \subsection agimus_doc_subsec_real_robot
/// \subsection agimus_doc_subsec_real_robot On the real robot
///
/// In this mode, the software is run on the real robot.
///
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment