プロジェクト

全般

プロフィール

通信プラットフォームプロトタイプ開発(doil)作業メモ

本ページは、通信プラットフォームプロトタイプ作成作業の作業メモです。

開発環境の準備

開発リポジトリ

リポジトリサーバーに以下リポジトリを作成して、開発中のソースをチェックインする。

http://openrtm.org/svn/OpenRTM-aist/branches/work_ForDoil

必要なツールの準備

ビルドするために以下のものを実行する。

$sudo apt-get install subversion
$wget http://svn.openrtm.org/OpenRTM-aist/trunk/OpenRTM-aist/build/pkg_install_ubuntu.sh
$chmod 777 pkg_install_ubuntu.sh
$sudo ./pkg_install_ubuntu.sh
$sudo apt-get install libcppunit-dev
$sudo apt-get install  libzeroc-ice34-dev
$sudo apt-get install autoconf
$sudo apt-get install libtool
$sudo apt-get install doxygen


ice のバージョンは 3.4.2. (以前の ice のバージョンはは 3.2.1.)。
cppunit、iceに関しては将来的にはconfigure.acでチェックするようにした方がよいかも。。。

ビルド方法

一度、全てをビルドする。
work_ForDoil/OpenRTM-aist で

$./build/autogen
$./configure
$make

work_ForDoil/OpenRTM-aist/src/lib/rtc で

$make

work_ForDoil/OpenRTM-aist/src/lib/doil/utils/omniidl_be/tests/unitTest/stubs で

$make

omniidl の doil バックエンド

/usr/lib/omniidl/omniidl_be/ へ
work_ForDoil/OpenRTM-aist/src/lib/doil/utils/omniidl_be/doil をコピーする。

work_ForDoil/OpenRTM-aist/src/lib/doil/utils/omniidl_be/Makefile.am を修正して、コピーせずにできるようにしたい。。。。
現在は、./createinit.py `pwd` > init.py でエラーが発生する。

echo "#!/usr/bin/env python" > createinit.py
echo "import sys"            >> createinit.py
echo "import omniidl_be"     >> createinit.py
echo "path0 = '.'"   >> createinit.py
echo "path1 = omniidl_be.__path__[0]" >> createinit.py
echo "print \"__path__ = ['%s', '%s']\" % (path0, path1)" >> createinit.py
chmod 755 createinit.py
./createinit.py `pwd` > __init__.py
Traceback (most recent call last):
  File "./createinit.py", line 3, in <module>
    import omniidl_be
ImportError: No module named omniidl_be
make: *** [__init__.py] エラー 1

ディレクトリ

+--OpenRTM-aist
   +--src
      +--ext
      +--lib
         +--coil
         +--rtm
         +--rtcyt
         +--rtm_corba
         +--doil
            +--tests
            +--corba
            +--ice
            +--utils
               +--omniidl_be

開発について

doilビルド方法

work_ForDoil/OpenRTM-aist/src/lib/doil/utils/omniidl_be/tests/unitTest で

$../../../../../../../build/autogen
$./configure
$make

work_ForDoil/OpenRTM-aist/src/lib/rtc で

$make

work_ForDoil/OpenRTM-aist/src/lib/doil/utils/omniidl_be/tests で

$make interface
$make proxy
$make servant

ここで、再度

$rm PortServiceProxy.cpp SDOServiceProxy.cpp ConfigurationProxy.cpp PortServiceProxy.h SDOServiceProxy.h  ConfigurationProxy.h
$svn update

この操作は、バックエンドでコードの生成ができるよになれば、不要になる。

doilテスト

work_ForDoil/OpenRTM-aist/src/lib/doil/corba/tests/TestRunner.cpp

work_ForDoil/OpenRTM-aist/src/lib/doil/corba/tests/CORBAManager

work_ForDoil/OpenRTM-aist/src/lib/doil/ice/tests/TestRunner.cpp
work_ForDoil/OpenRTM-aist/src/lib/doil/ice/tests/IceManager

work_ForDoil/OpenRTM-aist/src/lib/doil/tests/TestRunner.cpp
work_ForDoil/OpenRTM-aist/src/lib/doil/tests/ORBManager

work_ForDoil/OpenRTM-aist/src/lib/doil/utils/omniidl_be/tests/unitTest/TestRunner.cpp
work_ForDoil/OpenRTM-aist/src/lib/doil/utils/omniidl_be/tests/ExecutionContextProxy
work_ForDoil/OpenRTM-aist/src/lib/doil/utils/omniidl_be/tests/OrganizationProxy
work_ForDoil/OpenRTM-aist/src/lib/doil/utils/omniidl_be/tests/ConfigurationProxy
work_ForDoil/OpenRTM-aist/src/lib/doil/utils/omniidl_be/tests/PortServiceProxy

