スタッフブログ

奮闘記【30】 オブジェ取得失敗の ...

2019年01月18日 10:32:22 by fdkltd

どうもhataです

 前回オブジェの自動取得を行う際に、距離センサの値に誤差があることが原因でグリッパがオブジェ手前で止まってしまい、オブジェを取得出来ない状態であると書いていました。しかし、誤差の大きさがオブジェ一つ分もないことから、別の原因があるのではないかと考えました。

 まず、実際の測定値のログをとり、値を確認したところ、オブジェが無い場合にも測定値がゼロになっていることを見つけました。測定したセンサの生の値でグリッパの移動距離を決めていたので、このような位置ずれが影響していると考え、測定距離の移動平均を使った処理を実装し、これによってセンサのずれの大きさを緩和することができました。

 移動平均を使った判定で動かすと、オブジェの手前で止まることができるようになりましたが、取得動作をオブジェの手前ですることには変化がありませんでした。このことからセンサの問題ではなく、自動取得時のアームの制御に問題があると考えました。改めて確認をしたところ、自動取得でオブジェを探すとき、利用するアームは原点から50㎜前に出した状態で距離の測定を行い、オブジェを見つけたと判定したときの距離だけ原点から動かしているので、必ず50㎜手前で取得動作を行うようになっていました。これを修正し、初めに想定していた判定の閾値を小さくしたうえで、自動取得時のアームの目標位置を測定距離と最初のオフセットの合計で決定するようにしました。

そうすることで、自動取得の動作をオブジェの手前で行う問題は解決しました。次は、グリッパの中心とオブジェの中心をなるべく近づけて自動取得できることを目指します。

 最後に、自動取得のテストの様子を載せておきます。

奮闘記【29】距離センサを利用した ...

2019年01月11日 9:03:06 by fdkltd

どうもhataです

 前回書いた距離センサを利用したオブジェの自動取得を行うために、距離の測定と測定値の距離までアームを伸ばしてオブジェを取得する処理の実装を行いました。

 センサでオブジェを取得できる距離を調べることから始めました。センサを起動した状態でアームをオブジェを抜き取る直前の姿勢にしてグリッパをオブジェに近づけ、そのままアームをホームポジションに戻して距離を測定してその距離を閾値に決めました。

 まず最初は、ゲームパッドのボタンを押すと処理が開始され、自動で前進して指定したアームの距離センサの値が閾値を下回ると停止するようにしました。しかし、ロボットが前進しか行えず、その間ゲームパッドでの移動が出来ない上に、場所によってはオブジェとロボットの距離が近すぎてアームでオブジェが取れないという問題があることが分かりました。そこで、距離を測定しながらゲームパッドで全方位に自由に移動できるようにし、測定した距離がオブジェを取得可能な範囲内に入ったら駆動輪を停止するように変更しました。

 これで、オブジェを取れる位置で停止することができるようになったので、そこから測定した距離までアームを伸ばしてそのままオブジェを自動的に抜きとる処理を実装しました。これをテストしたところ、センサの誤差などの影響でオブジェを抜き取れる手前でグリッパが止まってしまい、抜き取れない問題が起きていることまで確認できました。この問題を解決するために、センサがどのような変化をしているかをグラフに表し、センサの誤差の関係も調べ、一番距離が短くなっているところを目標に取得動作を出来る処理を来週は実装していきます。

Twitterでテスト時の動画をご覧いただけます。

新年のご挨拶

2019年01月07日 14:10:05 by fdkltd

どうもhataです

新年あけましておめでとうございます。本年もよろしくお願いします。

年末は風邪を引いてしまいましたが、無事に始業までに完治しました。本年も頑張っていきますのでよろしくお願いいたします。

今までブログで紹介してきたロボットは、2月16日に開催される
第11回八尾ロボットコンテストに出場します。お時間がある方は是非見に来てください。

来年もよろしくお願いします

2018年12月28日 17:18:30 by fdkltd

2018年最後の営業日となりました。今年はみせるばやおがオープンし、操縦体験ロボットのイベントに力を入れてきました。来年はみせるばやおだけではなく、他のイベント会場などにて操縦体験を行っていく予定です。また、操縦体験で使用しているロボットの組み立てキットの販売も目指していきます。ご期待ください。

来年も藤原電子工業とロボットたちをよろしくお願いします。

奮闘記【28】LCDに情報の表示と ...

