RTミドルウェアを用いたメディアアート制作およびウェブサイトによる支援

RTミドルウェアを用いたメディアアート制作およびウェブサイトによる支援

投稿者: 
shin_2D7

概要

初心者のRTミドルウェアを使用したメディアアート制作を支援するために、具体的な制作事例を公開したウェブサイトを作成しました。

コミュニティ活動

現在はこちらでコミュニティ活動を行なっています。
http://media-rt.weebly.com/

作品概要

  • Magicalight
  • 以下の機能を持ったLEDキャンドルを制作しました。
    • 自然の火のように揺らぐ
    • 息を吹くと点灯/消灯する
    • 複数のMagicalightと連動する

開発環境

  • 言語:C++
  • OpenRTM-aist-1.1.1
  • OS:windows 10(64bit)
  • Visual Studio 2015 Express
  • RaspberryPi Model B

作品紹介

  • デモムービー

発表スライド

ダウンロード

・コンポーネント、マニュアルなどは下のURLからダウンロードできます。
https://github.com/mediart-C/Magicalight

更新履歴

  • 2016.10.29 : プロジェクトページを作成しました。
  • 2016.10.31 : ソースコード、マニュアル、紹介スライド、デモムービーを公開しました。
  • 2016.11.2 : マニュアルを修正版に更新しました。
  • 2016.11.14 : コンポーネント及びマニュアルの修正版をアップロードしました。
  • 2017.01.06 : RTミドルウェアコンテスト2016での発表資料を追加しました。

問合先(メールアドレス): 
mediartcommunity@gmail.com
Project Information
OS: 
Linux
言語: 
C++
OpenRTM ver.: 
1.1
Average: 
4.666665
Average: 4.7 (3 votes)
最終更新日時: 
水, 2017-11-29 11:14

コメント

投稿者: 

作品紹介スライドを見ることができません。

投稿者: 

返信遅れてしまい申し訳ございません。

芝浦工業大学の中沢です。 このたびはご迷惑おかけして申し訳ございません。 また、ご指摘いただきありがとうございます。 スライド修正致しました。

投稿者: 

対応していただいてありがとうございます。 スライドはこちらでも見れるようになりました。

投稿者: 

