<div dir="ltr"><div>末廣です.<br><br>先ほどのコードで,return None はreturn tcdの誤りです.<br></div><div><br><p class="MsoNormal"><span lang="EN-US">def dummy_data(tcd) :</span></p>

<p class="MsoNormal"><span lang="EN-US"><span>   
</span>if not isinstance(tcd,tuple) :</span></p>

<p class="MsoNormal"><span lang="EN-US"><span>       
</span>return tcd<br></span></p>

<p class="MsoNormal"><span lang="EN-US"><span>   
</span>elif tcd[0] == 15 :</span></p>

<p class="MsoNormal"><span lang="EN-US"><span>       
</span>return apply(tcd[1],[dummy_data(tcd[<wbr>5+2*x]) for x in
range((len(tcd)-4)/2)])</span></p>

<p class="MsoNormal"><span lang="EN-US"><span>   
</span>elif tcd[0] == 19 :</span></p>

<p class="MsoNormal"><span lang="EN-US"><span>       
</span>return [dummy_data(tcd[1+x]) for x in range(len(tcd)-2)]</span></p>

<p class="MsoNormal"><span lang="EN-US"><span>   
</span>elif tcd[0] == 18 :</span></p>

<p class="MsoNormal"><span lang="EN-US"><span>       
</span>return ""</span></p>

<p class="MsoNormal"><span lang="EN-US"><span>   
</span>elif tcd[0] == 21 :</span></p>

<p class="MsoNormal"><span lang="EN-US"><span>       
</span>return dummy_data(tcd[3])</span></p>

<p class="MsoNormal"><span lang="EN-US"><span>   
</span>else :</span></p>

<p class="MsoNormal"><span lang="EN-US"><span>       
</span>return tcd<br></span></p><br><div class="gmail_extra"><br><div class="gmail_quote">2016年12月27日 14:35 takashi suehiro <span dir="ltr"><<a href="mailto:suehiro@is.uec.ac.jp" target="_blank">suehiro@is.uec.ac.jp</a>></span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div><div><div>安藤様, 皆様,<br><br>電通大 末廣です.<br><br></div>私はrtc_<wbr>handleでRTCの入出力ポートにアクセスするために<br></div>以下のようにtype_<wbr>codeを見ながら以下のようにダミーデータを作っています.<br>15がクラス,19がリスト,18が文字列,21が整数,<wbr>実数などだったかな.<br></div>builderで各データ型のtype_<wbr>codeにアクセスできるなら<br>同様な形でコードを生成できると思うのですがいかがでしょうか?<br><br><div><br><div><div><div>---------------<br>

<p class="MsoNormal"><span lang="EN-US">def dummy_data(tcd) :</span></p>

<p class="MsoNormal"><span lang="EN-US"><span>   
</span>if not isinstance(tcd,tuple) :</span></p>

<p class="MsoNormal"><span lang="EN-US"><span>       
</span>return None</span></p>

<p class="MsoNormal"><span lang="EN-US"><span>   
</span>elif tcd[0] == 15 :</span></p>

<p class="MsoNormal"><span lang="EN-US"><span>       
</span>return apply(tcd[1],[dummy_data(tcd[<wbr>5+2*x]) for x in
range((len(tcd)-4)/2)])</span></p>

<p class="MsoNormal"><span lang="EN-US"><span>   
</span>elif tcd[0] == 19 :</span></p>

<p class="MsoNormal"><span lang="EN-US"><span>       
</span>return [dummy_data(tcd[1+x]) for x in range(len(tcd)-2)]</span></p>

<p class="MsoNormal"><span lang="EN-US"><span>   
</span>elif tcd[0] == 18 :</span></p>

<p class="MsoNormal"><span lang="EN-US"><span>       
</span>return ""</span></p>

<p class="MsoNormal"><span lang="EN-US"><span>   
</span>elif tcd[0] == 21 :</span></p>

<p class="MsoNormal"><span lang="EN-US"><span>       
</span>return dummy_data(tcd[3])</span></p>

<p class="MsoNormal"><span lang="EN-US"><span>   
</span>else :</span></p>

<p class="MsoNormal"><span lang="EN-US"><span>       
</span>return None</span></p>

