忍者ブログ
ロボット、千葉ロッテマリーンズについていいかげんなことを書きます。
[393]  [392]  [391]  [390]  [389]  [388]  [387]  [386]  [385]  [384]  [383
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

なんであんなに早く作品投稿してしまったんだろうか?
ずっと一人なのでそろそろ恥ずかしくなってきたのですが。
もしかしてまだ作品投稿してはいけなかったとか?
いやそれならメールを送ったときに指摘されると思うので違うか。



まだ先の話なのですが、発表当日は賞金の振り込みのために通帳の口座番号を控えておいてください。後でFAXを送る羽目になります。僕も一応準備はして行きます。ビギナー限定賞とかもらえるかもしれないので。






今回も特に書くことがありません。
とりあえずInPortでread関数を使わずにコネクタ取得→Buffer取得からのデータ取得をするプログラムを書いてみたので今回はこれで埋めます。


#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import OpenRTM_aist
import RTC
 
bufftest_spec = ["implementation_id", "BuffTest",
                  "type_name",         "BuffTest",
                  "description",       "Console input component",
                  "version",           "1.0",
                  "vendor",            "sample",
                  "category",          "example",
                  "activity_type",     "DataFlowComponent",
                  "max_instance",      "10",
                  "language",          "Python",
                  "lang_type",         "script",
                  ""]
 
class BuffTest(OpenRTM_aist.DataFlowComponentBase):
    def __init__(self, manager):
        OpenRTM_aist.DataFlowComponentBase.__init__(self, manager)
        self._data = RTC.TimedLong(RTC.Time(0,0),0)
        self._inport = OpenRTM_aist.InPort("in", self._data)
       
 
    def onInitialize(self):
        self.registerInPort("in", self._inport)
        return RTC.RTC_OK
 
    def onExecute(self, ec_id):
        sys.stdin.readline()
        print self._inport.connectors()[0].getBuffer().length()
        print self._inport.connectors()[0].getBuffer().get()
        self._inport.connectors()[0].getBuffer().advanceRptr(1)
        
        #self._inport.connectors()[0].getBuffer().put(RTC.TimedLong(RTC.Time(0,0),34))
        
        #value = [0]
        #self._inport.connectors()[0].getBuffer().read(value)
        #print value[0]
        
        return RTC.RTC_OK
 
def MyModuleInit(manager):
    profile = OpenRTM_aist.Properties(defaults_str=bufftest_spec)
    manager.registerFactory(profile,
                            BuffTest,
                            OpenRTM_aist.Delete)
    comp = manager.createComponent("BuffTest")
 
def main():
    mgr = OpenRTM_aist.Manager.init(sys.argv)
    mgr.setModuleInitProc(MyModuleInit)
    mgr.activateManager()
    mgr.runManager()
 
if __name__ == "__main__":
    main()


このRTCはTimedLong型のInPortを持っています。

onExecuteで、
  1. Buffer長の表示(self._inport.connectors()[0].getBuffer().length())
  2. Bufferからデータを読みだして表示(self._inport.connectors()[0].getBuffer().get())
  3. Bufferの読み出し位置のポインタを1進める(self._inport.connectors()[0].getBuffer().advanceRptr(1))
という動作をするようにプログラムを書いています。
関数の詳しい説明はC:\Python2X\Lib\site-packages\OpenRTM_aist\BufferBase.pyに書いてあるのでそちらを参考にしたほうが良いと思います。


まあでもデータは読みだしたいけど位置は進めたくないなんて状況はあまりなさそうなのでマメ知識ぐらいな感じで覚えておくぐらいで良いかもしれません。







にほんブログ村 科学ブログ ロボットへ
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・

人気ブログランキングへ
PR
この記事にコメントする
お名前
タイトル
文字色
メールアドレス
URL
コメント
パスワード   Vodafone絵文字 i-mode絵文字 Ezweb絵文字
カレンダー
10 2024/11 12
S M T W T F S
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
フリーエリア
最新CM
[08/31 ysuga]
[08/31 Nobu]
[08/31 ysuga]
[12/11 Nobu]
[12/11 Kanamura]
最新TB
プロフィール
HN:
Nobu
年齢:
36
性別:
男性
誕生日:
1988/09/22
職業:
あれ
趣味:
妄想、自堕落
バーコード
ブログ内検索
P R
カウンター
忍者ブログ [PR]