度々すみません。ソースコード、マニュアルを読んだのですが以下の点が気になりました。

  • GitHubにZIPで圧縮したファイルをアップロードしていますが、これは何故でしょうか?
  • AnalogInputのonExecute関数内にusleep関数で待機する処理があるのですが、これは何の意味があるのでしょうか?
  • LEDStateManageで接続数を変える場合はソースコードを編集するように指示していますが、以下のように動的にデータポートの数を変更できるようにした方が簡単に使えると思います。
     class MyOutPort
     {
     public:
         MyOutPort(std::string name) :m_outOut(name.c_str(), m_data)
         {
         };
         OutPort<RTC::TimedBoolean> m_outOut;
         RTC::TimedBoolean m_data;
     };
     
     
     std::vector<MyOutPort*> out_ports;
     
     
     RTC::ReturnCode_t testPort::onActivated(RTC::UniqueId ec_id)
     {
         unsigned int out_port_size = out_ports.size();
         if (m_portNum >out_port_size)
         {
             for (int i = out_port_size; i < m_portNum; i++)
             {
                 std::string name = "outport";
                 name = name + coil::otos<int>(i);
                 MyOutPort* port = new MyOutPort(name);
                 out_ports.push_back(port);
                 addOutPort(name.c_str(), port->m_outOut);
             }
         }
         else if (m_portNum < out_port_size)
         {
             for (int i = m_portNum; i < out_port_size; i++)
             {
                 MyOutPort* port = out_ports.back();
                 removeOutPort(port->m_outOut);
                 out_ports.pop_back();
                 delete port;
             }
         }

投稿者: 

Miyamoto Nobuhiko様

返信が遅れてしまい申し訳ございません。

コメントありがとうございます。芝浦工業大学の中沢です。 以下にお答えいたします。

・GitHubにZIPでアップロードしていることについて

各ファイルのダウンロードを容易にするために圧縮しております。 また、コンポーネントに関しましては、圧縮されていないものをダウンロードしたとき、不具合が発生してしまったため、圧縮いたしました。

・AnalogInputのonExecute関数内でusleep関数を使用していることについて

本コンポーネントでは、アナログデータを受け取るときのサンプリング感覚を定め、重さを軽減するためにusleep関数を使用いたしました。

・LEDStateManagerについて

ご指摘ありがとうございます。 コメントを参考にプログラムを改善したいと思います。

投稿者: 

返信していただいてありがとうございます。

コンポーネントのソースコードをZIPファイルでアップロードしている事についてですが、そのままソースコードをアップロードした場合にどのような問題が発生したのでしょうか?

onExecute関数内でusleep関数を使用していることについてですが、実行コンテキストの実行周期を設定すれば指定した間隔でデータを取得することはできます。あえてusleep関数を使う理由があれば教えてください。

投稿者: 

返信遅れてしまい大変申し訳ございません。 芝浦工業大学の中沢です。

・発生した問題について

そのままソースコードをアップロードすると、それらをダウンロードしたあとにVisual Studioでビルドが通らなくなるという問題が発生しました。 その問題は各コンポーネントを圧縮し、ダウンロード後さらに解凍することで解決いたしました。

・usleep関数について

お恥ずかしながら実行コンテキストの実行周期を設定するという発想に至りませんでした。usleep関数を使うことに関して拘りはないので、ご指摘のように実行周期を変更させていただきます。丁寧なコメントありがとうございます。

投稿者: 

返信ありがとうございます。

多分、ビルドが通らなかったのはGitHubにアップロードする際に改行コードが変わったせいだと思います。 Git for Windowsを使用している場合はインストール時に設定があったと思うのですが、以下のどれを選択したのでしょうか?

  • Checkout Windows-style, commit Unix-style line endings
  • Checkout as-is, commit Unix-style line endings
  • Checkout as-is, commit as-is
投稿者: 

宮本様

遅れてしまい申し訳ございません。 芝浦工業大学の中沢です。

先ほどGitHubで検証してみたところ、宮本様にご指摘いただいた通り改行コードの問題でした。 なので「Chechout as-is, commit as-is」を選択し、「git config --global core.autocrlf false」でGit for Windowsの設定を変更したところ、正常にアップロードできました。 ご丁寧に教えて頂きありがとうございます。

投稿者: 
産総研の高橋です.更新ありがとうございます.
内容を確認させていただきました.
マニュアル,動作している動画,コンポーネント分割ともにレベルの高い作品と感じました.
非常に細かい点で恐縮ですが,3点コメントさせていただきます.
・全てのコンポーネントにおいて,Deactivate 状態時に何も処理がないのですが,動作を停止する等の処理は不要な動作仕様でしょうか
・ThresholdSwitch で,メンバ変数名が I, j, k などになっていますが,保守性を上げるためにもぜひ意味のある名前付けをして欲しいです
・PWMFluctuationsで,MaxBrightness 以上の輝度を出せてしまっているように見えました.下記のような数式が期待値ではないでしょうか?
【誤】rand()%MaxBrightness+MinBrightness
【正】rand()%(MaxBrightness-MinBrightness+1)+MinBrightness
投稿者: 

返信遅れてしまい大変申し訳ございません。 芝浦工業大学の中沢です。 ご指摘いただいた以下の点についてお答えいたします。

・Deactivate時の処理について

大変申し訳ございませんが、Deactivate時の処理が抜けてるコンポーネントがございました。後日修正版をアップロードさせていただきます。

・ThresholdSwitch内の変数について

かしこまりました。後日修正版をアップロードさせていただきます。

・PWMFluctuations内の数式の件について

ご指摘いただいた通りでございます。現在修正を行っていて、テストが終了し次第アップロードさせていただきます。

この度は多くのご指摘ありがとうございます。至らぬ点が多く非常に申し訳ないです。 すべてのコンポーネントの正常起動が確認でき次第アップロードさせていただきます。

ダウンロード

最新バージョン : 2.0.1-RELESE

統計

Webサイト統計
ユーザ数:2159
プロジェクト統計
RTコンポーネント307
RTミドルウエア35
ツール22
文書・仕様書2

Choreonoid

モーションエディタ/シミュレータ

OpenHRP3

動力学シミュレータ

OpenRTP

統合開発プラットフォーム

産総研RTC集

産総研が提供するRTC集

TORK

東京オープンソースロボティクス協会

DAQ-Middleware

ネットワーク分散環境でデータ収集用ソフトウェアを容易に構築するためのソフトウェア・フレームワーク