学部生研修5日目
ロボットアームのプログラミング(続き)
今日も朝早くから来て、前日からの課題であるロボットアームのプログラミングに取り組んでいるものがみられた。
Simulinkを用いたArduinoのプログラミング
このセッションでは、前日時間が足りず取り扱えなかった、SimulinkによるArduinoのプログラミングについて学習した。SimulinkはArduino Support Packageを追加することで、プログラミング(Arduino ROTH: Run on the hardware)およびシミュレーション(External mode simulation)が実行可能である。制御器設計において重宝する機能であり、是非説明しておきたかったため、最終日のタイミングで解説した。
実習で用いた回路はポテンショメータの取得電圧を指令値とするDCモータのフィードバック制御回路である。2つのDCモータの回転軸を連結し、片方はタコメータとして使うことで、タコメータの両端の端子電圧を回転速度に対応付け、フィードバック制御を行う。以下にSimulink上のブロック線図を示す。
最終日は十分に実習時間がとれなかったため、どのグループもモータは回せたものの、タコメータからの電圧が取得できずにフィードバック制御を行うことができなかったグループもあった。しかしながら、Simulink上のシミュレーションを実世界のアプリケーションで動かすためのワークフローは学んでもらえたことと思う。
ロボットアーム選手権
この研修の総まとめとして、3チームの中の最優秀チームを決定する選手権を行った。以下のルールによってポイントを加点し、最も得点の多いチームが優勝である。
得点を与えるルール(6点満点)
1. 初期状態から旋回する(1点) |
2. アームを曲げて、対象物体まで接近する(1点) |
3. 対称物体を把持する(1点) |
4. アームをもとに戻す(1点) |
5. 逆方向に旋回する(1点) |
6. 対象物体を解放し、設置する(1点) |
試験に先駆けて、各チームは制御の細かい修正に取り組んだ。ロボットアームのプログラムはチームによって様々であった。以下に一例を示す。
また、4人で同時にロボットアームの制御を行うチームもいた。見た目は少し笑ってしまうような光景だったが、実は実際的な利点もあると思った。他のチームはシリアル通信で制御コマンドを送ったときに、Arduinoの受信側に遅延時間を入れていたので、複数の軸を応答させようとすると、どうしても遅延が発生してしまう。これに対して多数端末による制御を用いれば、遅延時間を考えずに複数軸を動かせるというメリットがある。また、制御するホストコンピュータを1台にしてしまうと、その端末が駆動するArduinoに信号雑音が乗ったときに、全てのサーボが影響を受けてしまう問題もある。彼らは複数の端末から操作することでノイズによる影響を分散させ、せっかく掴んだ物体を離してしまうとか、意図しない急旋回をもたらしてしまう可能性を排除するための、冗長化を構成していたともいえるだろう。
選手権の結果を以下に示す。
どのチームも全てのタスクを完了したので総得点は並んだのだが、チームによってはタスクを最初から最後まで連続してこなすのではなく、断片的にタスクを遂行したものもあった。連続してタスクをこなした場合、追加点を与えることになり、最終的に全てのタスクを一気通貫して完遂したチームが優勝となった。
以下の優勝チームの試行動画をみると、タスクを達成したときの学生の歓喜、熱気が伝わってくることと思う(リンク: https://youtu.be/vUtjoPJynyE )