F3RC アサリ戦隊ロギにゃん

こんばんは、クリスマスイブですね。みなさん楽しんでいますかー?

ぼくは残念ながらレポートに追われていて、今日中にブログを書けませんでした。

すみません。

また改めて、F3RCについて書きます。

試合の動画があるので見てください。→ここ

←ロギにゃん(手動機)

広告

MATLABで遊んでみた!!

 

MATLABで遊んでみた!!

 

先日はサークルの飲み会で、悪酔いを披露してしまった3年生です。今日は、2日酔いで頭が痛いです。(でも、まだまだ皆と飲みにいきたいです🍶)

そんなことはさておき、現在、マイクロマウス班に所属しており、マイクロマウスの製作を頑張っています。機体はできたので、今は回路を頑張ってます。(本当に回路分からんから、前代表のO嶺は凄いなと思ってます…)やはり、マイクロマウスが俊敏に動く姿を想像すると、ワクワクするので楽しいです。皆も回路とか制御やりたかったらマイクロマウスに来てね!!

 

去年はネタ系の話にしたので、今年はお酒の嗜み方について書こうかなって思ったんですが、みんな思いのほか(!?)学術的な内容だったので、去年のネタ枠とは違い、サークルに役立つかもしれない情報を書こうと思いました。そんなこんなでMATLABのSimlinkで遊んでみました。

Simlinkとは、MathWorks社によって開発された、モデリング、シミュレーション、解析のための便利なツールです。研究室でもよく使われているので、1年生から知っていたらとても強いです。

というわけで、モータの角度をPID制御しましょう。モータに関する運動方程式は次のようになります。

