ロボット、千葉ロッテマリーンズについていいかげんなことを書きます。
×
[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。
最近人は来るのに何故か全くコメントがつかない・・・
もしかして,ブログ記事から僕の暗黒臭が滲み出てるとかでしょうか・・・・
最近割と本気で運が悪いんで.
それはさておき,今回はデータポートのコールバックをやります.
とは言っても,OpenRTM-aistの公式サイトに説明,OpenRTM-aist-1.0.0-RELEASEにサンプルがあるので別にやる意味なかったり.
今回作成したサンプルはここからダウンロード出来ます.
まず,インポートのコールバックはOpenRTM-aistの公式サイトの実装例をヘッダーファイルにコピペして,
std::ofstream ofs("MyOnRead.txt");
m_inIn.setOnRead(new MyOnRead<TimedLong>(ofs));
m_inIn.setOnReadConvert(new MyOnReadConvert<TimedLong>);
といった感じ.
MyOnReadの引数にstd::ofstreamを設定することでファイルに出力をしています.
これで,読み込んだデータが入力されたデータの2乗となるはずです.
公式サイトの説明以上の説明ができないので意味とかは省略します.
アウトポートのコールバックもOpenRTM-aistの公式サイトの実装例をヘッダーファイルにコピペして,
std::ofstream ofs("MyOnWrite.txt");
m_outOut.setOnWrite(new MyOnWrite<TimedLong>(ofs));
m_outOut.setOnWriteConvert(new MyOnWriteConvert<TimedLong>);
だけ.
出力するデータがm_out.dataで設定したデータの2倍となるはずです.
・・・ただ,1つだけ疑問があって
virtual void operator()()
↓
virtual void operator()(const T& value)
ではないかなと.
上でアウトポートのコールバックのプログラム作ってコンパイルが通った人っていますかね?
続いて,コネクタ・バッファのコールバックです.
OpenRTM-aist-1.0.0-RELEASEのサンプルの通りと言ってしまえばそれまでなんですが,
まず,ヘッダーファイルに
class DataListener
: public ConnectorDataListenerT<RTC::TimedLong>
{
public:
DataListener(const char* name) : m_name(name) {}
virtual ~DataListener(){}
virtual void operator()(const ConnectorInfo& info,
const TimedLong& data)
{
std::cout << "Data: " << data.data << std::endl;
};
std::string m_name;
};
と記述して,onInitializeで,
m_inIn.addConnectorDataListener(ON_BUFFER_WRITE, new DataListener("ON_BUFFER_WRITE"));
とするだけでバッファ書き込み時にデータが表示されます.
addConnectorDataListenerの1つめの引数はどの時に呼び出すかであり,他にON_BUFFER_OVERWRITE,ON_SEND等があります.
ちょっと今回は手抜きですが,今回はこれで勘弁してください.
次回は・・・・特に思いつかないなぁ.
今回手抜きなのも正直ネタ切れな気配がするからですからね.
次回はいままでこのカテゴリでやったプログラムをPythonで実装してみようかと思います.
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
もしかして,ブログ記事から僕の暗黒臭が滲み出てるとかでしょうか・・・・
最近割と本気で運が悪いんで.
それはさておき,今回はデータポートのコールバックをやります.
とは言っても,OpenRTM-aistの公式サイトに説明,OpenRTM-aist-1.0.0-RELEASEにサンプルがあるので別にやる意味なかったり.
今回作成したサンプルはここからダウンロード出来ます.
まず,インポートのコールバックはOpenRTM-aistの公式サイトの実装例をヘッダーファイルにコピペして,
std::ofstream ofs("MyOnRead.txt");
m_inIn.setOnRead(new MyOnRead<TimedLong>(ofs));
m_inIn.setOnReadConvert(new MyOnReadConvert<TimedLong>);
といった感じ.
MyOnReadの引数にstd::ofstreamを設定することでファイルに出力をしています.
これで,読み込んだデータが入力されたデータの2乗となるはずです.
公式サイトの説明以上の説明ができないので意味とかは省略します.
アウトポートのコールバックもOpenRTM-aistの公式サイトの実装例をヘッダーファイルにコピペして,
std::ofstream ofs("MyOnWrite.txt");
m_outOut.setOnWrite(new MyOnWrite<TimedLong>(ofs));
m_outOut.setOnWriteConvert(new MyOnWriteConvert<TimedLong>);
だけ.
出力するデータがm_out.dataで設定したデータの2倍となるはずです.
・・・ただ,1つだけ疑問があって
virtual void operator()()
↓
virtual void operator()(const T& value)
ではないかなと.
上でアウトポートのコールバックのプログラム作ってコンパイルが通った人っていますかね?
続いて,コネクタ・バッファのコールバックです.
OpenRTM-aist-1.0.0-RELEASEのサンプルの通りと言ってしまえばそれまでなんですが,
まず,ヘッダーファイルに
class DataListener
: public ConnectorDataListenerT<RTC::TimedLong>
{
public:
DataListener(const char* name) : m_name(name) {}
virtual ~DataListener(){}
virtual void operator()(const ConnectorInfo& info,
const TimedLong& data)
{
std::cout << "Data: " << data.data << std::endl;
};
std::string m_name;
};
と記述して,onInitializeで,
m_inIn.addConnectorDataListener(ON_BUFFER_WRITE, new DataListener("ON_BUFFER_WRITE"));
とするだけでバッファ書き込み時にデータが表示されます.
addConnectorDataListenerの1つめの引数はどの時に呼び出すかであり,他にON_BUFFER_OVERWRITE,ON_SEND等があります.
ちょっと今回は手抜きですが,今回はこれで勘弁してください.
次回は・・・・特に思いつかないなぁ.
今回手抜きなのも正直ネタ切れな気配がするからですからね.
次回はいままでこのカテゴリでやったプログラムをPythonで実装してみようかと思います.
にほんブログ村のロボットのカテゴリから
全然人が来ない・・・
PR
この記事にコメントする