スタッフブログ

奮闘記【23】ロボットをゲームパッ ...

2018年11月16日 8:59:18 by fdkltd

どうもhataです

今週は、ロボットをゲームパッドの左ジョイスティックで移動、右のジョイスティックのX軸方向の傾きで旋回ができるプログラムの設計と作成を行いました。

今回のロボットはオムニホイールを駆動輪に採用しているので、平面上の任意の方向へ移動が可能です。また、アームが8本あるので、前後方向から90度ずれた位置にある2本のアームでオブジェを獲得後、次のアームでオブジェをとれるようにするために、操作上の前の基準を45度ずつ切り替えることが必要だと考え、それを考慮したプログラムの設計を行いました。

まずは、左スティックでの移動だけについて考えました。ジョイスティックのX、Y軸それぞれの方向の速度成分を極座標系に計算しなおし、左スティックの倒れている方向を角度に変換し、倒れている大きさをスピードとしました。スティックが前に倒れている時を0度とし、ロボットの前方向を決めました。こうすることで、前方向の切り替えが「進行方向の角度+45度×前になるアームの番号」で行うことができます。左スティックでの移動を行うプログラムを実装し、正しく動作することを確認しました。

この後、旋回のプログラムを移動の関数の中に実装しようとしたのですが、正しく動きませんでした。原因としては計算式の間違いであると考えています。来週はこの旋回のプログラムを修正し、前方向切り替えのプログラムの実装をする予定です。

奮闘記【22】 プログラミングの勉強

2018年11月09日 9:11:30 by fdkltd

どうもhataです。

 今週は、八尾ロボコンでゲームパッドを使用するためにゲームパッドの値を取得するサンプルプログラムを改造しました。

 今回はELECOMのJC-U3912TBKというゲームパッドをUSB HostShiled 2.0ライブラリのUSBHIDJoystickというサンプルプログラムを使って動作確認を進めています。以前にこの組み合わせでサンプルプログラムをそのまま動かしたところ、実際の動作と違う状態が表示されることがありました。なので、実際に動かしながらゲームパッドから受信するデータの構造を確認し、それに合わせてプログラムの修正をすると、正しく表示することができました。今週は、その時書き換えたサンプルプログラムを参考にしながら、メインループからゲームパッドの状態を取得することを目指しました。

 メインループからゲームパッドの状態を参照できるように、ゲームパッドの変化を管理するクラスの中で最新の状態を保持するようにしました。こうすることでメインループからゲームパッドの状態を取得して、操作に使えるようになりました。

 なので、確認していなかった「センサの値の距離まで水平に動きオブジェをつかんで真っすぐ持ち上げる」という動作ができるプログラムを書き始めました。その中で、センサが全て異常な動作をしていることが判明したので、次週はこの問題を解決して、プログラムの設計を行います。
 

奮闘記【21】 アーム全体の動作確認

2018年11月01日 13:52:34 by fdkltd

どうもhataです

今週は、アーム全体の動作確認をしました。アームにはグリッパのサーボモータを動かしているPWMサーボドライバと、アームのリンクを動かしているシリアルサーボモータがあるので、まずはグリッパのサーボモータから動作確認を行いました。

グリッパのサーボモータの動作確認をするために、アーム一本のグリッパを順番に「グリッパを閉じる⇒2秒待つ⇒グリッパを開く⇒2秒待つ」という動作をさせました。次に一斉に動かせるかどうかの確認をするために、全てのグリッパが先ほどの確認用の動きをするようにプログラムを書きました。しかし、アームの番号を入力するとサーボモータの番号が分かる計算式を誤ってしまい、最初は正常に動作しませんでした。すぐに間違いに気づいたので計算式の修正を行い、正しく動作することを確認しました。

