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"]
"3" [label="soar_ros::InputBase" tooltip="soar_ros::InputBase"]
"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"]
"6" [label="soar_ros::Interface" tooltip="soar_ros::Interface"]
"4" [label="soar_ros::Output< typename T::Response::SharedPtr >" tooltip="soar_ros::Output< typename T::Response::SharedPtr >"]
"2" [label="soar_ros::Input< typename T::Request::SharedPtr >" tooltip="soar_ros::Input< typename T::Request::SharedPtr >"]
"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-4d102d78a2aa9c0fdb912e03f8f741170fc95d69.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"]
"3" [label="soar_ros::InputBase" tooltip="soar_ros::InputBase"]
"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"]
"6" [label="soar_ros::Interface" tooltip="soar_ros::Interface"]
"4" [label="soar_ros::Output< typename T::Response::SharedPtr >" tooltip="soar_ros::Output< typename T::Response::SharedPtr >"]
"2" [label="soar_ros::Input< typename T::Request::SharedPtr >" tooltip="soar_ros::Input< typename T::Request::SharedPtr >"]
"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-4d102d78a2aa9c0fdb912e03f8f741170fc95d69.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"]
"5" [label="soar_ros::InputBase" tooltip="soar_ros::InputBase"]
"4" [label="soar_ros::Input< typename T::Response::SharedPtr >" tooltip="soar_ros::Input< typename T::Response::SharedPtr >"]
"3" [label="soar_ros::OutputBase" tooltip="soar_ros::OutputBase"]
"2" [label="soar_ros::Output< typename T::Request::SharedPtr >" tooltip="soar_ros::Output< typename T::Request::SharedPtr >"]
"6" [label="soar_ros::Interface" tooltip="soar_ros::Interface"]
"1" [label="soar_ros::Client< T, pRequestType, pResponseType >" tooltip="soar_ros::Client< T, pRequestType, pResponseType >" fillcolor="#BFBFBF"]
"4" -> "5" [dir=forward tooltip="public-inheritance"]
"2" -> "3" [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-a258076500e4a2699ec59364eb2a2a7e34944b9b.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"]
"5" [label="soar_ros::InputBase" tooltip="soar_ros::InputBase"]
"4" [label="soar_ros::Input< typename T::Response::SharedPtr >" tooltip="soar_ros::Input< typename T::Response::SharedPtr >"]
"3" [label="soar_ros::OutputBase" tooltip="soar_ros::OutputBase"]
"2" [label="soar_ros::Output< typename T::Request::SharedPtr >" tooltip="soar_ros::Output< typename T::Request::SharedPtr >"]
"6" [label="soar_ros::Interface" tooltip="soar_ros::Interface"]
"1" [label="soar_ros::Client< T, pRequestType, pResponseType >" tooltip="soar_ros::Client< T, pRequestType, pResponseType >" fillcolor="#BFBFBF"]
"4" -> "5" [dir=forward tooltip="public-inheritance"]
"2" -> "3" [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-a258076500e4a2699ec59364eb2a2a7e34944b9b.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"]
"2" [label="soar_ros::Output< T >" tooltip="soar_ros::Output< T >"]
"3" [label="soar_ros::OutputBase" tooltip="soar_ros::OutputBase"]
"4" [label="soar_ros::Interface" tooltip="soar_ros::Interface"]
"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-00f3f9383b9e7d25a14c433838b9ad45ec820382.png)
![digraph {
graph [bgcolor="#00000000"]
node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2]
edge [color="#1414CE"]
"1" [label="soar_ros::Subscriber< T >" tooltip="soar_ros::Subscriber< T >" fillcolor="#BFBFBF"]
"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" -> "2" [dir=forward tooltip="public-inheritance"]
"1" -> "4" [dir=forward tooltip="public-inheritance"]
"2" -> "3" [dir=forward tooltip="public-inheritance"]
}](../_images/graphviz-44a7eba15294653fcc0833cb6d01e2d58f731de8.png)