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::soar_ros::Input<typename T::Request::SharedPtr>, public virtual soar_ros::soar_ros::Output<typename T::Response::SharedPtr>, public soar_ros::soar_ros::Interface Inheritence diagram for soar_ros::Service:
![digraph {
graph [bgcolor="#00000000"]
node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2]
edge [color="#1414CE"]
"1" [label="soar_ros::Service< T, pRequestType, pResponseType >" tooltip="soar_ros::Service< T, pRequestType, pResponseType >" fillcolor="#BFBFBF"]
"2" [label="soar_ros::soar_ros::Input< typename T::Request::SharedPtr >" tooltip="soar_ros::soar_ros::Input< typename T::Request::SharedPtr >"]
"3" [label="soar_ros::soar_ros::InputBase" tooltip="soar_ros::soar_ros::InputBase"]
"6" [label="soar_ros::soar_ros::Interface" tooltip="soar_ros::soar_ros::Interface"]
"4" [label="soar_ros::soar_ros::Output< typename T::Response::SharedPtr >" tooltip="soar_ros::soar_ros::Output< typename T::Response::SharedPtr >"]
"5" [label="soar_ros::soar_ros::OutputBase" tooltip="soar_ros::soar_ros::OutputBase"]
"1" -> "2" [dir=forward tooltip="public-inheritance"]
"1" -> "4" [dir=forward tooltip="public-inheritance"]
"1" -> "6" [dir=forward tooltip="public-inheritance"]
"2" -> "3" [dir=forward tooltip="public-inheritance"]
"4" -> "5" [dir=forward tooltip="public-inheritance"]
}](../_images/graphviz-4e7113c47262fa6f6f8d4f380bc45b0cbc7ba4b2.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"]
"1" [label="soar_ros::Service< T, pRequestType, pResponseType >" tooltip="soar_ros::Service< T, pRequestType, pResponseType >" fillcolor="#BFBFBF"]
"2" [label="soar_ros::soar_ros::Input< typename T::Request::SharedPtr >" tooltip="soar_ros::soar_ros::Input< typename T::Request::SharedPtr >"]
"3" [label="soar_ros::soar_ros::InputBase" tooltip="soar_ros::soar_ros::InputBase"]
"6" [label="soar_ros::soar_ros::Interface" tooltip="soar_ros::soar_ros::Interface"]
"4" [label="soar_ros::soar_ros::Output< typename T::Response::SharedPtr >" tooltip="soar_ros::soar_ros::Output< typename T::Response::SharedPtr >"]
"5" [label="soar_ros::soar_ros::OutputBase" tooltip="soar_ros::soar_ros::OutputBase"]
"1" -> "2" [dir=forward tooltip="public-inheritance"]
"1" -> "4" [dir=forward tooltip="public-inheritance"]
"1" -> "6" [dir=forward tooltip="public-inheritance"]
"2" -> "3" [dir=forward tooltip="public-inheritance"]
"4" -> "5" [dir=forward tooltip="public-inheritance"]
}](../_images/graphviz-4e7113c47262fa6f6f8d4f380bc45b0cbc7ba4b2.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::soar_ros::Output<typename T::Request::SharedPtr>, public virtual soar_ros::soar_ros::Input<typename T::Response::SharedPtr>, public soar_ros::soar_ros::Interface Inheritence 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::soar_ros::Input< typename T::Response::SharedPtr >" tooltip="soar_ros::soar_ros::Input< typename T::Response::SharedPtr >"]
"5" [label="soar_ros::soar_ros::InputBase" tooltip="soar_ros::soar_ros::InputBase"]
"6" [label="soar_ros::soar_ros::Interface" tooltip="soar_ros::soar_ros::Interface"]
"2" [label="soar_ros::soar_ros::Output< typename T::Request::SharedPtr >" tooltip="soar_ros::soar_ros::Output< typename T::Request::SharedPtr >"]
"3" [label="soar_ros::soar_ros::OutputBase" tooltip="soar_ros::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-7e595071d6b92eed124923878d66edc6c6263d96.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::soar_ros::Input< typename T::Response::SharedPtr >" tooltip="soar_ros::soar_ros::Input< typename T::Response::SharedPtr >"]
"5" [label="soar_ros::soar_ros::InputBase" tooltip="soar_ros::soar_ros::InputBase"]
"6" [label="soar_ros::soar_ros::Interface" tooltip="soar_ros::soar_ros::Interface"]
"2" [label="soar_ros::soar_ros::Output< typename T::Request::SharedPtr >" tooltip="soar_ros::soar_ros::Output< typename T::Request::SharedPtr >"]
"3" [label="soar_ros::soar_ros::OutputBase" tooltip="soar_ros::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-7e595071d6b92eed124923878d66edc6c6263d96.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"]
"1" [label="soar_ros::Publisher< T >" tooltip="soar_ros::Publisher< T >" fillcolor="#BFBFBF"]
"4" [label="soar_ros::soar_ros::Interface" tooltip="soar_ros::soar_ros::Interface"]
"2" [label="soar_ros::soar_ros::Output< T >" tooltip="soar_ros::soar_ros::Output< T >"]
"3" [label="soar_ros::soar_ros::OutputBase" tooltip="soar_ros::soar_ros::OutputBase"]
"1" -> "2" [dir=forward tooltip="public-inheritance"]
"1" -> "4" [dir=forward tooltip="public-inheritance"]
"2" -> "3" [dir=forward tooltip="public-inheritance"]
}](../_images/graphviz-cf62f3b591c1d9544526a92c687b6c5d12ceac41.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::soar_ros::Input< T >" tooltip="soar_ros::soar_ros::Input< T >"]
"3" [label="soar_ros::soar_ros::InputBase" tooltip="soar_ros::soar_ros::InputBase"]
"4" [label="soar_ros::soar_ros::Interface" tooltip="soar_ros::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-50f92390588375bcbe34135128ebf829c5533118.png)