アームのリンクを動かしているシリアルサーボモータはIDの書きこみが必要だったので、まずはIDの書き込みを行いました。同時に、パラメータの設定、ホームポジションの位置がサーボモータの中立位置に来ているかの確認も行いました。確認終了後、アームが正常に動作できるか確認するために、まずは一本ずつ「2秒かけてホームポジションの位置になる」という動作をさせました。すると、6番目のアームの肘部のサーボモータが動いていなかったので、そのサーボをアームから取り外し、専用のソフトを使ってIDとパラメータの確認をしました。サーボモータに設定されているIDを選択し、パラメータの読み込みを行いましたが読み込むことができなかったので、IDの書き込みを再度行ったところ、パラメータの読み込みができました。IDを違うものに設定していた可能性があると考え、もう一度アームに取り付け、確認動作をさせたところ正常に動きました。その後、すべてのアームが一斉に動作できるかの確認をするために、確認で利用していた動作を全てのアームで行い、正しく動作していることを確認しました。

ロボット本体の動作確認は残り、ゲームパッドの通信確認のみになりました。確認終了後から、本番で利用するプログラムの設計をしていきます。

奮闘記【20】 八尾ロボコンのロボ ...

2018年10月26日 13:52:44 by fdkltd

どうもhataです。

八尾ロボコンで使用するロボットが組みあがったので、今週は電気回路のチェックを行うために、モータドライバと距離センサを動かしました。

まず、モータドライバの動作チェックを行いました。4輪あるので一つずつ動作チェックを行い、2つ不具合があることを確認しました。一つはモータドライバ本体の故障で、もう一つは回路の設計に問題がありました。モータドライバの故障については、新品に交換することで解決できました。回路の設計に問題があるほうは、どこで不具合が起きているか調べるために、マイコン(Arduino MEGA)につながっている全ての部品を取り外して、一つずつ順番に取り付けながら確認をしました。その結果、Arduinoに取り付けているUSBHostShieldで問題が起きているとわかりました。原因はモータドライバを動作させるピンがUSBHostShieldで利用されているため、信号が重なってしまうことでした。なので、モータドライバを動作させることのできる別の接続して解決しました。

次に、距離センサの動作チェックを行いました。まず、センサから100㎜位置に物を置いて距離を測定し、おおよそ近い値が出ていることからきちんと動作しているとわかりました。センサ起動時のアドレスがデフォルトで0x29なので、8個あるセンサから値を取得するために、全てのセンサのアドレスの切り替えも行いました。

次週はシリアルサーボモータとPWMサーボドライバの動作チェックを行う予定です。

奮闘記【19】 ロボットアームの平 ...

2018年10月19日 8:55:34 by fdkltd

どうもhataです

前回までにできなかった計算式が完成したので、ようやくグリッパを目的の位置まで直線的に動かせるようになりました。

肩部のサーボの回転軸の中心から上向き鉛直方向をy軸、その軸からアームのある方向に90°倒した直線をx軸として、アームがホームポジションにある時のセンサの位置を原点として、各部サーボの角度から計算できるグリッパの移動座標を(x,y)とする計算式を作りました。その計算式から逆算して、x,yの値から各部サーボの角度を求める式を作りました。検算のためにExcelの関数を使って任意の位置座標から各部の角度を求められるものを作りました。それを使って角度の求めやすい値を入力して正しく計算で来ている事が分かりました。

次に、マイコンに計算式を実装しました。マイコンの計算式が正しく動作しているかシリアルモニタの計算結果とExcelの計算結果を照らし合わせながら確認作業を行いました。そうすると計算が合わない部分があり、調べてみると変数のサイズが足りていないので計算の途中でオーバーフローを起こし、正しい値になっていないことが分かりました。変数の型が大きいサイズに変更することで解決しました。その後、グリッパ部の座標に値を入力し、目的位置に移動している事を確認しました。

最後にグリッパ部にある距離センサを用いて、ボタンを1回押すごとに値を取得し、その数値分グリッパが直進するというプログラムを制作しました。ロボット本体は先輩がすでに完成させてくれているので、次週は八尾ロボコンで使う本番向けのプログラムの方針の決定と制作を行います。

奮闘記【18】八尾ロボコンに向けて

2018年10月12日 14:57:10 by fdkltd

どうもhataです。

先週、ロボットアームに使っているサーボモータの使い方を勉強して『オブジェを真っすぐ上げる』動作を作成すると書いていましたが、時間がかかっていてまだできていません。なので今週出来たことをまとめます。

