[openrtm-users 02840] Re: How the data ports share data with service ports?

Ando Noriaki n-ando @ aist.go.jp
2013年 7月 9日 (火) 11:12:28 JST


Hello,

Since there are no limitation for the constructor of service provider
implementation, in order to get/set some variables in the component
class, you can give a pointer to the service implementation class
(getState class) in the constructor.

But sharng variables between the component class and the service
provider implementation class through static variables and static
functions is dangerous.  If you have two or more components in one
process, your strategy would fail.

A reasonable way is the following.
1. Making a class (ex. ImageProcesing) for your image processing core logic.
2. Instantiate the ImageProcessing class in the your component class.
3. When instantiating the service provider class (getState), give the
   pinter of the ImageProcessing to the getState class.
4. Do all the operations (processing, getting data, setting parameters
   and so on) through member functions of the ImageProcessing class
   when you need data/parameters/functions of the ImageProcessing class
   in onXXXXX() and/or service provider functions.

Attached figure shows a class diagram of the structure.


Best regards,
Noriaki Ando


2013/7/6  <shanshan1370 @ sina.com>:
> Dear all: I’m writing a component that containing both data port and
> service port. Actually it is a camera for robot tracking. And the data port
> is used for outputing the location of the robot. While the service port
> provides an interface for querying whether the robot is insight or not. I
> program this with C++ language. In the onExecute() function, I do the vision
> processing and have a variable storing whether the robot is insight or not.
> The problem is, in the getStateSVC_impl.cpp where the code for the service
> port is implemented, I don’t want to do the vision processing again. I
> would rather use the result from onExecute() function, which is real-time
> enough. But I can not get the variable in onExecute() function because I can
> not have an object of it. Since the framework of getStateSVC_impl.cpp is
> automatically generated by the RTBuilder, I’m not sure if the constructor
> function can be added with extra parameters, which allow me to pass some
> object into this class. My compromising way to solve this is to use static
> variable. But as the functionality of the service port gets more
> complicated,
> more and more static variables are needed, and even static functions are
> needed. Please help me if there are any better solution. Thank you very
> much!
> Wenshan
>
> _______________________________________________
> openrtm-users mailing list
> openrtm-users @ openrtm.org
> http://www.openrtm.org/mailman/listinfo/openrtm-users
-------------- next part --------------
$B%F%-%9%H7A<00J30$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B...
$B%U%!%$%kL>(B: imageprocessing.png
$B7?(B:         image/png
$B%5%$%:(B:     41538 $B%P%$%H(B
$B @ bL@(B:       $BL5$7(B
URL:        <http://www.openrtm.org/pipermail/openrtm-users/attachments/20130709/efe5b44a/attachment.png>


More information about the openrtm-users mailing list