上の2式を変形し、ブロック線図と呼ばれる入出力関係を示すもので、まとめると以下のようになります。(簡単のために、B=0とし、tiの扱いはめんどくさいから0にします。また、入力、出力をωの指令値、応答値にします。

 

これから、MATLABの使い方を見てみましょう。まあ、keio.jpのソフトウェア・ライセンスからかなぁ、MATLABをインストールしたら起動してみましょう。下のような画面が出ます。

 

 

最初に、Simlinkボタンを押し、Simlinkを起動して、「空のモデル」を選択します。すると以下の画面が出ます。このウィンドウでブロック線図を作成します。(青丸から、ブロック線図の部品的なものを出します)

 

 そのボタンを押すと、下のようなライブラリが出ます。「sources」で入力波形、「Mathoperations」で加算器、「Continuous」で連続時間系のPIDのコントローラや積分器などを選択できます。下の、outって書かれている欄に、gainとか書くとgainに関する部品が得られます。

 

 

このようにして、ブロック線図を作成すると次のようになります。

 

plantはモータに関するシステムで、ブロック線図の書き方を簡略したサブシステムです。展開すると下のようになります。

 

ここまでがモデリングの準備です。これからは、こういう動きをして欲しいなという指令値になるべく近い動きに応答値がなってほしいのでPID制御を行います。P,I,Dって何だという人向けに次のリンクを用意しておきます。

https://www.hellocybernetics.tech/entry/2017/03/18/100530

 

まず、部品を選択し、ダブルクリックすると下のようにパラメータが調整できます。

 

「新規スクリプト」で変数を定義し、Kp=1、Ki=1、Kd=0にしてみます。

 

 

そして、ブロック線図のscopeをダブルクリックして「実行」を押してみると、応答値が全然追いついてくれません(T_T)

 

 

なので、応答がよくなるようにパラメータを調整してみましょう。先程の図の赤丸ボタンを押すと自動的に、ゲインを決めてくれます。とても便利です。(手打ちでやるのは大変なので、ありがたい)そして、「ブロックの更新」で自動的にパラメータの更新ができるように設定します。

 

すると、、、応答値がめっちゃ良くなりました!!

 

まあ、こんな風にして、MATLABを使うと便利なんじゃないかなと思いました。(長文失礼しました。)NHKではカルマンフィルタを実装して位置の誤差を少なくする試みをすると思うので、MATLABを知っとくといいと思います。そして、アドベントカレンダー遅れてごめんなさい笑

 

最後に、僕は3年生なのでこれからサークルになかなかいけなくなりますが、1,2年生がこのサークルを良くしてくれることを祈ってます!!

そして、感謝を述べたいです。楽しいサークル生活でした。本当にありがとう!!

 

 

 

 

 

はじめての4足歩行ロボット

慶應義塾大学ロボット技術研究会その1 Advent Calendar 2018の23日目です。

昨日の記事:競プロ始めました(感想文)

はじめに

こんにちは、3年のしゅんもです。今年もNHKロボコンをやっています。

昨年までは機構オンリーでプログラミングの知識がなく、先輩に迷惑をかけていたので、今年は制御もできるようにしようと思い、11月頃からプログラミングの勉強をしています。

プログラミングの対象は、タイトルの通り「4足歩行ロボット」です。来年のNHKロボコンのルールで4足歩行ロボットが必要なため、サーボモータ式の4足歩行ロボットを制作しました。この記事では、4足歩行を歩かせる簡単なアルゴリズムの紹介までしたいと思います。

目次

  • 歩容とは?
  • 4足歩行ロボットの機構ってどんなの?
  • 逆運動学でサーボの角度を求めよう!
  • 歩行アルゴリズムを考えよう
  • 実際に動かしてみた!

歩容とは?

4足歩行を扱う上で避けて通れないのが「歩容」の分類です。歩容とは、簡単に言えば「足の動かし方」の違いです。

ただ、歩容について調べれば調べるほど新しい名前が出てきて、正直私自身も完全には理解できていないので、なんとなくの紹介だけします。上から下に行くにつれて移動速度が早くなります。

クロール(Crawl)

最も移動速度が遅い歩容です。1足ずつ独立して足を出していくため、常に3本以上の足が地面に接地しており、安定しています。

ウォーク(Walk) [別名 : ペース(Pace) ]

右前と右後ろの足、左前ろ左後ろの足をそれぞれ同時に出して歩く歩容です。足を浮かしているとき、一時的に地面と接地する足が2本になるため、重心のバランスを取る必要があります。

トロット(Trot)

右前と左後ろの足、左前と右後ろの足をそれぞれ同時に出して歩く歩容です。ウォークとの違いは、出す足の組み合わせが対角線になっているという点です。

バウンド(Bound)

左前足、右前足、右後ろ足、左後ろ足の順に足を動かして移動する歩容です。この歩容はあるくというよりも走る状態です。ぎゃリップとの違いは、常に4本の足のうちのいずれかの足が設置している点です。

ギャロップ(Gallop)

足の動きはバウンドと同じですが、バウンドとの違いは、4本すべての足が地面から離れているタイミングがあるという点です。チーターみたいな走り方です。

以上のように多数の歩容が存在していますが、これらをロボットで実現することは容易ではありません。その理由はいくつかあるのですが、個人的に考える主な理由は以下の2点です。

  1. 生物の足の自由度をロボットで実現するのは難しい
  2. 生物の筋肉ほどの瞬発力が得られるアクチュエータがない

1つ目については、サーボモータをたくさん搭載することで一見解決できそうですが、サーボモータの物理的なサイズの関係上、生物の足ほどの自由度をもたせることは容易ではありません。

2つ目については、モーターの回りにバネを付けてバネの反発力を利用したものが研究されていますが、まだ実用化はされていません。また、小型な4足歩行ロボットの例に限れば、ワイヤーで予めバネを縮めておき、その反発力を使用したものなどがありましたが、機体のコントロールが相当難しそうということで採用しませんでした。

それでは、私がどんな機構のロボットを制作したのかご紹介します。

4足歩行ロボットの機構ってどんなの?

図1 足の簡易モデル

図1は、足一つのモデルです。1つの足につきサーボモータが3つあり、3自由度を有しています。

今の目標は、「足先の3次元座標とサーボs0の床からの高さを指定して、サーボの角度を求めること」です。このような計算を「逆運動学(Inverse Kinematics)」と呼びます。この考え方は、ロボットアームを始めとするマニピュレータの制御で使われています。

逆運動学でサーボの角度を求めよう!

足先の3次元座標は、足の付根を原点として(x,y,z)とし、サーボs0の床からの高さをhとします。ここで、サーボs0はロボットの胴体部の高さと同じなので、hは「ロボットの胴体の床からの高さ」でもあります。

それ以外の定数を以下のように定義します。

足の付根から、サーボs0、サーボs1、サーボs2( s0は水平方向に動き、s1とs2は鉛直方向に動くサーボモータです)

r0:ロボットの中心とs0の軸間距離(リンクの長さ)

r1:s0とs1の軸間距離

r2:s1とs2の軸間距離

この足のモデルの断面について考えます。

図2 断面モデル

図2において、hはサーボs0から地面までの距離、zは足先から地面までの距離です。また、θ1、θ2はそれぞれサーボs1、s2の目標角度です。したがって、図に示した文字を使ってθ1をθ2を表すことができれば、

考え方自体は中学数学レベルですので、みなさんも考えてみてください。(少しだけ逆三角関数は使います。)

*

*

*

*

*

*

*

*

*

*

*

*

正解にたどり着きましたか?それでは答えを示します。

図3 断面モデル(補助線あり)

図3のように補助線を引くと、辺AEの長さは

と求められます。すると、⊿FAEにおいて余弦定理から、

となります。同様に、 ⊿FAEにおいて余弦定理から、

となります。以上より、変数hおよびzを指定することにより、θ1およびθ2を一意に定めることができます。ここで、dはどう求めるんだ?と思った方も多いと思います。dは、足先の3次元座標(x,y,z)を用いて表せます。この3次元座標の原点は足の付根としていたので、

と求められます。ただし、r0は足の付根からサーボs0、すなわち図3における点Aまでの距離です。

また、サーボs0の目標角度θ0は、機体を上から見他状態を考えると求められます。

図4 機体を上から見たときの足先の座標

図4中の(x,y)は、足先の2次元座標です。これより、

となります。ここで、4足の足についても考えてみましょう。断面モデルはどの足でも同じですが、θ0は少しだけ変わります。

図5 4足の足の座標のとり方(ロボットを上から見た図)

もし、図4の座標系を90度ずつ回転させて座標を取れば、全ての足のθ0は同様に考えることができます。しかし、次の章で説明する歩行アルゴリズムを考える際、図5のように座標を撮っておいたほうが考えやすいため、私はこうしました。

図5において、ロボットが大の字に足を広げている状態を考えます。すると、右前と左後ろは図4での座標系と全く同じです。しかし、右後ろと左前はθ0の正負が逆になることがわかります。したがって、プログラム中では、右後ろと左前のθ0は符号を反転させます。

長かったですが、これで 「足先の3次元座標とサーボs0の床からの高さを指定して、サーボの角度を求める」 という目標が達成できたので、次に「どのように歩かせるのか」について説明します。

歩行アルゴリズムを考えよう

普通のやり方なのかはわかりませんが、私は足先の座標を指定することで歩行させるようにしました。 このアルゴリズムは、参考サイト[2]に詳しく書かれていたので、参考にさせていただきました。

参考サイト[2]では、予め決められた値が入っていますが、私はパラメータを調整できるようにしたかったので、下記のように変数を置きました。

(x0,y0):足を大の字に広げたときのx,y座標

y1:3足立ちのときのy座標

step_length:一歩で進む距離(以下sl)

step_height:足を上げる高さ(以下sh)

これらの変数を使って歩行のステップを考えると、下記の図6のようになります。

図6 歩行時の足先座標

上の図6では、足先のx,y座標のみを考えていますが、実際に足を動かすときは足を床から離す必要があります。そのため以下の図7のように、足先を三角形や四角形のように動かす必要があります。

図7 z座標を考慮した足先の動かし方

以上より、どのように足先の座標を変えれば歩行するかおわかりいただけたと思います。実際にプログラムを書くときは、表などに、各ステップにおけるそれぞれの足のx,y,z座標をまとめておくと混乱しにくいと思います。

実際に動かしてみた!

実際に上記方法でプログラムを書いて動かしてみると、こうなります。

なんかカックカクしてますよね笑

これは、サーボモータの角度を0.1秒間隔など、細かく指定し、for文で回すことにより改善します。改善したものがこちらです。

なかなか生き物っぽい動きになりました!様々なパラメータに調節して見たんですが、現時点で一番気に入っている歩行はこれです。ペットみたいで可愛いでよね笑

ただ、かなり滑っているので、まだまだ改善の余地はありそうです。NHKロボコンの1次ビデオ審査までちょうど1ヶ月なので、どんどん改善していきます。

最後に

今回のロボットはロボコンのレギュレーションの関係上巨大なため、でかくて高いサーボを使っていますが、自分で試す際は秋月とかで売られている千円くらいのサーボでも行けると思うので、是非挑戦してみてはいかがでしょうか?

KRAに4足歩行の知見を残す意味も兼ねて、結構頑張って書いたのですが、とても長くなってしまい、読みづらくなってしまいました・・・

なにか分からない事があれば、コメントいただければ回答しますので、お気軽によろしくおねがいします。最後までご覧頂きありがとうございました!

参考サイト

[1]PICマイコンで制御する4足歩行ロボットの製作 “http://www.suwa-koubou.jp/micom/4LegsRobot/4legs_robot.html” (参照 2018-12-23)

[2]MAKE: Japan, Arduino搭載四足歩行ロボットのプログラミング”https://makezine.jp/blog/2016/12/robot-quadruped-arduino-program.html” (参照 2018-12-23)

←11日目の記事

競プロ始めました(感想文)

ロ技研で制御を担当しているKです。

数か月前、僕はロ技研でプログラミングの勉強をしていた際に競技プログラミング(以下、競プロ)の存在を知りました。大学入学と同時にプログラミングを始め、知識が乏しかった僕は、プログラミングの勉強ができる一つのツールとして競プロに興味を持ち始めました。

普段はAtCoderを中心にして勉強していますが、そのサイトでのぼくの実力は以下の写真の通りです。知ってる人ならわかると思いますが、まだまだ低いですね(笑)。初めての人に向けて書くと、この図では実力のランクが色でわかるように表示されています。一回、コンテストに出て一つ上のランクの茶色になれる人やそれ以上の人もいます。他にも多く実力者がおり、その人たちに近付けるように日々精進しています。

競プロをやって良かったと思う点は主に二つです。                     一つは、やはり、プログラミングに触れる機会が格段に増えたことです。機械を扱うロ技研の活動に直接生かせているわけではありません。しかし、C言語などの理解は始める前より(まだまだですが)格段に深まったと感じています。                         二つ目は、その方面の人たちと関わる機会が増えたことです。運よく、競プロの実力者の方々と接したり、学校のコンテストなどに参加する機会が、競プロを始めてからいくつかありました。そうした人から直接刺激を受けられる機会があったのが個人的によかったです。

最後に、12月に入る前は、「年内には茶色に行けるだろう」とか甘く考えていましたが、結局できませんでした!今回このブログに現在の実力を晒すことで、これを戒めとし、これからさらに飛躍していく糧にします!(ちなみに今回大幅にratingが下がったのは、バイトでコンテストの参加が遅れたからです(言い訳))

wordpress用です

雑談

どうも。一年のrrrです!

何やら皆さん難しい内容の紹介が多くて、恐れ多いです笑。一年生なのでF3RCの反省などを書くと良いと思ったのですが、何月に何をやっていたのかなど全く覚えておらず、記録もしてなかったので自分からは、皆さんが軽く読み流せるような理系とかロボットに全く関係ない話をしようと思います。
題して、「早朝バイトのすすめ」
代表になったSさんもどうやら、早朝型の人間らしく、早朝を生かすメリットを熱く語っていますね。
そこで、朝早く、具体的には自分は週3回平日5時から8時20分ごろまで早朝バイトを入れてみました。内容は、某宅配便会社の宅配便などを住所毎に運んで仕分けたり、そのバーコードをひたすら読み取ったりする仕事です。そこで働いてみて分かってきた早朝バイトのメリットとデメリットを紹介していきたいと思います。
メリット1. 時給がいい!
基本的にそんな朝早くから進んで働きたいという人間は少ないので、普通よりかは時給が高いです!自分のところはなんと1500円です。そこそこ高いですよね笑

メリット2.優越感に浸れる
バイトが終わったら、家に帰って朝ごはんをたべ、速攻で2限にいきます。そこで、思うのです。あれ?まだ2限なのに、まだ一日が始まってそんなにたっていないのにもう俺は5000円ほど稼いでるではないか!?という優越感です笑。しかも、午後に結構自由な時間が生まれ、サークルなどにも被ることはありません。

メリット3.自然と無駄のない夜を過ごせるようになる
皆さん、夜中までゲームやったり、you tube見ちゃったりしてませんか?早朝バイトを入れることによって自然と早く寝るようになるため、その時間を減らすことができます。

メリット4.飲みに誘われても、断ることができる
「明日、早朝バイトなんで」は最強の断り文句です。

さて、メリットばかり紹介しましたが、もちろんデメリットもあります。

デメリット
起きるのが絶望的につらい
これにつきます。いかに強い意志をもって起きるか。これが早朝バイトをやる上での最難関といってもいいでしょう。4時半に起きるとはそういうことです。いくら早く寝ようと思っても限界はあります。よって相当きついです。
あとデメリットをあげるとしたら、朝絶望的に寒いことと、単純にいつもより少し眠いということですね。

以上、早朝バイトのすすめでした!字体を変えたり、見やすくする努力を怠って申し訳ないですが、最後までま読んでくれた方はありがとうございました!

物理エンジンでロギ犬を歩かせたい!

慶應ロ技研 Advent Calendar 2018 その1 19日目

 

はじめに

みなさんこんにちは!2年のmoden3です。現在はNHKロボコンで主に機構を担当しています。

ロボットの機構を設計していると、「これって本当に動くのかな?」と不安になることが度々あります。部品の動きはある程度CADで見ることができますが、実際に動かす場合は重心などの影響も考えなければなりません。そこで役に立つのが物理演算ソフトを使ったシミュレーションです。というわけで、今回は無料の計算エンジンとして有名なODEに挑戦してみました。

しかしながら、ODEどころかそもそもプログラミング自体も始めたばかりなので、大苦戦した結果このアドベントカレンダーで相当時空を歪めてしまいました…

Continue reading “物理エンジンでロギ犬を歩かせたい!”

PWM信号ってどんな音がするんだろう?

慶應義塾大学ロボット技術研究会その1Advent Calendar 2018

慶應義塾大学ロボット技術研究会その2Advent Calendar 2018 

はじめに

こんちは。1年のrivermscです。ロ技研に入ったもののロボットよりオーディオ系に興味が出始めロボットとは関係ないことやってます。(と言いつつ今月23日のロボカップジュニアに出場します。おしりに火がついてます。はい。)

さて、今日は電装班ならだれでも思う「PWM信号ってどんな音がするんだろう?」という疑問に答えていこうと思います。

PWMはモーターの制御だけじゃない

ロボットを作る場合PWMはもっぱらモーターの速度制御に使われます。ですが、PWMの用途はそれだけじゃないんです。ちょっくらWikipediaを見てみると用途の項目に「アナログシンセサイザー」,「音源チップ」と書いてあります!そうです。音楽にも使えちゃうわけです。アナログシンセではパルス波の音に厚みを持たせるために使われています。ですから「PWM信号ってどんな音がするんだろう?」という疑問はアナログシンセが開発された当初から解決しているのです。この記事の目的はすでに達成されていました。残りは余談です。

矩形波をつくろう

本当はPWM信号発生回路を作りたかったのですが、ぼくの脳みそではその回路が理解できなかったので矩形波発生回路をつくりました。[あぁ~PWMの音ぉ」とかやりたかったです。無念。

作り方ですが矩形波発生回路でググればわかりやすいサイトがいくつか出てきます。ぼくが説明するよりそのサイトを見た方がわかりやすい(というかほぼコピペになる)ので、そこらへんは割愛します。短波系発生回路の理解には物理学Cの内容が活躍します。

矩形波発生回路が作れたら、あとはその矩形波を音に変換すれば矩形波の音が聞けます。矩形波のような単純な音なら圧電スピーカーで充分です。あとは音量調節用にオペアンプ反転増幅回路をつけると楽器らしくなります。それと今回はハイパスフィルタ、ローパスフィルタを付けました。ゆがんだミョーンという音が出せるようになります。アナログシンセっぽくなります。

 

回路図はこんな感じです。矩形波2

抵抗、コンデンサの値はそれぞれ

  • R1,R2,R3・・・・2.2kΩ
  • R4,R9     ・・・・100kΩ(可変)
  • R5,R6     ・・・・20kΩ(可変)
  • R7,R8     ・・・・1kΩ
  • C1,C2,C3・・・・0.1μF

ちなみに矩形波の周波数fは  f=0.7215/(C1R4)  で決定します。R4を可変抵抗にすれば音の高さを変えられるようになるわけです。ローパスフィルタ、ハイパスフィルタのカットオフ周波数はどちらも  1/(2πRC)で決定します。またオペアンプ反転増幅回路については、マイナス電圧の-R9/R7倍が出力電圧になります。 R8はプラス側とマイナス側に流れる電流の差を打ち消すためのものであり、その抵抗値はR7とR9の並列抵抗の値ぐらいが望ましいです。

完成品はこんな感じ。

動画を乗せようと思っていましたが、WordPressのプランをアップグレードしないといけないらしいので諦めます。(youtubeにあげるのも面倒ですし)あんまりおいしい音じゃないです。

さいごに

本当は、音楽のストリーミングサービスについて書こうと思ってました。が、ここで書くことではないと気付いてしまったのでこんな誰得な記事が出来上がりました。ただ、巷にはNoise Toysなる楽器があるらしく(タワレコを散歩してたら見つけました。)案外誰得ではないようで嬉しくなってます。

おまけ

この記事書いた後に気づいたんですけど、PWMの音はArduinoと圧電スピーカーつなげば簡単に聞ける気がします。プログラム書き込んで曲の演奏もできなくはなさそう。(それこそ誰得