「ICS変換基板」タグアーカイブ

歩行検討2 -シリアルサーボと距離を詰めたい俺7-

すき 0
0

前回からシリアルサーボ (KRS3301)を用いて製作した足ロボットの歩行の検討を始めました。

シリアルサーボで足踏み -シリアルサーボと距離を詰めたい俺4-

 

引き続き検討を行いましたので報告します。

 

 

歩行検討

重心移動と足の移動の連動を実現し、より人間らしい歩行を目指しました。
前回の検討結果が以下です。

以下のように連動動作させてみたのですが、スケートを滑ってるような不自然な動作になってしまいました。

  1. 重心右移動&左足上前に移動&右足まっすぐ
  2. 重心中央に戻す&右足後ろ
  3. 重心左移動&右足上前に移動&左足まっすぐ
  4. 重心中央に戻す&左足後ろ

動作再検討

先の失敗を踏まえて、足の位置をさらに細かく指定して自然な動作を目指します。
ここで足の座標は以下のように定義しました。

各足の付け根を原点として、直立時の足先の座標は(0, 0, 204mm)となります。

以下のように足を動かしてみました。

重心移動時 (Y軸) に足を上げて (Z軸) さらに足を前に出して他方は後ろに出して (X軸) 前進します。

上のように足上げや前後の座標を2点ではなく中間値を設けて自然な歩行を目指します。
また急な加速度がかからないように正弦波形で位置を各タームごとに制御します。

動作

T = 500msecで動作させてみました。

だいぶ自然な歩行になってきたかなと思います。

 

おわりに

シリアルサーボによる足ロボットで歩行動作を楽しんできました。
かなり理解が深まると同時に2足歩行の難しさも痛感いたしました。

これ以上の動作を目指すにはIMUセンサや足裏センサで外乱や加速度の制御が必要になってくるかと思います。
ここではセンサの追加は実施しない予定でおります。

なぜなら私には そう
姿勢制御モジュール SHISEIGYOがついているのですから。

歩行検討1 -シリアルサーボと距離を詰めたい俺6-

0
0

前回は製作した足を逆運動学で制御して各足を任意の座標に動かせるようにしました。

足を逆運動学で制御 -シリアルサーボと距離を詰めたい俺5-

ここからはいよいよ歩行の検討にはいります。

 

 

足踏み運動

歩行の前にまずは以前に順運動学でやった足踏みを逆運動学でやってみます。

シリアルサーボで足踏み -シリアルサーボと距離を詰めたい俺4-

 

重心移動距離と足上げの高さを順次指定しています。

 

より自然な足踏みを実現するべく、重心移動と足上げ下げを同時に実施してみました。

連動動作でかなり自然な動作になりました。
この調子で歩行動作に行きましょう!

 

歩行検討

まずは以下の書籍の歩行サンプルコードを前回導出した逆運動学関数で動かしてみました。

サンプルコード ダウンロード先: https://www.ohmsha.co.jp/book/9784274222115/

 

歩いた!歩いた!

 

サンプルコードでは重心移動と足を前に上げて下げる動作がそれぞれ分離していたので、足踏み同様に連動させてみました。

以下のように連動動作させてみたのですが、なんかスケート滑ってるみたいになっちゃった。。

  1. 重心右移動&左足上前に移動&右足まっすぐ
  2. 重心中央に戻す&右足後ろ
  3. 重心左移動&右足上前に移動&左足まっすぐ
  4. 重心中央に戻す&左足後ろ

前に出した足をそのままの状態で重心を戻し逆足を下げるのが不自然かな??
歩行動作についてはもっと学習が必要のようです。。。

 

おわりに

逆運動学によって足を自由自在に所定の位置に移動できるようになりましたが、
重心をうまいこと移動させつつ人間のように歩行させるのは非常に難しいことが鮮明にわかりました。

普段歩いてるときに足の座標なんか指定してこなかったもんな。。。
日常の歩行の際にも意識をしつつ検討進めていく所存です。

それでは次にまたお会いしましょう。

次の記事

歩行検討2 -シリアルサーボと距離を詰めたい俺7-

足を逆運動学で制御 -シリアルサーボと距離を詰めたい俺5-

0
0

前回はシリアルサーボ (KRS3301)を用いて製作した足で足踏み動作を実現しました。。

シリアルサーボで足踏み -シリアルサーボと距離を詰めたい俺4-

ここでは歩行の実現に向けて、足を逆運動学による座標指定制御を目指しましたので報告いたします。

以前、逆運動学でロボットアームを制御した経験が大変役に立ちました。

逆運動学 で制御 ーロボットアーム自作への道2ー

 

 

足の座標

足の座標は以下のように定義しました。
前方をX軸、右足側をY軸、高さ方向をZ軸とします。

 

足の長さは以下の通りです。

 

逆運動学