まずは、腕部のホームポジション復帰プログラムを書きました。肩・肘に取り付けられているサーボモータは現在角度の取得が行えるので、起動時のサーボモータの角度を取得し、アームがどんな状態であっても約2秒でホームポジションに戻れるようになりました。次にグリッパ部分のサーボモータですが、先週は勉強用に別のサーボモータを利用していたので、本番で使われている物の仕様を調べました。本番用のサーボモータをアームから取り外し、中央位置の確認、左右の動作可能限界の数値を調査しました。その後、ロボットアームのグリッパが閉じた状態のときに、サーボモータが中央位置にくるように取り付けました。

肝心の『オブジェを真っすぐ持ち上げる』動作を作るためには、グリッパを真っすぐに上げる軌道を作る必要があります。腕部のサーボの角度からグリッパの位置を計算する式を立てて、そこから逆にグリッパの位置からサーボの角度を計算する式を立てようとしています。ですが、必要な公式が思い出せずうまくいっていません

数学などの基礎理論が仕事に直結しているのを痛感しました。公式などがすぐに思い出せなくなっているので苦労しています。なので、数学を勉強しなおしてしっかりしたプログラムが書けるように頑張ろうと思ます。

奮闘記【17】 ロボット製作「アー ...

2018年10月05日 16:51:04 by fdkltd

どうもhataです。

今週は八尾ロボコンのロボット作製に向け、アームのグリッパに使用するサーボモータの動かし方と、腕関節に使用するサーボモーターの動かし方を勉強していました。その勉強が終わった後、アーム全体の制御を始めました。

まずは、アームのグリッパに使用するサーボドライバーの勉強から始めました。使用するのは『PCA9685 16チャンネルPWM サーボドライバー』です。PWMをONにするタイミングとOFFにするタイミングを設定してデューティー比を決めるドライバーで、I2Cで通信します。これを使って、サーボモータの中央位置と左右の限界位置を調べようと思ったのですが、仕様をきちんと理解しないまま進めてしまい、誤った認識のままプログラムを書いたので、うまく使うことが出来ず悩みました。仕様書を再確認し、正しい動かし方を理解することで、サーボモータの中央位置と左右回転方向の限界値を調べることができました。

次は、ロボットアームの腕関節に使用するサーボモータの勉強についてです。ロボットに使用するサーボモータは近藤科学の『KRS4033HV』ですが、まずは勉強のために『KRS3301』を使用ました。このサーボモータは、ICS規格という半二重通信で行う近藤科学独自の通信プロトコルが使用されており、マイコンのUARTから通信するためには変換回路が必要でした。今回は、近藤科学純正の変換回路を使用して通信を行いました。勉強に用いた3301は、ファームウェアがICS3.6であり、現在角度取得のコマンドがありますが、ロボットに使用する4033は、ファームウェアがICS3.5のため、そのコマンドがありません。そのため、ICS3.5でも現在角度が取得できるようにプログラムの変更が必要で、そのために仕様書を読み直しました。現在角度の値の取得ができるようになると、フリー状態で止まっている位置から角度制御を開始することができるようになりました。その後、中央位置や左右の限界値、ゆっくり動かす、などを行うことができました。それらができるようになったところで、八尾ロボコンで使う予定のロボットアームのテストを始めました。

まだロボットアームはゆっくり前後に動かす事しかできていません。なので、来週にはオブジェを『まっすぐ穴から引き抜く』という動作をできるようにしたいと思います。
 

奮闘記【16】ロボット製作に向けて

2018年09月28日 9:08:46 by fdkltd

どうもhataです

八尾ロボコンで使用する、モーター・センサー・ドライバーの種類や数がおおよそ決まりました。なので、今週はマイコンボードとどのように接続するのかを決め、それを表やブロック図にまとめていました。

http://www.matec-yao.com/pub/robot/robocon2019/index.html

まず、マイコンボードの接続ピンの接続の決め方ですが、PWMやシリアル通信などの、特殊な機能が必要なものから決め、その後、デジタルIO・アナログIOなどのマイコン側のIOピンの数が多い物の接続場所を決めました。次に、マイコンに挿すユニバーサル基板を都合上2つに分けないといけないので、それを考慮した接続に変更しました。一方は大型モータの駆動用、もう一方はセンサ等に利用できるようにしました。