<br></div></div></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">2016年12月26日 17:47 Ando Noriaki <span dir="ltr"><<a href="mailto:n-ando@aist.go.jp" target="_blank">n-ando@aist.go.jp</a>></span>:<div><div class="gmail-h5"><br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr">梅谷先生<div><br></div><div>安藤です</div><div><br></div><div>1.1.2のBuilderで自動生成されるPythonの以下<wbr>のコードですが、</div><div>基本的には、Builderで生成直後のRTCを実行時にエラー<wbr>を出さないためだけ</div><div>のコードとお考え下さい。</div><span><div><br></div><div><div><span class="gmail-m_-4355634901110278155m_5962128441930672150gmail-Apple-tab-span" style="white-space:pre-wrap">         </span>outdata_arg = [None] * ((len(RTC._d_TimedLong) - 4) / 2)</div><div><span class="gmail-m_-4355634901110278155m_5962128441930672150gmail-Apple-tab-span" style="white-space:pre-wrap">         </span>self._d_outdata = RTC.TimedLong(*outdata_arg)</div></div><div><br></div></span><div>ですので、</div><div><br></div><div><div><div><span class="gmail-m_-4355634901110278155m_5962128441930672150gmail-Apple-tab-span" style="white-space:pre-wrap">             # </span>outdata_arg = [None] * ((len(RTC._d_TimedLong) - 4) / 2)</div><div><span class="gmail-m_-4355634901110278155m_5962128441930672150gmail-Apple-tab-span" style="white-space:pre-wrap">               </span>self._d_outdata = RTC.TimedLong(RTC.TIme(0,0), 0)</div></div></div><div><br></div><div>のように修正してお使いください。</div><div><br></div><div>なぜこのようになっているかといいますと、TimedLong くらいの簡単な構造体</div><div>であれば、RTC.TimedLong(RTC.TIme(0,<wbr>0), 0) のような単純な初期化でいいのですが、</div><div>CameraIMage等では</div><div><br></div><div>self._d_camera = RTC.CameraImage(RTC.Time(0,0), 640, 480, 24, "bitmap", 1.0, [])<br></div><div><br></div><div>TimedPose2Dなどでは、</div><div><br></div><div>self._d_currentPose = RTC.TimedPose2D(RTC.Time(0,0),<wbr>RTC.Pose2D(RTC.Point2D(0,0), 0))<br></div><div><br></div><div>のように、型ごとに特有の初期化をする必要があります。</div><div><br></div><div>これをBuilderで画一的に回避するために、データポートの<wbr>データ型の第1階層をすべてNone</div><div>で初期化しているのが、1.1.2のBuilderが生成するコ<wbr>ードです。</div><div><br></div><div>setTimestamp() 関数では、データポートのデータ型の tm フィールドが RTC.Time型で</div><div>あることを前提として、 tm.sec, tm.nsec に時間を代入しようとしますが、</div><div>上記の自動的な初期化では None が代入されており、RTC.Timeオブジェクトとして</div><div>情報が入っておりませんので、sec, nsec のフィールドが無く、代入時にエラーとなります。</div><div><br></div><div>次のバージョンでは初期化コード部分に分かりやすいようにコメン<wbr>トを入れたいと思います。</div><div>分かりにくい変更、また説明不足で申し訳ございません。</div><div><br></div><div>以上、よろしくお願いいたします。</div><div><br></div><div><br></div><div><br></div><div><br></div><div class="gmail_extra"><div class="gmail_quote">2016年12月23日 16:20 Tomohiro UMETANI <span dir="ltr"><<a href="mailto:umetani@konan-u.ac.jp" target="_blank">umetani@konan-u.ac.jp</a>></span>:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><div class="gmail-m_-4355634901110278155h5">openrtm-users メーリングリストのみなさま<br>
<br>
甲南大学の梅谷です.<br>
先日のRTミドルウェアコンテスト2016では<br>
大変お世話になりました.<br>
<br>
現在,OpenRTM-aist-1.1.2-RELEASE (Python)の,<br>
Ver. 1.1.2 Windows用インストーラ (32bit版)をインストールし,<br>
使用しております.<br>
インストール元は以下のところのものです.<br>
<a href="http://www.openrtm.org/openrtm/ja/node/6034" rel="noreferrer" target="_blank">http://www.openrtm.org/openrtm<wbr>/ja/node/6034</a><br>
<br>
OpenRTM-aist-1.1.2 付属のOpenRTP でのRTC Builder で<br>
データポートがあるPythonのコンポーネントのコードを出力<wbr>したのですが,<br>
自動出力されるデータポートのコードがver. 1.1.2 では,<br>
以下のように変更されていました.<br>
<br>
ここから<br>
=====<br>
        outdata_arg = [None] * ((len(RTC._d_TimedLong) - 4) / 2)<br>
        self._d_outdata = RTC.TimedLong(*outdata_arg)<br>
        """<br>
        """<br>
        self._data_outOut = OpenRTM_aist.OutPort("data_out<wbr>", self._d_outdata)<br>