足先の座標 (x, y, z)から各サーボの角度を導出します。

Y軸方向

Y軸方向へは足の一番上と一番下のサーボを制御して移動させます(重心移動)。
一番上と一番下のサーボの角度$θ_0$を同一にすることで足底は天板と常に平行を保つことができます。

移動量$y$から角度$θ_0$は以下で導出できます。
ここでは膝曲げによる足長の変化は加味していません。
(おそらくここ近似しても今後の歩行には大きく影響しないはず)

$$θ_0 = \sin^{-1} \left(\frac{y}{L1+L2+L3+L1} \right)$$

X-Z方向

足を上げて(Z軸)、前後(X軸)するためのサーボ角度は以下で導出されます。

サーボの角度$θ_1$は余弦定理を用いて導出します。ちなみにL2 = L3。

${L_3}^2 = {L_2}^2 + {l_d}^2 – 2{L_2}{l_d}\cos{θ_1}’  $

${θ_1}’ = \cos^{-1} \left(\frac{l_d}{2{L_2}} \right)$

$$θ_1 = φ + {θ_1}’  = φ +\cos^{-1} \left(\frac{l_d}{2{L_2}} \right) $$

$$      但し、φ = \tan^{-1} \left(\frac{x}{z – L_1 – L_4} \right)$$

$$       l_d = \sqrt{x^2 + \left(z – L_1 – L_4\right)^2}$$

 

膝のサーボの角度$θ_2$も余弦定理を用いて導出します。

${l_d}^2 = {L_2}^2 + {L_3}^2 – 2{L_2}{L_3}\cos{θ_2}’ = {L_2}^2 + {L_3}^2 – 2{L_2}{L_3}\cos\left({\pi-θ_2}\right) = {L_2}^2 + {L_3}^2 – 2{L_2}{L_3}\cos{θ_2}$

$$θ_2 = \cos^{-1} \left(\frac{{l_d}^2-{L_2}^2 – {L_3}^2}{2{L_2}{L_3}} \right)$$

 

足首のサーボの角度$θ_3$は足を平行にするために

$$θ_3 =θ_2-θ_1$$

 

プログラム

逆運動学によるサーボを制御するプログラムは以下の書籍のサンプルコードを参考にしました。

サンプルコード ダウンロード先: https://www.ohmsha.co.jp/book/9784274222115/

 
サンプルコードを製作した足用に調整して使用しました。
逆運動学の関数ik()は以下のようにしました。

 

動作

逆運動学で各種動作を確認しました。

制御マイコンESP32にスマホアプリBlynkを用いてBLE通信で座標を指定します。

重心移動

Y軸の移動距離を指定 (y: ±50mm)

屈伸

Z軸の移動距離を指定 (z: 0~30mm)

足移動

X軸とZ軸の座標を指定 (x: ±35mm, z: 0~30mm)

 

おわりに

ここでは製作した足を逆運動学で制御してみました。

各足を任意の座標にほぼ動かせるようになったので、次回はいよいよ歩行に挑戦です。

頑張ります!

次の記事

歩行検討1 -シリアルサーボと距離を詰めたい俺6-

シリアルサーボで足踏み -シリアルサーボと距離を詰めたい俺4-

0
0

前回はシリアルサーボ (KRS3301)を用いて足を製作しました。

シリアルサーボで足製作 -シリアルサーボと距離を詰めたい俺3-

 

 
ここでは前回試した重心移動と屈伸を応用して足踏み動作を実現します。

 

 

足踏み動作

 

以下のフローで足踏み動作を実現しました。

  1. 右に重心移動
  2. 左足上下
  3. 左に重心移動
  4. 右足上下

上半身がないので、片足上げるための重心移動距離がかなり大きくちょっと不自然です。
上半身の手の動きが重心コントロールに大きく寄与してることを今回学びました。

 

参考

  • ROBO‐ONEのための二足歩行ロボット製作ガイド

     
  • ROBO-ONEにチャレンジ! 二足歩行ロボット自作ガイド

おわりに

ここで足踏み動作を実現させました。
これまでは各サーボの角度を直接指定して制御してきました。

次は歩行に挑戦したいので足を逆運動学による座標指定制御が必要になると考えております。
勉強進めます。

それではまた。

次の記事

歩行検討1 -シリアルサーボと距離を詰めたい俺6-

シリアルサーボで足製作 -シリアルサーボと距離を詰めたい俺3-

0
0

前回はシリアルサーボ (KRS3301)を用いてロボットアームを製作しました。

シリアルサーボでロボットアーム -シリアルサーボと距離を詰めたい俺2-

 
ここでは いよいよ足の作製に挑戦したいと思います。

 

 

足製作

まずは5個のサーボで片足を構築してみました。

 

公式のサーボアームと3Dプリンタで出力したオリジナル治具で作りました。

 