2018年12月21日 8:44:37 by fdkltd

どうもhataです

 前回ブログに書いていた、ロボットの必要な情報をLCDへ表示する機能の実装と、ロボットの暴走対策を行いました。

 LCDには、LipoとNi-MHの電圧値・駆動輪モータドライバのエラー・ゲームパッドのボタンと十字キーの状態を表示できるようにしようと考えました。

 最初はそれぞれの情報をスペースも改行も入れずに表示してしまったため、非常に見にくいものになってしまいました。改行とスペースの入れ方を仕様書で確認して実装したのですが、今度は電圧値の桁の変動によって、電圧値の横に表示している単位[V]がずれてしまい、[V]がいくつも表示されてしまいました。[V]の表示位置を固定して、桁の変動の影響を受けなくすることで解決しました。

 LCDへの情報表示機能の実装が完了したので、ロボット全体の動作チェックを行っていたところ、ゲームパッドのレシーバがUSBコネクタから抜けた時に、ロボットが暴走してしまうことが分かりました。そこで、USBコネクタからレシーバが抜けたときは、駆動輪を強制的に止めることにしました。レシーバからの情報を取得するarduinoのライブラリを確認したところ、レシーバの接続状態を示す変数がありました。それを利用してUSBコネクタからレシーバが抜けている時は、駆動輪が強制的に止まる処理を実装し、解決しました。

 最低限競技できるプログラムを実装出来たので、今後は競技の練習をしながら、プログラムにおかしい部分がないか調べていきます。年明けからは、今回のロボットで一番重要な要素「アームにつけたセンサでオブジェを自動的に取得する動作」の実装を目指します。

奮闘記【27】ロボットで競技できる ...

2018年12月14日 9:03:45 by fdkltd

どうもhataです

 前回書いていた、オブジェを取った後に「ホームポジションに戻る動作」が想定通りに動かなかった問題が解決しました。

 ホームポジションに戻らなかった原因を調べたところ、グリッパを目標の位置まで直線的に動かそうとしていたことが原因でした。ホームポジションに戻る途中でアームの可動範囲外の姿勢が計算上入り、可動範囲外に出ないようにするリミット処理が働いた結果、アームが動かなくなっていました。

 ホームポジションへ戻る動作はグリッパの動く軌道を気にしなくてもいいので、アームを動かす処理を関節角度を一定の大きさで変化させるものに変更することで解決できました。問題解決が、半日で出来たので、続いてオブジェをコンテナに入れるための処理も実装し、以前作成したコントローラでロボットを移動させるプログラムと合わせて動作確認をしたところ、オブジェの前まで移動して、オブジェを引き抜き、コンテナまで移動してオブジェを入れるまでの動作が出来ました。

 移動と得点の取得が出来るようになりました。競技を行うときはLi-Poバッテリーを使用するので、安全のために電源の状態を表示する必要があります。なので、来週はLCDに、バッテリーの電圧、モータドライバのエラーと、今後の動作チェックがしやすいようにコントローラの押されているボタンを表示できるようにして、ロボコンの競技が出来る状態にします。その後、実際に競技が行える状態にあるのか試運転を行いたいと考えています。

 
 

奮闘記【26】アームでオブジェを取 ...

2018年12月07日 8:43:33 by fdkltd

どうもhataです

 今週は「アームでオブジェを取得する動作」の実装を行いました。 特に「土台に刺さっているオブジェを真っすぐ抜くための動作」の作成に注意して、実装を行いました。

 まず、以前に考えたアームの逆運動学を解いた式を使って、グリッパをホームポジションに対して任意の位置にあるときの各関節の角度を求められるようにしました。そしてオブジェの取得動作を、

①:グリッパを開いて土台に刺さっているオブジェの根本まで移動
②:グリッパを閉じて②の位置から垂直上方向に150㎜移動
③:ホームポジションへ戻る

と分けました。まっすぐ上向きにグリッパを動かす必要があるのは②の動作で、そのほかは目的の位置までの経路は特に意識しなくてよいと考えました。そこで、最初の位置と最後の位置の各関節の角度を求め、関節の角度を同じ大きさで変化させながら動かしたところ円弧を描いて目的の位置に動いてしまいました。

 これはグリッパの位置ではなく、アームの関節を基準に計算した結果そうなってしまいました。そこで、グリッパの位置を最初から最後の位置までの直線上を少しずつずらした位置の各関節の角度を求め、アームを動かすように修正しました。すると、グリッパはまっすぐ上に動くようになりました。

 次に③の動作の確認をしたところ、ホームポジションに戻る途中で止まってしまうことを確認しました。なので、来週はその問題の解決から始めます。

 

