Class Diagrams
The following class diagram of the soar_ros::Service class (inheritance diagram) provides a basic overview of the library architecture.
All ROS wrapper classes adjusted for usage with Soar are based on the input or output base classes as well as the shared interface.
-
template<typename T, typename pRequestType = typename T::Request::SharedPtr, typename pResponseType = typename T::Response::SharedPtr>
class Service : public virtual soar_ros::Input<typename T::Request::SharedPtr>, public virtual soar_ros::Output<typename T::Response::SharedPtr>, public soar_ros::Interface Inheritance diagram for soar_ros::Service:
![digraph {
graph [bgcolor="#00000000"]
node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2]
edge [color="#1414CE"]
"2" [label="soar_ros::Input< T >" tooltip="soar_ros::Input< T >"]
"3" [label="soar_ros::InputBase" tooltip="soar_ros::InputBase"]
"6" [label="soar_ros::Interface" tooltip="soar_ros::Interface"]
"4" [label="soar_ros::Output< T >" tooltip="soar_ros::Output< T >"]
"5" [label="soar_ros::OutputBase" tooltip="soar_ros::OutputBase"]
"1" [label="soar_ros::Service< T, pRequestType, pResponseType >" tooltip="soar_ros::Service< T, pRequestType, pResponseType >" fillcolor="#BFBFBF"]
"2" -> "3" [dir=forward tooltip="public-inheritance"]
"4" -> "5" [dir=forward tooltip="public-inheritance"]
"1" -> "2" [dir=forward tooltip="public-inheritance"]
"1" -> "4" [dir=forward tooltip="public-inheritance"]
"1" -> "6" [dir=forward tooltip="public-inheritance"]
}](../_images/graphviz-6312e1d08ebf8ede89ab8b2033dbb88f466f3174.png)
Collaboration diagram for soar_ros::Service:
![digraph {
graph [bgcolor="#00000000"]
node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2]
edge [color="#1414CE"]
"2" [label="soar_ros::Input< T >" tooltip="soar_ros::Input< T >"]
"3" [label="soar_ros::InputBase" tooltip="soar_ros::InputBase"]
"6" [label="soar_ros::Interface" tooltip="soar_ros::Interface"]
"4" [label="soar_ros::Output< T >" tooltip="soar_ros::Output< T >"]
"5" [label="soar_ros::OutputBase" tooltip="soar_ros::OutputBase"]
"1" [label="soar_ros::Service< T, pRequestType, pResponseType >" tooltip="soar_ros::Service< T, pRequestType, pResponseType >" fillcolor="#BFBFBF"]
"2" -> "3" [dir=forward tooltip="public-inheritance"]
"4" -> "5" [dir=forward tooltip="public-inheritance"]
"1" -> "2" [dir=forward tooltip="public-inheritance"]
"1" -> "4" [dir=forward tooltip="public-inheritance"]
"1" -> "6" [dir=forward tooltip="public-inheritance"]
}](../_images/graphviz-6312e1d08ebf8ede89ab8b2033dbb88f466f3174.png)
The difference between service and client from the libraries perspective is only the reversal of output and input calls.
-
template<typename T, typename pRequestType = typename T::Request::SharedPtr, typename pResponseType = typename T::Response::SharedPtr>
class Client : public virtual soar_ros::Output<typename T::Request::SharedPtr>, public virtual soar_ros::Input<typename T::Response::SharedPtr>, public soar_ros::Interface Inheritance diagram for soar_ros::Client:
![digraph {
graph [bgcolor="#00000000"]
node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2]
edge [color="#1414CE"]
"1" [label="soar_ros::Client< T, pRequestType, pResponseType >" tooltip="soar_ros::Client< T, pRequestType, pResponseType >" fillcolor="#BFBFBF"]
"4" [label="soar_ros::Input< T >" tooltip="soar_ros::Input< T >"]
"5" [label="soar_ros::InputBase" tooltip="soar_ros::InputBase"]
"6" [label="soar_ros::Interface" tooltip="soar_ros::Interface"]
"2" [label="soar_ros::Output< T >" tooltip="soar_ros::Output< T >"]
"3" [label="soar_ros::OutputBase" tooltip="soar_ros::OutputBase"]
"1" -> "2" [dir=forward tooltip="public-inheritance"]
"1" -> "4" [dir=forward tooltip="public-inheritance"]
"1" -> "6" [dir=forward tooltip="public-inheritance"]
"4" -> "5" [dir=forward tooltip="public-inheritance"]
"2" -> "3" [dir=forward tooltip="public-inheritance"]
}](../_images/graphviz-2633a2222d4014af32b635f04b0aab029b5d6f19.png)
Collaboration diagram for soar_ros::Client:
![digraph {
graph [bgcolor="#00000000"]
node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2]
edge [color="#1414CE"]
"1" [label="soar_ros::Client< T, pRequestType, pResponseType >" tooltip="soar_ros::Client< T, pRequestType, pResponseType >" fillcolor="#BFBFBF"]
"4" [label="soar_ros::Input< T >" tooltip="soar_ros::Input< T >"]
"5" [label="soar_ros::InputBase" tooltip="soar_ros::InputBase"]
"6" [label="soar_ros::Interface" tooltip="soar_ros::Interface"]
"2" [label="soar_ros::Output< T >" tooltip="soar_ros::Output< T >"]
"3" [label="soar_ros::OutputBase" tooltip="soar_ros::OutputBase"]
"1" -> "2" [dir=forward tooltip="public-inheritance"]
"1" -> "4" [dir=forward tooltip="public-inheritance"]
"1" -> "6" [dir=forward tooltip="public-inheritance"]
"4" -> "5" [dir=forward tooltip="public-inheritance"]
"2" -> "3" [dir=forward tooltip="public-inheritance"]
}](../_images/graphviz-2633a2222d4014af32b635f04b0aab029b5d6f19.png)
Publisher and subscriber only have either the input or the output functionality:
![digraph {
graph [bgcolor="#00000000"]
node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2]
edge [color="#1414CE"]
"4" [label="soar_ros::Interface" tooltip="soar_ros::Interface"]
"2" [label="soar_ros::Output< T >" tooltip="soar_ros::Output< T >"]
"3" [label="soar_ros::OutputBase" tooltip="soar_ros::OutputBase"]
"1" [label="soar_ros::Publisher< T >" tooltip="soar_ros::Publisher< T >" fillcolor="#BFBFBF"]
"2" -> "3" [dir=forward tooltip="public-inheritance"]
"1" -> "2" [dir=forward tooltip="public-inheritance"]
"1" -> "4" [dir=forward tooltip="public-inheritance"]
}](../_images/graphviz-df647cb449a6bae1c10da135060d30ed8ead11a2.png)
![digraph {
graph [bgcolor="#00000000"]
node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2]
edge [color="#1414CE"]
"2" [label="soar_ros::Input< T >" tooltip="soar_ros::Input< T >"]
"3" [label="soar_ros::InputBase" tooltip="soar_ros::InputBase"]
"4" [label="soar_ros::Interface" tooltip="soar_ros::Interface"]
"1" [label="soar_ros::Subscriber< T >" tooltip="soar_ros::Subscriber< T >" fillcolor="#BFBFBF"]
"2" -> "3" [dir=forward tooltip="public-inheritance"]
"1" -> "2" [dir=forward tooltip="public-inheritance"]
"1" -> "4" [dir=forward tooltip="public-inheritance"]
}](../_images/graphviz-1f1178d96343584bdc9cef3ffe06a11ab79d1a73.png)