両足製作に際して足りなくなったサーボアームは以下で購入

 

重心移動

両足が完成しました。

 

構成は以下の通り、両足で10個のシリアルサーボを使用しました。

 

両足の1番上と一番下のサーボを同じ角度で動かすと天板が常に水平に保たれたまま、重心移動が可能です。

上の動画では重心移動を直線的なサーボ角度変化で実施しました。
以下ではサーボの角度を正弦波形で変更しました。

方向転換時の加速度が低減され非常にスムーズに重心移動できています。

 

屈伸

続いて屈伸動作を実現させます。
製作した足はひざ上の大腿部とひざ下の下肢の長さを同じにしていますので、
重心を垂直に上下させる屈伸時の足の曲げの関係は以下の通りになります。

 

上の関係を保持しつつ重心移動と同様に正弦波形で角度を変えて屈伸させてみました。

 

参考

  • ROBO‐ONEのための二足歩行ロボット製作ガイド

     
  • ROBO-ONEにチャレンジ! 二足歩行ロボット自作ガイド

おわりに

ここではシリアルサーボを用いて足を製作しました。

製作後に実際に動かしてみて、反復運動での方向転換時の加速度の影響などを実感として理解することができました。
マイルドな制御が大事でございますね。

ここまで来たら歩かせたいので勉強を進めます。
また次回お会いいたしましょう。

次の記事

歩行検討1 -シリアルサーボと距離を詰めたい俺6-

シリアルサーボでロボットアーム -シリアルサーボと距離を詰めたい俺2-

0
0

憧れのシリアルサーボ (近藤科学 KRS-3301) を入手し、前回はじめて動作させました。

はじめてのシリアルサーボ -シリアルサーボと距離を詰めたい俺1-

ここではシリアルサーボでロボットアームを製作しましたので報告いたします。

 

 

ロボットアーム

前回の連動動作を拡張させてロボットアームとそのコントローラを製作してみました。

 

ロボットアームとコントローラはそれぞれ3軸で構成しました。
サーボのIDは以下の通り

 

コードのメイン部は以下の通り (ArduinoサンプルコードのKrsServoMasterSlaveを参考)、
たったこれだけでロボットアームとコントローラができてしまいました。

 

配線もマルチドロップ接続で非常にスッキリしています。

 

おわりに

シリアルサーボによってロボットアームとコントローラが簡単に作成できました。

これまではPWMサーボと可変抵抗でマスタースレーブ動作を実現しておりました。

 

 

こちらも安価で実現できて良いのですが、コードが若干複雑になり配線も多くなります。

改めてシリアルサーボのご利益を大きく感じました。

更に勉強を進めていきます。
また次回お会いいたしましょう。

次の記事

歩行検討1 -シリアルサーボと距離を詰めたい俺6-

はじめてのシリアルサーボ -シリアルサーボと距離を詰めたい俺1-

0
0

以前から憧れを抱きつつもなかなか手が出せなかったシリアルサーボ。

でべさんから譲っていただき、やっと触れることができました。

 

はじめてのシリアルサーボということで、まだまだ私との距離は大きいです。
少しづつ勉強して記事で紹介したいと思います。

今回は初回です。

 

 

シリアルサーボとは

近藤科学のKRS-3301を14個 譲っていただきました。

シリアルサーボは既定の通信プロトコルでコントローラと送受信して、制御・センシング出来るサーボモータです。
近藤科学のサーボはICSという独自通信規格が採用されています。

サーボ間を数珠つなぎにマルチドロップ接続できるので、サーボを複数使用する際にも配線が用意にできることも嬉しい特徴です。

サーボとコントローラ間にICS変換基板を挿入することで、コントローラとしてArduinoなどのマイコンを簡単に使用することができます。

 

参考

  • ROBO-ONEにチャレンジ! 二足歩行ロボット自作ガイド

 

はじめての動作

公式の記事を参考にM5Stackでサーボを動かしてみました。

ICS変換基板の使用方法(4-2) M5StackでID読み書き

 

 

M5Stackのコードを参考にESP32でも動かしてみました。
M5Stackのコードと同様にUART2を使用しました。

 

参考

 

連動動作

ArduinoサンプルコードのKrsServoMasterSlaveを参考に、一方のサーボで他方を制御してみました。

これができるのはサーボが送受信通信するシリアルサーボならではですよね。

 

この動作昔から憧れていたんです。

 

たったこれだけのコードで実現できるはしっかりとした通信規格の賜物ですね。

 

おわりに

はじめてのシリアルサーボ。

可能性が非常に広がりそうです。
しかしまだまだ私とシリアルサーボとの間には大きな隔たりがあるように感じます。
徐々に距離を詰めるべく勉強進めたいと思います。

それでは次回またお会いしましょう。

次の記事

シリアルサーボでロボットアーム -シリアルサーボと距離を詰めたい俺2-