忍者ブログ
ロボット、千葉ロッテマリーンズについていいかげんなことを書きます。
[30]  [31]  [32]  [33]  [34]  [35]  [36]  [37
×

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

OpenRTM-aist検定なるものがあるらしいですが,正解以外の選択肢を一度も聞いたことがないような気がするのは一体・・・・

マニアックすぎるだろ.




それはさておき,今回は実行コンテキストを作成します.

サンプルはここから.



サンプルの使用方法を説明します.

まず,解凍したフォルダのrtc.confとReleaseかDebugフォルダのTestExecutionContext.dllをRTCの実行ディレクトリにコピーします.

この時に選ぶRTCは何でもかまいません.

ただし,ReleaseでビルドしたRTCはReleaseフォルダ,DebugでビルドしたRTCはDebugフォルダのDLLを使ってください.


ちなみに,rtc.confの中身では,


exec_cxt.periodic.type: TestExecutionContext
manager.modules.load_path: ./
manager.modules.abs_path_allowed: no
manager.modules.preload: TestExecutionContext.dll


のようにコンテキストのタイプの設定とTestExecutionContext.dllのロードをするようにしています.



プログラムのソースを見てみます.




int TestExecutionContext::svc(void)
{
     
      static int i = 0;
     
      do{
            i++;
            std::cout << i << std::endl;
            std::for_each(m_comps.begin(), m_comps.end(), invoke_worker());
      }
     
      while (m_running);

   
    return 0;
}




今回のサンプルでは実行した回数を表示します.

あとはコンストラクタ,デストラクタしかないです.




あと,TestExecutionContextInitという関数を記述してます.

managerがTestExecutionContext.dllを読み込むと~Initという関数を探すようです.

~の部分はDLLの名前でしょうか?

ログを見た感じそうだと思ったんですが,よくわかりません.

あと,~Init関数の先頭にDLL_EXPORTを記述してください.


今回作成したサンプルは単純ですが,ExtTrigExecutionContextやArtExecutionContextもこれとほとんど同じであることがソースを読めばわかると思います.




次回は今回作成したサンプルをいぢくっていきたいと思います.


もしかしたら,RTMコンテストは実行コンテキスト出すかも.

アイデアがあればですけど.








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

人気ブログランキングへ
PR
Yahoo!コミックでバキSAGAが50ページ立ち読みできるみたいですよ.

・・・うん,これはある意味18禁ですね.






いつもの記事の本筋とは一切関係ない前置きはおいといて,今回はTimedWString型を使ってみます.

これも使ってるRTCを見たことないんだよな.


今回のサンプルはここからダウンロードできます.

今回作ったサンプルはTestWStringOutコンポーネントとTestWStringコンポーネントです.


まずTestWStringOutですが,1つのアウトポート(TimedWString型)を持っており,適当な文字列を出力します.

TestWStringは1つのインポート(TimedWString型)と4つのアウトポート(TimedString型)を持っています.


前回のサンプルと同じく,インポートから入力された文字列を名詞,動詞,形容詞,形容動詞に分けます.

そして,名詞なら名詞のなかからランダムで選択した名詞をアウトポートからTimedString型で出力します.

他も同じです.

・・・まあ,サンプルなので役に立つかどうかは考えてません.

なぜTimedString型かというと,OpenHRIの音声合成コンポーネントと接続するためです.

OpenHRIを解説してるサイトもあるようです.



以下のように接続できます.

Wstring.PNG





TestWStringコンポーネントのアウトポートを繋ぎかえることで名詞か動詞か形容詞か形容動詞を発声させるかを決めれます.



今回作成したRTCのコードを見ていきます.


TestWStringOutコンポーネントのonExecute関数は以下のようになってます.


m_out.data = L"(省略)"  //データを書き込む
m_outOut.write();  //出力
return RTC::RTC_OK;


かなり簡単になりましたね.


続いてTestWStringコンポーネントのonExecute関数です.


setlocale( LC_ALL, "Japanese" );
   
if (m_inIn.isNew())
{
        m_inIn.read(); //データ読み込み
        std::wstring text = m_in.data; //データを取り出す
        std::wstring noun;
        std::wstring verb;
        std::wstring adjective;
        std::wstring na_adjective;

        getnoun(text,text.length(),&noun,&verb,&adjective,&na_adjective); //名詞,動詞,形容詞,形容動詞に分けてランダムで選択したものをそれぞれnoun,verb,adjective,na_adjectiveに格納
        std::wcout << text << std::endl; //入力データの表示

        BYTE* nounUtf8; //8ビットに変換した名詞の文字列
        UTF16utf8((BYTE*)noun.c_str(), &nounUtf8); //16ビットから8ビットに変換
        m_noun.data = (char*)nounUtf8; //データを書き込む
        m_nounOut.write(); //出力




以下略


となってます.

WStringを表示するときはstd::coutではなく,std::wcoutを使います.

OpenHRIはUTF-8でしか受け付けてくれないので,UTF-16から変換します.

コンフィグレーション・パラメータとかでUTF-8かShift-JISか選べたら便利だと思ったり思わなかったりですね.





今日はこのぐらいにしときます.

次回何やるかは未定です.

ExtendedDataTypes.idlとかInterfaceDataTypes.idl見ても,面白いデータ型はあるけど「これ絶対使わないだろ」ってのは見た感じないしなぁ.

コネクタの設定をいぢくってみるか,それともソースをいぢくってみるか,はたまたOpenRTM.NETに手を伸ばすか考え中です.








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

人気ブログランキングへ
グリーンピースは食べ物じゃないと思うんだ・・・・



それはさておき,今回はTimedWChar型を使ってみたいと思います.

この型を使ってるRTCを僕は見たことないんですけど,探したらあるんでしょうかね?



まず,C++のプログラミングでワイド文字は,

wchar_t ch[] = L"あいうえおabcd";

といった感じで使えます.

ワイド文字は1文字表現するのに2バイト使うので,全角文字も扱えるのが利点ですかね.

文字数を取り出すのも容易で,


wcslen(ch);


とするだけですし,ch[2]のように配列の番号を指定するだけで全角でも半角でも文字を取り出せます.



今回はTimedWChar型の可変長配列TimedWCharSeq型を使って,簡単な言語処理をするRTCを作成します.


サンプルはここからダウンロード出来ます.


今回作成したRTCはWcharTestOutとWcharTestInです.

WcharTestOutは1つのアウトポート(TimedWCharSeq)を持っており,適当な文字列を出力します.

WcharTestInは1つのインポート(TimedWCharSeq)を持っており,受け取った文字列を名詞,形容詞,動詞,形容動詞に分けて表示します.


はじめてのAIプログラミング―C言語で作る人工知能と人工無能(小高知宏著)では,簡単な方法として


名詞 → 漢字の並び
形容詞 → 漢字の並び + 「い」
動詞 → 漢字の並び + 「う」
形容動詞 → 漢字の並び + 「だ」


として取り出しています.


WcharTestOutのデータ出力をする部分は,


size_t len = wcslen(text); //文字数取得
m_out.data.length(len); //文字数文の長さを指定
for(int i=0;i < len;i++)
{
        m_out.data[i] = text[i]; //データを書き込む
}
m_outOut.write(); //出力


となっており,他のデータ型と同じです.


WcharTestInの入力データを処理する部分は,


RTC::ReturnCode_t WcharTestIn::onExecute(RTC::UniqueId ec_id)
{
    setlocale( LC_ALL, "Japanese" );
   
    if (m_inIn.isNew()) //データの入力があった場合
    {
        m_inIn.read(); //データ読み込み
        wchar_t *text = new wchar_t[m_in.data.length()];
        for(int i=0;i < m_in.data.length();i++)
        {
            text[i] = m_in.data[i]; //データを取り出す
        }
        getnoun(text,m_in.data.length()); //文字列textを読み込んで名詞,形容詞,動詞,形容動詞に分けて表示する関数
        printf("%S\n",text); //受信した文字列の表示
        delete text;
    }
  return RTC::RTC_OK;
}



となっています.

UTF-16についてはこのサイトに一覧表があるみたいです.






今日はここまでにしときます.

次回はTimedWString型で遊んでみます.











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

人気ブログランキングへ
俺,ブログ更新したら卒論発表のスライド作るんだ・・・・

と,死亡フラグに見せかけた現実逃避をしている今日この頃です.

昨日と今日で4回も更新したのはそのせいですからね.




それはさておき,今回はrtshellを使ってみます.

・・・とは言っても,OpenRTM-aistの公式HPにマニュアルがあるので,今回は僕の勉強です.

正直,youtubeのrtshellの解説動画を見た方が良いかも.
動画のパクリに近いし.



実はrtshellは一度も使ったことがないのですが,先日Ver.3.0.0が公開されたらしいので,ちょっと触ってみようかと思っただけですからね.


インストールされてない場合は,Python2.6,OpenRTM-aist-Python-1.0.0,rtctree,rtsprofile,rtcshellをインストールしてください.


あと,僕は環境変数のPathにC:\Python26とC:\Python26\Scriptsを設定したら動作しましたけど,実際どうやるのが正しいかは知りません.





それでは,rtshellを使ってみます.

その前にSeqOutCompとSeqInCompを起ち上げておきます.


そして,コマンドプロンプトから,


rtcwd localhost


と入力します.


ここで,


rtact SequenceInComponent0.rtc
rtact SequenceOutComponent0.rtc


と入力しただけでアクティブになりました.

簡単ですね.


ポートの接続も,


rtcon SequenceInComponent0.rtc:Short SequenceOutComponent0.rtc:Short


と入力するだけ.

切るのはrtdisでできるようです.


あと,


rtinject SequenceInComponent0.rtc:Short -c 'RTC::TimedShort({time},1)' -n 1


とかするだけでインポートにデータを入力できるみたいです.

RTSEにデータ入力のRTCが出てくるはずです.

後ろの -n 1 とかいうのは入力する回数みたいですかね,多分.


アウトポートのデータの表示は,


rtprint SequenceOutComponent0.rtc:Short -n 1


とするだけみたいですね.

これも,読み取りのRTCが生成されるみたいです.

これは普通に便利そうですね.

思ったよりrtshellは使い勝手が良さそうです.






今回はこのぐらいにしときます.

次回はRTCBuilderのリポジトリビューに触れておくか,それともあまり使わなそうなデータ型で遊んでみるか,はたまたコネクタの設定をいぢくってみるか迷ってる所です.











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

人気ブログランキングへ
今日3回目の更新ですが,日付は16日なので勘弁してください.

そろそろ,管理人急病※とかでサボろうかと思ってる所です.

※下痢気味とか風邪気味とかです.






それはさておき,今回はrtctreeをいぢくってみます.

OpenRTM-aistの公式HPの説明を読みながら手探りでやってみます.

・・・なんか,OpenRTM-aistの公式HPの表示がおかしいような気がしますけど,僕だけですかね?




今回は簡単なのでソースは配布しません.


まず,インストールしてない場合はPython2.6とOpenRTM-aist-Python-1.0.0とrtctreeをインストールしてください.


インストールが完了したら,Pythonのコマンドライン上で打ち込むか,またはソースファイルを作成して,


import rtctree.tree


と記述してください.


今回はOpenRTM-aist-Python-1.0.0のサンプルSeqIOを使うので,SeqIn.pyとSeqOut.pyを起ち上げておいてください.


そして,


tree = rtctree.tree.RTCTree(servers='localhost:2809')


としてRTCツリーを作成してください.

ここで,


print tree


とすると中身が分かります.


そして,


CompIn = tree.get_node(['/', 'localhost:2809','SequenceOutComponent0.rtc'])
CompOut = tree.get_node(['/', 'localhost:2809','SequenceInComponent0.rtc'])


のようにして,RTCまでのパスを指定してRTCのオブジェクトを取得してください.


ここで,


CompIn.activate_in_ec(0)
CompOut.activate_in_ec(0)


とすると,アクティブになります.

RTCのオブジェクトさえ取得できれば,あとの手順はほぼ同じです.

CompIn.deactivate_in_ec(0)
CompOut.deactivate_in_ec(0)


で非アクティブです.

exitする場合は,


CompIn.exit()


とします.

その他にも,


EC = CompIn.owned_ecs
EC[0].activate_component(CompIn.object)


のように実行コンテキストを取得してアクティブにできるみたいですね.



ポートを接続する場合は,


portIn = CompIn.get_port_by_name('Short')
portOut = CompOut.get_port_by_name('Short')


ポートのオブジェクトを名前で取得して,


portIn.connect(dest=portOut,name='Short_Short')


とすれば接続するようです.

接続を切る場合は


CompIn.disconnect_all()


として,RTC全ての接続を切るか,


Connect = portIn.connections
Connect[0].disconnect()


として,ポートの接続のリストを取得して切る方法があるようです.






本当はもうちょっとやりたいのですが,ネタ切れ防止のためこのぐらいにしといてあげます.

これでとりあえず次回まで余裕ができたので,次回はrtshellをいぢくってみます.








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

人気ブログランキングへ
カレンダー
12 2025/01 02
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 31
フリーエリア
最新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]