- はじめに
本ドキュメントはMIRS2101のソフトウェア開発報告書である。
- 作成した主なプログラムと評価
- 集客、案内
- 概要
CoeFontを用いて音声を作成。
一定時間置きに、タブレットを取って操作することやどんなロボットなのかなどをユーザーにアナウンスする。
- 評価
この機能によって、使い方や写真のタイミングなどを指示することができた。
しかし、購入したスピーカー(ELECOM MSP08UBK)の音量が小さかったため、デモや社会実装では班員の別のスピーカー(SRS-XB22)を使用した。
- 対象プログラム
attract.py
- ARマーカー追尾
使用したARマーカー
- 概要
pythonのARマーカーライブラリ(OpenCV ArUco)を用いて、ARマーカーとの距離を取得し、本体とARマーカーの距離、角度を一定に保つようにPID制御を用いて実装した。PID制御は、本体の角度方向、本体の前後方向、カメラの上下方向を対象に行った。
- 評価
ARマーカーとの角度が大きすぎる場合、振り向いた反動でカメラがARマーカーを認識が外れて急停止と急発進を繰り返す問題があったため、検出が外れた場合はゆっくり速度を落として停止するように改良した。しかし、検知が外れることは変わらなかったため、カメラを取り付けるカメラモジュールの改良や振り向く速度を落とすなどまだ改良が必要。
- 対象プログラム
tablet_control.py
- 手動調整
- 概要
タブレットとMIRS間で、カメラの画像転送とタブレットからの操作コマンドを同時に通信し、遠隔操作によってカメラの画角を手動で調整する。ロボットの前進、後退、右回転、左回転、カメラの高さの上下、カメラの角度の上下の操作を行うことができる。
- 評価
ボタンを押してからの遅延もほとんどなく動作することができた。
- 対象プログラム
tablet_control.py
- 自動画角調整
- 概要
PINTO model zooの人認識を用いて、人がカメラの画角にすべて収まるように自動で画角調整を行う。本体の角度、前後、カメラの上下角の調整、カメラの上下角が0度になるようにカメラの高さの調整、これらをPID制御を用いて行った。
- 評価
対称との距離、角度や、身長によって、それぞれ適切に調整することができた。
- 対象プログラム
auto_adjust.py
- 写真撮影、共有
- 概要
撮影した写真をGoogleDriveにアップロードし、アップロードしたファイルのURLをタブレットに送信。URLからQRコードを生成し、タブレットに表示することで写真を渡すことができる。
- 評価
一連の流れをスムーズに行うことができた。
- 対象プログラム
share_image.py
- 自動帰還
- 概要
プログラムが起動してから動いた座標を計算し、一定距離毎に座標を記録する。プログラム終了時に現在通ってきた経路から交差した点や行き止まりの点を除いた経路をたどって元の位置に戻ることができる。
- 評価
自動で元の位置、角度に戻ることができた。
- 対象プログラム
auto_return.py
- タブレットのGUI
オレンジの場所にはその時実際に撮影している画像が入る。
- 概要
それぞれの操作をタブレットで行うため、各状態のGUIの画面を作成した。
- 評価
ユーザーに分かりやすいものを作ることができた。また社会実装で、別の言語や子供用に平仮名や、優しい日本語への対応をするというアイデアをもらった。
- 対象プログラム
gui.py
- 人の姿勢推定
- 概要
グーグルのposenetを用いて、まず人がいるかどうかを検出し、もし人がいた場合は関節の座標を取得し、その座標から腕の角度を算出する
- 評価
角度の算出はスムーズにできるが、ハードウェアの関係上0.5fpsしか出なかったことが悔やまれる。
- 対象プログラム
mesurement.py
- 通信プログラム① RaspberryPi - Arduino
- 概要
標準機の試験でシリアル通信で命令したとおりに動かないことがあったこと、また別のデータを送る際の拡張性が欲しかったため、自作した。COBSをもとにして、それにチェックサムとデータミスがあった際の再送処理を加えたものである。この方法によってデータ数が可変になり、拡張性を上げることができた。
- 評価
これによって、Arduinoとの通信のミスは実装後から発表会の間で1回限りに収まった。使うだけなら問題ないが、Arduino側のプログラムの可読性が少し下がってしまった。他人に見せることを考えるともう少し改良が必要だと感じた。
- 対象プログラム
arduino.py
raspi.ino
- 通信プログラム② RaspberryPi(MIRS) - RaspberryPi(Tablet)
- 概要
ソケット通信とPythonのPickleを用いての無線通信を実現した。
ソケット通信のライブラリのみではBytes型データのみの通信しかできない。画像の送信や、遠隔操作用のコマンドの送信など、多くの用途に使う必要があるため、Pickleを用いてほかの型からBytes型へのエンコード、デコードができるようにし、これらをまとめてクラス化し、タブレットとの通信を行った。
- 評価
全体の機能の根幹にかかわる機能の一つのため何度も改良し、使いやすい通信を作ることができた。 また、カメラ画像をリアルタイムに送る程度の速度までにできた。
- 対象プログラム
tablet.py
tablet_raspi.py
simple_socket.py
- RaspberryPi標準プログラムのPython化
- 概要
人認識やソケット通信など、Pythonで実装する機能がほとんどのため標準プログラムをPythonで書き直し、実装した。
- 評価
C言語の標準プログラムと同じ動きを実装することができた。
- 対象プログラム
request.py
raspi_io.py
- 総括
まず、一番メインとなる画角の自動調整を実装できることができたのでよかったと思う。
また、写真撮影ロボットとして使うための一連の流れに必要なすべての機能を、一般の人向けやデモブースで動かすことができるまで完成させることができた。一つ一つの機能の完成度を高めることや細かいデバッグまでの時間は足りなかったが、使用することができる程度まで実装できたのでよかった。
しかし、Wi-Fiの環境によっては途中でタブレットとの接続が切れ、プログラムを強制終了しなければいけなくなることが多々あった。そのため、タブレットとMIRSの通信方法について改善の必要があると感じた。
- プログラムのソースコード
RaspberryPi(本体)用ソースコード
Arduino用ソースコード
RaspberryPi(タブレット)用ソースコード
- リンク
開発完了報告書(全体)
メカニクス開発報告書
エレクトロニクス開発報告書