東京工業大学・機械科学科講義「ロボット技術」

swallow.jpg

東京工業大学・機械科学科講義「ロボット技術」(2016年4月28日)

東京工業大学・機械科学科講義「ロボット技術」にて、RTミドルウエアおよびロボットミドルウエア全般に関して紹介いたしました。

受講者数

  • 100名

受講された皆さんへ

レポート課題および講義資料(PDF版とSlidesahre版)を掲載いたします。

レポート課題

1. ロボット制御に必要な以下のプログラムを示せ

プログラムの実行のためには、自分のPCのPythonをインストールする以外にも、以下のサイトでブラウザ上で試すこともできます。

a. 2自由度のアームの逆運動学を計算する以下の仕様の関数のPythonプログラムを作成し実行結果を示せ (20点)

 関数: th = invkinem(link, pos)
     th: 2つの関節の角度[deg]
     link: 2つのリンク長[m]
     pos:手先位置[m]
     引数、戻り値はいずれも要素数2の配列とする

ヒント

2dof_arm_program.png
2自由度アームの逆運動学の考え方と、invkinem関数の実装例

解答例
b. ジョイスティックの現在値から移動ロボットの車輪角速度を出力するPythonプログラムを作成し実行結果を示せ (20点)

 関数: vl, vr = joy2vel (k, x, y)
     k: 適当な係数
     x, y: ジョイスティックの現在値
     vl, vr:移動ロボットの左右車輪角速度 [rad/s]

ヒント

ジョイスティックの出力を、差動駆動型移動ロボットの車輪の速度にどのようにマッピングするか考えます。

joystick_to_mobilerobot.png
ジョイスティックから移動ロボットの車輪速度へのマッピング

  • ジョイスティックを前に倒す → まっすぐ前進
  • ジョイスティックを後に倒す → まっすぐ後進
  • ジョイスティックを真横に倒す → その場回転
  • ジョイスティックを斜め前に倒す → 円弧を描いて前進
  • ジョイスティックを斜め後に倒す → 円弧を描いて後進

のように動くような関数を考えます。

joystick_function.png
ジョイスティックの角度の移動ロボットの動作の関数を考える

ここから、ジョイスティックの倒す角度と方向から、左右の車輪の角速度へ変換する関数を考えます。 ジョイスティックの出力には特に単位は無いので、適当な定数k(引数に指定)をかけて調整します。

joy2vel_function.png
ジョイスティック出力から左右の車輪速度への変換プログラム

解答例

2. ミドルウエアを利用したサンプルプログラムを示せ

a. ロボットミドルウエアを一つ選び、データの送信を行う手順・方法を調べ説明せよ。結果として、コメントを付したソースコード(完全である必要はないが、データ送信に必要な最低限の部分を示すこと)を添付せよ。(20点)

OpenRTMを利用する場合は、少なくとも onInitialize関数、onExecute関数を示すこと。

解答例

 RTC::ReturnCode_t ConsoleIn::onInitialize()
 {
   addOutPort("out", m_outOut);
   return RTC::RTC_OK;
 }
 RTC::ReturnCode_t ConsoleIn::onExecute(RTC::UniqueId ec_id)
 {
   std::cout << "Please input number: ";
   std::cin >> m_out.data;
   m_outOut.write();
   return RTC::RTC_OK;
 }

完全なソースコードは http://svn.openrtm.org/OpenRTM-aist/trunk/OpenRTM-aist/examples/SimpleIO/ConsoleIn.cpp 等を参照。

b. 同様に、データの受信を行う手順・方法を調べ説明せよ。結果として、コメントを付したソースコード(完全である必要はないが、データ受信に必要な最低限の部分を示すこと)を添付せよ。(20点)

OpenRTMを利用する場合は、少なくとも onInitialize関数、onExecute関数を示すこと。

解答例

 RTC::ReturnCode_t ConsoleOut::onInitialize()
 {
   addInPort("in", m_inIn);
   return RTC::RTC_OK;
 }
 RTC::ReturnCode_t ConsoleIn::onExecute(RTC::UniqueId ec_id)
 {
  if (m_inIn.isNew())
     {
       m_inIn.read();
       std::cout << "Received: " << m_in.data << std::endl;
       std::cout << "TimeStamp: " << m_in.tm.sec << "[s] ";
       std::cout << m_in.tm.nsec << "[ns]" << std::endl;
      }
   return RTC::RTC_OK;
 }

完全なソースコードは http://svn.openrtm.org/OpenRTM-aist/trunk/OpenRTM-aist/examples/SimpleIO/ConsoleOut.cpp などを参照。

3. 授業の感想またはロボットミドルウエアについての感想を述べよ。(20点)

講義資料

ダウンロード

最新バージョン : 2.0.1-RELESE

統計

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

Choreonoid

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

OpenHRP3

動力学シミュレータ

OpenRTP

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

産総研RTC集

産総研が提供するRTC集

TORK

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

DAQ-Middleware

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