work_ForDoil/OpenRTM-aist/src/lib/doil/utils/omniidl_be/tests/unitTest/ComponentActionServant
work_ForDoil/OpenRTM-aist/src/lib/doil/utils/omniidl_be/tests/unitTest/ConfigurationServant
work_ForDoil/OpenRTM-aist/src/lib/doil/utils/omniidl_be/tests/unitTest/DataFlowComponentActionServant
work_ForDoil/OpenRTM-aist/src/lib/doil/utils/omniidl_be/tests/unitTest/DataFlowComponentServant
work_ForDoil/OpenRTM-aist/src/lib/doil/utils/omniidl_be/tests/unitTest/ExecutionContextServant
work_ForDoil/OpenRTM-aist/src/lib/doil/utils/omniidl_be/tests/unitTest/ExecutionContextServiceServant
work_ForDoil/OpenRTM-aist/src/lib/doil/utils/omniidl_be/tests/unitTest/FsmObjectServant
work_ForDoil/OpenRTM-aist/src/lib/doil/utils/omniidl_be/tests/unitTest/FsmParticipantActionServant
work_ForDoil/OpenRTM-aist/src/lib/doil/utils/omniidl_be/tests/unitTest/FsmParticipantServant
work_ForDoil/OpenRTM-aist/src/lib/doil/utils/omniidl_be/tests/unitTest/FsmServant
work_ForDoil/OpenRTM-aist/src/lib/doil/utils/omniidl_be/tests/unitTest/FsmServiceServant
work_ForDoil/OpenRTM-aist/src/lib/doil/utils/omniidl_be/tests/unitTest/LightweightRTObjectServant
work_ForDoil/OpenRTM-aist/src/lib/doil/utils/omniidl_be/tests/unitTest/ModeCapableServant
work_ForDoil/OpenRTM-aist/src/lib/doil/utils/omniidl_be/tests/unitTest/ModeServant
work_ForDoil/OpenRTM-aist/src/lib/doil/utils/omniidl_be/tests/unitTest/MonitoringServant
work_ForDoil/OpenRTM-aist/src/lib/doil/utils/omniidl_be/tests/unitTest/MultiModeComponentActionServant
work_ForDoil/OpenRTM-aist/src/lib/doil/utils/omniidl_be/tests/unitTest/MultiModeObjectServant
work_ForDoil/OpenRTM-aist/src/lib/doil/utils/omniidl_be/tests/unitTest/OrganizationServant
work_ForDoil/OpenRTM-aist/src/lib/doil/utils/omniidl_be/tests/unitTest/PortServiceServant
work_ForDoil/OpenRTM-aist/src/lib/doil/utils/omniidl_be/tests/unitTest/RTObjectServant
work_ForDoil/OpenRTM-aist/src/lib/doil/utils/omniidl_be/tests/unitTest/SDOServant
work_ForDoil/OpenRTM-aist/src/lib/doil/utils/omniidl_be/tests/unitTest/SDOServiceServant
work_ForDoil/OpenRTM-aist/src/lib/doil/utils/omniidl_be/tests/unitTest/SDOSystemElementServant

work_ForDoil/OpenRTM-aist/src/lib/doil/utils/omniidl_be/tests/unitTest/ConfigurationServant で

$make

開発について

CROBA

- Proxy

doil::ProxyBase <- doil::CORBA::CORBAPrxyBase <- xxxx::CROBA::XXXXProxy

例) ConfigurationProxy
doil::ProxyBase <- doil::CORBA::CORBAPrxyBase <- SDOPackage::CROBA::ConfigurationProxy

namespace doil
{
  class ProxyBase
  {
       ・
       ・
       ・
  };
};

namespace doil
{
namespace CORBA
{
  class CORBAProxyBase
    : public doil::ProxyBase,
  {
       ・
       ・
       ・
  }
}
}

namespace doil
{
  class ImplBase
  {
       ・
       ・
       ・
  };

  typedef ImplBase LocalBase;
};

namespace SDOPackage 
{
namespace Local 
{
  class IConfiguration 
   : public virtual doil::LocalBase

  {
       ・
       ・
       ・
  }
}
}

namespace SDOPackage
{
namespace CORBA
{

  class ConfigurationProxy
  : public virtual ::doil::CORBA::CORBAProxyBase,
    public virtual ::SDOPackage::Local::IConfiguration
  {
       ・
       ・
       ・
  }
}
}

- Servant

その他

Proxyパターンデザインパターン

CORBA、Ice、XML-RPC

CORBA Ice XML-RPC
インターフェース言語 IDL定義 Slice定義

Slice定義

http://doc.zeroc.com/display/Ice/The+Slice+Language
http://zeroc.com/doc/Ice-3.3.0/manual/Slice.5.21.html

omniidlのバックエンド(omniidl_be)のdoilでIDLファイルiceファイルを生成する。

typedef
any型 classを使用する
boolean型 bool型
raises (XXXXXX); throws XXXXXX;
bool foo(in string bar); bool foo(string bar); 引数の in inout は削除する。
interface SDO : SDOSystemElement interface SDO extends SDOSystemElement interface継承
 <compiler-name> [options] file...

- h, --help
-
Displays a help message.
- v, --version
-
Displays the compiler version.
- DNAME
-
Defines the preprocessor symbol NAME.
- DNAME=DEF
-
Defines the preprocessor symbol NAME with the value DEF.
- UNAME
-
Undefines the preprocessor symbol {NAME.
- IDIR
-
Add the directory DIR to the search path for #include directives.
- E
-
Print the preprocessor output on stdout.
- --output-dir DIR
-- Place the generated files into directory DIR.
- d, --debug
-
Print debug information showing the operation of the Slice parser.
- --ice
-- Permit use of the normally reserved prefix Ice for identifiers. Use this option only when compiling the source code for the Ice run time.
- --underscore
-- Permit use of underscores in Slice identifiers.

Mapping of Slice Built-In Types to C++ Types

The Slice built-in types are mapped to C++ types as shown in this table:
Slice C++
bool bool
byte Ice::Byte
short Ice::Short
int Ice::Int
long Ice::Long
float Ice::Float
double Ice::Double
string std::string

/OpenRTM-aist/src/lib/doil/ice/BasicTypeConversion.h