次に、表にまとめたピンの接続をブロック図で分かりやすく表しました。マイコンボードの何番ピンから、接続先のどのポートにつながっているのかが、一目でわかるよう心がけました。しかし、丁寧に作ろうとし過ぎてしまったために、かなりの時間がかかりました。社内で利用するものなので、時間をかけて丁寧過ぎるものを作成するのではなく、ある程度見やすく、見せる人に伝わるものを作ればよいと先輩方に教えていただきました。

私は何をするにしても、自分の理想の100点に近づいたものを作ろうとする傾向があります。その結果、作成に時間がかかる、方針が間違ったまま作業を進めてしまう等の問題が発生しているので。自分がやっていることの途中経過を見てもらい、方針があっているか等を確認することが大切なのだと思いました。

奮闘記【15】八尾ロボコンに向けて

2018年09月24日 9:17:26 by fdkltd

どうもhataです

先週は八尾ロボコンに向けて

・オブジェ検出センサの使用方法についての勉強

・ロボットの移動に利用するモータードライバの使用方法について勉強

を行っていました。

まず、オブジェ検出センサの使用方法の勉強についてです。
今回『VL53L0X』というI2Cで制御する距離センサを複数利用することを考えているのですが、そのセンサのI2Cのアドレスは起動時にデフォルト値になるので、複数接続する場合には変更処理が必要になります。目標を『2つのセンサを利用して、一方のセンサのアドレスを変更し、それぞれの距離データを得る』ということに設定しました。まずは、一個のセンサの距離データを取得することから始めました。ただ、みせるばやおでの勤務が多かったので、以前にやった方法を忘れてしまい、思い出すのにすごく時間がかかってしまいました。センサ1つでの距離データ取得ができたところで、次はそのセンサのアドレスを変更しました。アドレスの変更後、もう一度距離データを取得し、正常に動作していることを確認しました。それから2つのセンサを利用し、片方のアドレスを変更して、2つのセンサそれぞれから距離データを取得することができました。

次に、モータードライバの使用方法の勉強についてです。
今回使用するモータードライバは『G2 ハイパワーモータードライバー 24v21』というもので、スピードの調整にPWMの入力、回転方向の決定に1ビットの入力が必要な物です。ドライバ1つからモータを動かし始め、2つ目までは正常に動かせていたのですが、4つのドライバを同時に接続する時、ドライバとマイコンボードを接続する際に、ケーブルをボードの出力ピンではなく全てGNDに接続してしまいました。以前にも同じような間違いをしたので、『なぜ動作しないのか』を順序だてて確認する手順を作らなければならないと感じました。最後は4つのドライバを制御し、今までの勉強で利用していたオムニホイールの台車を、思い通りに動かすことができました。

奮闘記【14】アルマ君の修理

2018年09月14日 10:28:29 by fdkltd

どうもhataです

『みせるばやお』のロボット体験コーナーで展示していたアルマ君が壊れてしまいました。戦わせて遊ぶロボットなので特に腕部分に大きな負荷がかかってしまい、サーボホーンというパーツのモータとの連結部(後で先輩に教えてもらったのですがセレーションというそうです)がえぐれていたので交換を行いました。また、今のロボットのモーションは戦いに向いたものでは無かったので、ロボットのモーションの作成を行いました。

サーボホーンの交換は、元々機械を分解したり組み立てたりするのが好きだったので簡単に修理することができました。モーション作成は、パンチや横歩きなどの簡単な動作のものはすぐに作ることができました。しかし、前進・後進・旋回の複雑な重心移動を行うモーションの作成が難しかったです。

重心移動の理屈は理解しているので、モーション作成前は簡単にできるだろうと考えていましたが、重心が足から外れてしまうと転倒してしまいますし、転倒させないないようにと重心を両足に乗せてしまうと、旋回せずにその場で足を動かすだけになってしまいました。『ロボットを思い通りに動かす』ということの難しさがよくわかりました。

今回のことから、ロボットの製作は多くの知識がないと難しく、更に経験を積むことで初めて使える技術になるということが分かりました。それはロボット製作に限ったことではないと思うので、まずは『学ぶ』ということを意識して何事にも取り組むようにします。

1234old >