=====<br>
ここまで<br>
<br>
自動出力される変数の名前が変わっているのは良いのですが,<br>
特に上2行に関しては,ver. 1.1.0 では,TimedLong型の場合<br>
=====<br>
        self._d_outdata = RTC.TimedLong(RTC.Time(0,0),0)<br>
=====<br>
<br>
のように出力されていたと認識しています.TimedLongS<wbr>eq型の場合は<br>
        RTC.TimedLongSeq(RTC.Time(0,0)<wbr>,[])<br>
でした.<br>
<br>
このためかどうかわかりませんが,<br>
1.1.0時代のコードを手掛かりに,データポートから値を出力<wbr>させるプログラムを<br>
1.1.2で出力されたコードに1.1.0と同じ方法で,<br>
タイムスタンプを付けるコードをそのまま書くと,<br>
Execute時にエラーが出てしまいます.<br>
<br>
実行時のrtc ログの抜粋(一部)を以下に示します<br>
====<br>
2016-12-23 15:16:26,710 SdoServiceAdmin WARNING No available SDO service in the factory: IDL:OpenRTM/ComponentObserver:<wbr>1.0<br>
2016-12-23 15:16:26,710 SdoServiceAdmin ERROR type 90c1ad6d-06bc-4969-b10e-306291<wbr>cf0653 already exists.<br>
2016-12-23 15:16:28,378 rtobject ERROR Traceback (most recent call last):<br>
  File "C:\Python27\lib\site-packages<wbr>\OpenRTM_aist\RTObject.py", line 1560, in on_execute<br>
    ret = self.onExecute(ec_id)<br>
  File "C:\Users\umetani\workspace\Da<wbr>taPortSample\DataPortSample.py<wbr>", line 187, in onExecute<br>
    OpenRTM_aist.setTimestamp(self<wbr>._d_outdata)<br>
  File "C:\Python27\lib\site-packages<wbr>\OpenRTM_aist\OutPort.py", line 51, in setTimestamp<br>
    data.tm.sec  = tm.sec<br>
AttributeError: 'NoneType' object has no attribute 'sec'<br>
<br>
2016-12-23 15:16:32,388 ec_worker ERROR State of the RTC is not ACTIVE_STATE.<br>
2016-12-23 15:16:32,411 ec_worker WARNING ExecutionContext is already stopped.<br>
2016-12-23 15:16:32,411 ec_base ERROR Invoking on_shutdown() for each RTC failed.<br>
====<br>
<br>
添付ファイルには,数が多く紛らわしくて申し訳ありませんが,<br>
以下のものを添付いたします.<br>
=====<br>
1. 確認したRTコンポーネントのXMLファイル RTC.xml<br>
2. 実行時のログ  rtc1164.log<br>
3. RTC Builder で自動出力したコード DataPortSample_output.py<br>
4. エラーが出ることを確認したコード <a href="http://DataPortSample_1.1.2.py" rel="noreferrer" target="_blank">DataPortSample_1.1.2.py</a><br>
5. データポートの宣言を1.1.0の方法に修正したもの <a href="http://DataPortSample_1.1.0.py" rel="noreferrer" target="_blank">DataPortSample_1.1.0.py</a><br>
  (これは正しく動作します)<br>
=====<br>
<br>
RTミドルウェアコンテストでのコンポーネント改良時,<br>
1.1.2で自動生成したテンプレートをもとに<br>
コンポーネントを作成しているときに,このエラーに遭遇しました<wbr>.<br>
<br>
不勉強で申し訳ありませんが,<br>
データポートの宣言部分(自動生成される部分です)を修正せずに<wbr>,<br>
現行の1.1.2 のバージョンで,正しくタイムスタンプを付けることができる<br>
コードの書き方をご教示いただけないでしょうか.<br>
よろしくお願い申し上げます.<br>
<br>
この場合「サンプルのコードを読むように」と良くいわれるのです<wbr>が,<br>
インストール時に入っている examples のコードは<br>
<br>
        RTC.TimedLong(RTC.Time(0,0),0)<br>