奮闘記【25】アームをホームポジシ ...

2018年11月30日 9:12:20 by fdkltd

どうもhataです

今週はロボットのアーム一本をホームポジションに戻す処理の実装をしました。

最初は全てのアームを一斉にホームポジションに戻す処理を実装していたのですが、アームがホームポジションまで移動しても処理が完了したという判定ができず、初期化処理で止まってしまい、ほかの処理ができない状態でした。なので、アーム一本だけをホームポジションに戻す処理を見直して、考え方が誤っていない事を確認してから、全てのアームを一斉に動かすようにしようと考えました。

アームをホームポジションに戻すには

①:アームのサーボモータそれぞれの現在の角度を取得
②:ホームポジションと現在の角度の差を出す
③:②で出した値を、移動する回数で割る
④:③で出した値を、現在の角度に足して、その位置に移動させる
⑤:一定時間待つ
⑥:④、⑤の処理をホームポジションに戻るまで行う。
⑦:処理完了

という順番で処理します。

アームを一斉にホームポジションに戻す時は、この⑥の処理をアームがホームポジションに戻った後も実行され続けたため、全体の処理が完了となりませんでした。そこで、ひとまずアーム一本だけ動かした場合ではどのように動作をするのかを確認しました。すると、想定通りに動いたので考え方は間違っていないことが分かりました。一斉に動かした時の処理と比べると、処理の終了の判定に問題があり、処理が終了するアームとしないアームができるようになっていました。全てのアームに終了判定が出たときに処理全体が終了するようにしていたので、処理が終了せず正しく動作していないことが分かりました。

また、アーム1本での動作確認の中で、サーボモータとの通信で何度か通信エラーが発生しました。通信エラーが発生しているアームに対して、そのままホームポジションへの復帰処理を続けると危険なので、通信エラー発生時の対応処理を実装しました。通信エラーがあったアームは、ホームポジションに戻さず脱力状態にし、LEDを点灯させる事で通信エラーが分かるようにしました。

最後に、アームを一本ずつ順番にホームポジションに戻す動作確認をしました。一本のアームがホームポジションに戻る、あるいは、通信エラーが発生している場合は処理を中断してLEDを点灯させ、次のアームの処理が始まることを確認し、通信エラーが発生していなければ全てのアームがホームポジションに戻る事を確認しました。

来週は、今回実装したものを元にしたアームを一斉にホームポジションに戻す処理の実装と、アームでオブジェを取得する処理の設計と実装をします。

奮闘記【24】 ロボットの移動と操 ...

2018年11月22日 9:08:58 by fdkltd

どうもhataです。

 今週は、平行移動と旋回を合算した各モータの回転速度と回転方向を計算する処理と、操縦の正面位置の切り替えを行う処理の実装と動作確認を行いました。

 先週実装した平行移動を行う処理に、旋回を行う処理を追加しました。しかし、平行移動と旋回の処理のそれぞれで得たモータの回転方向を正転を0、反転を1として加算してしまい、正しく動作しませんでした。平行移動の処理専用の、モータの回転方向の決定をする処理があり、平行移動の処理も作り直す必要があると考えたので、各モータの回転速度と回転方向を計算する処理全体の設計からやり直しました。

 平行移動に使う左スティックの傾きの値に、旋回に使う右スティックの傾きの値を加算して、結果の値が正であればモータの回転方向は正転、負であれば反転、その値の絶対値を回転速度にするという処理の仕方に変更することで、平行移動と旋回が行えるようになりました。スティックから得られる値は(x,y)それぞれの方向の傾きだったのを、上向きを基準とする極座標系に変換して移動方向と移動速度を計算するように変更しました。それに加えて、0番アームのある方向をロボットの基準とすることで、ロボットの操縦のための正面位置が45度ずつ切り替わっても、スティックの方向とロボットの基準からのズレを足し合わせることで、ロボットの移動方向を決められるようになりました。

 ロボットの移動のためのプログラムの実装と動作確認が終わりました。次週からは、アームでオブジェを取得するためのプログラムの設計と実装を行います。

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

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

どうもhataです

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

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

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

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

12345old >end »