<br>
で宣言されており,現行のバージョンで自動出力されたコードの<br>
書き方とは異なっております.そのため,困ってしまいました.<br>
最終的には,RTミドルウェアコンテストの他の参加者の方が<br>
アップロードされていたコードを参考に,<br>
1.1.0でのデータポート宣言方法にコードを修正して,<br>
実行できるようになった次第です.<br>
<br>
#バグを生む原因になりますので,<br>
#自動生成されるコードを修正することは避けたいです.<br>
<br>
なにとぞよろしくお願い申し上げます.<br>
<span class="gmail-m_-4355634901110278155m_5962128441930672150HOEnZb"><font color="#888888"><br>
--<br>
Tomohiro UMETANI<br>
E-mail: <a href="mailto:umetani@konan-u.ac.jp" target="_blank">umetani@konan-u.ac.jp</a><br>
</font></span><br></div></div>______________________________<wbr>_________________<br>
openrtm-users mailing list<br>
<a href="mailto:openrtm-users@openrtm.org" target="_blank">openrtm-users@openrtm.org</a><br>
<a href="http://www.openrtm.org/mailman/listinfo/openrtm-users" rel="noreferrer" target="_blank">http://www.openrtm.org/mailman<wbr>/listinfo/openrtm-users</a><br>
<br></blockquote></div><br></div></div>
<br>______________________________<wbr>_________________<br>
openrtm-users mailing list<br>
<a href="mailto:openrtm-users@openrtm.org" target="_blank">openrtm-users@openrtm.org</a><br>
<a href="http://www.openrtm.org/mailman/listinfo/openrtm-users" rel="noreferrer" target="_blank">http://www.openrtm.org/mailman<wbr>/listinfo/openrtm-users</a><br>
<br></blockquote></div></div></div><span class="gmail-HOEnZb"><font color="#888888"><br><br clear="all"><br>-- <br><div class="gmail-m_-4355634901110278155gmail_signature"><div dir="ltr"><div><div dir="ltr"><div> Takashi Suehiro, Professor, Intelligent Systems Lab.,<br>Department of Informatics,<br>Graduate School of Informatics and Engineering,<br>the University of Electro-Communications<br>Tel: <a href="tel:%2B81-424-43-5655" value="+81424435655" target="_blank">+81-424-43-5655</a> Fax: <a href="tel:%2B81-424-43-5682" value="+81424435682" target="_blank">+81-424-43-5682</a><br>
E-mail: <a href="mailto:suehiro@is.uec.ac.jp" target="_blank">suehiro@is.uec.ac.jp</a><br>
1-5-1 Chofugaoka, Chofu, Tokyo 1828585, Japan<br>
<br><span>from suehiro.t@gmail<br>返信は、<a href="mailto:suehiro@is.uec.ac.jp" target="_blank">suehiro@is.uec.ac.jp</a>にお願いしま<wbr>す。<br>2016.4.1から所属が変わりました.<br></span></div></div></div></div></div>
</font></span></div>
</blockquote></div><br><br clear="all"><br>-- <br><div class="gmail_signature"><div dir="ltr"><div><div dir="ltr"><div> Takashi Suehiro, Professor, Intelligent Systems Lab.,<br>Department of Informatics,<br>Graduate School of Informatics and Engineering,<br>the University of Electro-Communications<br>Tel: <a href="tel:%2B81-424-43-5655" value="+81424435655" target="_blank">+81-424-43-5655</a> Fax: <a href="tel:%2B81-424-43-5682" value="+81424435682" target="_blank">+81-424-43-5682</a><br>
E-mail: <a href="mailto:suehiro@is.uec.ac.jp" target="_blank">suehiro@is.uec.ac.jp</a><br>
1-5-1 Chofugaoka, Chofu, Tokyo 1828585, Japan<br>
<br><span>from suehiro.t@gmail<br>返信は、<a href="mailto:suehiro@is.uec.ac.jp" target="_blank">suehiro@is.uec.ac.jp</a>にお願いします。<br>2016.4.1から所属が変わりました.<br></span></div></div></div></div></div>
</div></div></div>