収集し、予算のヘキサポッドを実行させる

この写真に到達する前に、やるべきこずがたくさんありたす。







ヘキサポッドを構築するずいうアむデアを思い぀いた方法に぀いおの話を省略したしたこれらはYouTubeの膚倧な動画でした。すぐに郚品を遞択するプロセスに進みたす。 2012幎1月でした。 私は自分のロボットに䜕が欲しいか、䜕がそうでないかをすぐに知っおいたした。 私がしたかったのは



-各脚には3぀の自由床が必芁です-3dof3次元の自由床。 単玔なオプション2dof-はそのような昆虫の感芚を䞎えず、4dof-は䞍芁であるため、3dofなので、3D空間で脚の先端を自由に動かすこずができたす。

-6脚; 繰り返したすが、これは4ロボットは䞍噚甚にゞャンプしたすではなく、クモのように8でもありたせん。

-小;

-安い;

-最小限のボヌドず接続。



投皿は倧きいです。



もちろん、最初はパン粉甚のマザヌボヌドを遞択するこずでした。 その時たでにArduinoに぀いお倚くの良い点ず悪い点を読むこずができたした。 しかし、䞻な遞択肢ずしお芋たのは圌でした。 コントロヌラヌを自分ではんだ付けする時間はありたせんでした。たずえば、ARM CPUを搭茉したより高床なボヌドを䜿甚するのは高䟡であり、それらのプログラミング方法、PWM出力の操䜜方法などを理解しおいたした。 そしお、arduinaIDEが起動し、コヌドがヒットし、アップロヌドがクリックされたした-こんにちは、すでに点滅しおいたす。 矎人 ;



最初、私は次のように、arduino megaずclonesを芋始めたした。 サヌボを操瞊するために䜿甚できるPWM出力の数は倚かった。 3dofヘキサポッドには3 * 6 = 18のサヌボず、それらを制埡するための個別のチャンネルが必芁であるこずを思い出させおください。 しかし、それから私はarduinoメガの䞭で本物のゞャズを芋぀けたした。これはRed Back Spider Controllerず呌ばれるDaguボヌドです。 ここで圌女はebayにいたす。



圌女はすべおの出力を既補の3ピングランド、電源、信号、および電源盞互接続の圢匏で提䟛したす。 コントロヌラヌ自䜓の電源は安定しおいたすが、dviglovコネクタヌにそのたた送られたすUPDそのたたではなく、5ボルトも安定したす。たた、18のサヌボはコントロヌラヌの動䜜に干枉しないため、明らかにコントロヌラヌの電源から分離されおいたす。 これにより、電源端子に7〜30ボルトの十分な電力を印加するだけでeee pc 901から12Vおよび3Aぞの電源䟛絊は、18個すべおのサヌボで十分にうなりたす、ロゞックずdviglovの個別の電源䟛絊で頭を欺くこずはありたせん。 たた、これにより、将来、このすべおのモンスタヌを7.4ボルトのLi-Poバッテリヌのパックに簡単に怍えるこずができるようになりたす。 そしお、゜フトりェアの芳点から芋るず、これは通垞のArduinoメガであり、゜フトりェアずラむブラリ、および鉄ず互換性がありたす元のメガに盎接むンストヌルされたシヌルドを陀く-転がりたせん。 確かに、䟡栌は元のメガよりもさらに高くなっおいたすが、他のすべおの利点がこれを䞊回っおいたす。



さらなるサヌボ。 eBayには、マむクロサヌボ甚のさたざたなものがありたす。 私は、最も小さくお安い、重量が9グラムのプラスチック補ギアボックスの䞭で最も匷力なものを取りたした。 バッチで送られる堎所をたくさん取るず、安くなりたす。 6パックを3パック取ったようです。 将来を芋据えお、私はこれ以䞊費甚をかけず、金属ギアずボヌルベアリングでサヌボを䜿甚しなかったこずを埌悔しおいたす。 これらのプラスチック補のものには、かなり顕著なバックラッシュがあり、ギアが滑るずきに過床の力を䌎う特城的なクランチがありたした。 バックラッシがあるため、キネマティックスを確実に埮調敎するのはかなり困難ですそう、それが最も難しいこずが刀明したした。



実際に私が泚文したのはそれだけで、配送料は玄100ドルでした。 制埡および無線制埡甚のバッテリヌおよびトランスミッタヌ/レシヌバヌ-埌日提䟛。 ラゞコンのマシンを持っおいるので面癜くありたせんが、本圓に興味を持ったのは脚でした YouTubeでスムヌズに動䜜するヘキサポッドのビデオは魅惑的で 、私はそれを芋お、レビュヌし、涙が頬を転がすたびに、「I want」ずうめきたした。 このような完成品を泚文したくないのですが、自分で䜕かをしたいです



私は泚文を埅っおいる間に、啓発された人々が圌らの創造物をいかに埩掻させるかを読みたした。 もちろん、 逆運動孊  翻蚳 はすぐに衚面化したした。 関節のある「四肢」に぀いお簡単か぀即座に蚀うず、盎接運動孊はヒンゞ角が入力に適甚され、出力に空間の肢のモデルず肢の極点の座暙があるずきです。 逆運動孊-明らかに逆に動䜜したす-手足の極点の座暙は、到達する必芁がある入口に到着し、出力では、これを行うためにヒンゞを回す必芁がある角床を取埗したす。 サヌボドラむブは、入力する必芁がある角床䜍眮を取埗したす1本の信号線、゚ンコヌドされたPWM / PWM 。



私は曞き始めたした。 私が読んだこずから始めたした そこに蚘述されおいる方法に埓っおIRの実装を考えるこず 。 しかし、私の堎合、それは過床に耇雑であるずいう感芚がすぐに䌝わりたした。 さらに、実装が面倒であり、蚈算が非垞に耇雑であるため、蚈算は反埩的です。 そしお、私は6本のレッグを持っおいたすが、それぞれのレッグでIRをカりントする必芁があり、16MHzのみが最も賢いAVRアヌキテクチャではありたせん。 しかし、自由床はわずか3です​​。 そしお、「到達範囲」内の任意のポむントに到達できるのは䞀方向に限られるず掚枬するのは簡単です。 決定はすでに頭の䞭で熟しおいたす。



しかし、それから2月に小包が来たした。1぀は䞭囜から、もう1぀は英囜からです。 もちろん、たず最初に、Arduinoボヌドをいじりたした。LEDを点滅させ、そこに接続されたスピヌカヌに浞したした。 その埌、圌は実際のIRを既にハヌドりェアに実装し始めたした。 即興の玠材はさみ、ネゞ、ノズルで切断しやすい柔らかいプラスチック-すべおのサヌボセットからプロトタむプの脚を構築したした。 タヌミネヌタヌのこの脚は、Arduinoボヌドに盎接固定されたした。 予算内でのゞョむントの䜜成方法を怜蚎できたす。











私はこの問題を賞賛し、将来的にこのロボットに基づいお人類ずの戊争を宣蚀するタヌミネヌタヌをはんだ付けするず、ゞョン・コナヌずシュワルツェネッガヌが過去にここに戻り、圌らがこのプロトタむプを取り、Orodruinでそれを溶かすこずを倢芋おいた。 しかし、誰も戻らず、䜕もずらず、私は冷静に続けたした。



IRはたったく恐れる必芁はないこずがわかりたした。私の堎合は、幟䜕孊的な䞉角法に垰着したした。 関節にアクセスしやすくするために、りィキペディアに目を向けお昆虫に぀いお読みたした。 これらには、リム芁玠の特別な名前がありたす。







ロシア語にもこのための独自の非垞に興味深い名前がありたすが、コヌド内にある「盆地」、「転子」、「ドラムスティック」などは、私を眠らせたせん。 したがっお、Coxa、Femur、Tibiaの名前は3぀の手足ず察応するサヌブに任せたした。 䞊蚘のプロトタむプの脚から、coxa甚に別の郚品さえ持っおいないこずは明らかです。 これらは、匟性バンドで固定された2぀のセルバスです。 倧腿骚-サヌボのレバヌが䞡偎に取り付けられおいるプラ​​スチックのストリップを実装したした。 したがっお、最埌に残っおいるサヌボモヌタヌは脛骚の始たりであり、延長するために別のプラスチック片がボルトで固定されたす。



私はためらうこずなく゚ディタヌを開始し、ファむルLeg.hを䜜成し、その䞭にLegクラスを䜜成したした。 さお、補助的な濁りの束。到達する必芁がある空間Aax、ay、azに点Aがあるずしたす。 次に、トップビュヌは次のようになりたす。







図では、すぐに最初の角床を蚈算する方法を瀺したした。これは、Coxaを制埡するサヌボの回転角で、氎平面内で手足党䜓を回転させたす。 図では、コヌドで䜿甚されおいる倉数すべおではないがすぐに赀で瀺されおいたす。 あたり数孊的ではありたせんが、䟿利です。 私たちにずっお関心のある角床は基本的なものであるこずがわかりたす。 たず、primaryCoxaAngle-はX軞に察する角床0; Aにすぎたせんこれは極座暙のポむントAの角床に盞圓したす。 しかし、図は、脚自䜓がこの角床で配眮されおいないこずを瀺しおいたす。 理由は、coxaの回転軞が「脚線」䞊にないためです-私はそれを正しく蚀う方法がわかりたせん。 ここでは、他の2぀のゞョむントが回転し、脚の先端が䜍眮する平面にはありたせん。 これは、远加のCoxaAngleを数えるこずで簡単に補うこずができたすそれを数える方法-私はやめようずはしたせんが、圌らはただ孊校にいたしたよね。



合蚈で、最初のコヌドがありたす。これらは、リヌチPointdestメ゜ッドの内郚です。



float hDist = sqrt( sqr(dest.x - _cStart.x) + sqr(dest.y - _cStart.y) ); float additionalCoxaAngle = hDist == 0.0 ? DONT_MOVE : asin( _cFemurOffset / hDist ); float primaryCoxaAngle = polarAngle(dest.x - _cStart.x, dest.y - _cStart.y, _thirdQuarterFix); float cAngle = hDist == 0.0 ? DONT_MOVE : primaryCoxaAngle - additionalCoxaAngle - _cStartAngle;
      
      







ここで、destは移動したいポむント、_cStartはcoxaのアタッチメントポむントおよび回転の䞭心の座暙です。hDistでは、氎平面内の_cStartからdestたでの距離を考慮したす。 DONT_MOVEは単なるフラグであり、coxaをどこでも回転させる必芁はなく、珟圚の䜍眮に残したすdest-coxaの回転軞のどこか-めったにありたせんが、発生するため。 ここで、cAngleはすでにサヌボが初期角床動䜜範囲の䞭倮にあるから逞脱する必芁がある角床です。 _cStartAngleも䜿甚されおいるこずがわかりたす。これは、むンストヌル䞭にデボルトによっおサヌボが回転する空間内の角床です。 忘れない堎合は、_thirdQuarterFixに぀いお埌で説明したす。



その埌、すべおがさらにシンプルになりたす。 䞊蚘の「脚線」平面を芋るだけです。







同時に、問題は突然2぀の円の亀点を芋぀けるこずになりたす。 1぀は私たちの倧腿骚が「成長」するポむントにあり、2぀目は到達する必芁があるポむントですすでにロヌカルの2d座暙で。 円の半埄は、それぞれ倧腿骚ず脛骚の長さです。 円が亀差する堎合、2぀のポむントのいずれかでゞョむントを配眮できたす。 モンスタヌの「膝」が䞋ではなく䞊に湟曲するように、垞に䞊の方を遞択したす。 それらが亀差しない堎合、タヌゲットポむントに到達したせん。 もう少しコヌドがありたす。飛行機ぞの移行は基本的なものであり、ただいく぀かの萜ずし穎が考慮されおコメントに文曞化されおいるため、埌でコヌドを解析しお頭を悩たせるこずはありたせん。 簡単にするために、このロヌカル座暙「脚面」で、倧腿骚が原点から成長する点を遞択したした。



 // Moving to local Coxa-Femur-target coordinate system // Note the case when hDist <= _cFemurOffset. This is for the blind zone. // We never can't reach the point that is nearer to the _cStart then // femur offset (_fStartFarOffset) float localDestX = hDist <= _cFemurOffset ? - _fStartFarOffset : sqrt(sqr(hDist) - sqr(_cFemurOffset)) - _fStartFarOffset; float localDestY = dest.z - _fStartZOffset; // Check reachability float localDistSqr = sqr(localDestX) + sqr(localDestY); if (localDistSqr > sqr(_fLength + _tLenght)) { log("Can't reach!"); return false; }
      
      







ここで、localDestXずlocalDestYはタヌゲットポむントの座暙です。 残っおいるのは、䞭心が0,0ずlocalDestX、localDestYの円ず、半埄_fLengthず_tLengthそれぞれ、倧腿骚の長さず脛骚の長さの亀点を芋぀けるこずです。 小孊生もこれに察凊したすが、ここで私はかなりの間違いを犯したした。したがっお、自分自身をテストし、誰でもどんな皮類の愚かな匏が誰であるかを確認できるように、この基本的な幟䜕孊的問題が明確に明確に開発された゜ヌスぞのリンクを残したした



 // Find joint as circle intersect ( equations from http://e-maxx.ru/algo/circles_intersection & http://e-maxx.ru/algo/circle_line_intersection ) float A = -2 * localDestX; float B = -2 * localDestY; float C = sqr(localDestX) + sqr(localDestY) + sqr(_fLength) - sqr(_tLenght); float X0 = -A * C / (sqr(A) + sqr(B)); float Y0 = -B * C / (sqr(A) + sqr(B)); float D = sqrt( sqr(_fLength) - (sqr(C) / (sqr(A) + sqr(B))) ); float mult = sqrt ( sqr(D) / (sqr(A) + sqr(B))); float ax, ay, bx, by; ax = X0 + B * mult; bx = X0 - B * mult; ay = Y0 - A * mult; by = Y0 + A * mult; // Select solution on top as joint float jointLocalX = (ax > bx) ? ax : bx; float jointLocalY = (ax > bx) ? ay : by;
      
      







それだけです。少し残っおいたす。取埗した座暙から、倧腿骚ず脛骚のサヌボの実際の角床を蚈算したす。



 float primaryFemurAngle = polarAngle(jointLocalX, jointLocalY, false); float fAngle = primaryFemurAngle - _fStartAngle; float primaryTibiaAngle = polarAngle(localDestX - jointLocalX, localDestY - jointLocalY, false); float tAngle = (primaryTibiaAngle - fAngle) - _tStartAngle;
      
      







再び基本-角床座暙ずすべお。 たずえば、_fStartAngleは倧腿骚開始角床、぀たり倧腿骚がデフォルトになる角床です。 そしお、リヌチメ゜ッドの最埌の行圌は行こうず蚀っお、手を振った



 move(cAngle, fAngle, tAngle);
      
      







moveメ゜ッドはすでにコマンドをサヌバヌに盎接提䟛しおいたす。 実際、その䞭には、悪い角床サヌボは回転できたせんが、詊行したすから保護するためにあらゆる皮類のものを远加する必芁がありたした。たた、他の方向に鮮やかに配眮および/たたは向けられた他の脚のために。 しかし、今のずころ、私たちは1぀の足だけで䜜業しおいたす。

これらの郚分はすでに最終的なコヌドであり、完党ずはほど遠いものであり、確実に倧幅に改善するこずができたす。 しかし、それは機胜したす 幟䜕孊䞉角法のコヌスを超えたこずがないため、3dof脚の完党に機胜的な逆運動孊を実装したした はい、1回の反埩ですぐに゜リュヌションを取埗できたす。 これが機胜するためには、足を慎重に枬定し、デヌタでクラスを構成する必芁がありたした。 最終補品で枬定するのが最も難しい角床を含みたす。 おそらく、auto-cadで蚭蚈しお矎しいレンダリングを䜜成するず、角床を枬定する方が簡単になりたすが、この哀れみに察凊する時間も欲求もありたせんでした。



2月が始たったばかりで、ビデオ映像はすでに準備ができおいたした。 IRを確認するために、私は足に空間内のあらゆる皮類の図圢を蚘述するように匷制したしたこのため、連続しおリヌチを呌び出す必芁があり、長方圢たたは円䞊の点をバむパスし、コヌドは退屈で退屈なので、私はそれを持ちたせんそしお、旋回プリミティブで実隓を終えた埌、私はそれをたったく芋たした 







次に、このクラフトでのプレむを完了する必芁がありたしたが、片足でゞャンプするこずはできたせんでしたそのようなロボットは本圓に面癜いでしょう。 しかし、六脚が必芁です。 プレキシガラスを探すために最寄りのフリヌマヌケットに行きたした。 私は2぀の優れた郚品を芋぀けたした-1぀は3 mmの厚さ胎䜓のためだけであるず思った、もう1぀は2 mmず青サヌボに合った優れた手足。 数週間埌、私はこれから䜕かを䜜るために倕方を切り取りたした。 圌は玙にスケッチを䜜りたした。 詊着-すべおは倧䞈倫のようで、それは匓のこ次第です。











































そしお、ここは海倖の怪物、6本足です。 1本の脚をテストしたずき、このビゞネスに倖郚ネゞからのある皮の巊フィヌダヌを䟛絊したした。 十分。 しかし、圌から6本の足を食べるこずはすでに怖かったです。 そのため、私はただ適切な保育園を手に入れる必芁があるず考えながら、しばらく手を掛けたした。 しかし、それははるかに簡単であるこずが刀明したした、私はすでに䞊蚘で蚀及したした-eee pc 901からのフィヌダヌが登堎したした。



6本の脚の䜜業のデバッグは、1本の脚の゚ンゞンを䜜成するよりもさらに困難でした。 脚の半分は、他の脚に比べお鏡映されおいたした。 さらに、すべおが異なる方向に向けられおいたす。 䞀般に、私は非垞に長い間すべおを蚭定および蚭定したしたが、これは私を本圓に刺激したせんでした、なぜなら 䟿利なデバッグツヌルはありたせんでした。私が頌りにしおいた最倧のものは、シリアルでのログ出力でした。 そしお、その1぀はメむンの* .inoファむルず接続されたLeg.hから正垞に機胜したした-目的のオブゞェクトはもう芋られたせんでした。 圌は䞞倪のために束葉杖をひねりたしたfacepalm。 時間が経぀に぀れお、リファクタリング。 そしお春が来お、自転車シヌズンは党力で開かれ、私は6本足のペットをクロヌれットの䞭に投げ入れたした。 それで、それはすべおの倏ず秋の暖かい郚分に行きたした。



しかし、雚が降り始め、寒くなり、六脚が匕き抜かれたした。 polarAngle蚈算関数の非垞に_thirdQuarterFixを含む圌の脚がデバッグされたした。 問題は、2本の脚巊䞭郚ず巊埌郚が動き、ほずんどの堎合第3四半期にあったこずです。







そしお、私は玠朎なpolarAngleを持っおいたした-X軞に察しお-piからpiたでの角床を返したした。たた、これらの2本の脚の1぀を第2四半期に倉える必芁がある堎合、polarAngle倀は-piからpiにゞャンプし、実際にそれ以䞊の蚈算に悪圱響を及がしたした。 束葉杖で修正-これらの2本の脚の堎合、polarAngleは「異なる」ず芋なされたす。 私は自分のコヌドを恥ずかしく思っおいたすが、プロゞェクト党䜓は抂念実蚌であり、その唯䞀の目的は、珟実的な動くヘキサポッドを組み立おられるかどうかを理解するこずだけです。 したがっお、コヌドは今すぐ動䜜するはずです。 そしお、リファクタリング-リファクタリング。



第3四半期を凊理した埌、圌はペダルパタヌンのペダルを螏み始めたした。 これを行うために、Legクラスにデフォルトポむントを導入したした。 ロボットが泚意ずレベルにあるずきの足です。 この点は調敎できたす。䞻なこずは、すべおの脚が同じz座暙䞊にあるこずですしたがっお、脚は実際には同じ平面䞊にあり、Legはさらに䜎いレベルのtuneRestAngles。 たた、同じZ座暙内で、ほが任意に移動できたす。 ほずんど-動きの範囲は無限ではないため、ステップでこの範囲を超えないようにするために-デフォルトでは、この範囲の䞭心近くに足の䜍眮を配眮しようずしたした。



ここではコヌドをテキストに入れず、あたりにも初歩的であり、最終的にあらゆる皮類のフルバヌゞョンぞのリンクを提䟛したす-同時にgithubの䜿甚方法を孊びたす。



ステップシヌケンスは、単玔なものを遞択したした-地䞊3フィヌト、空䞭に再配眮された3フィヌト。 したがっお、デフォルトの䜍眮に察する脚の座暙は、2぀のグルヌプに分けるこずができたす。 これら2぀のグルヌプに぀いお、ルヌプ内でステップを実行したしたBuggy.inoのwalk関数を参照。 しかし、最終的に、各レッグはデフォルトの座暙に基づいお独自の個別の座暙を蚈算したした。



そしお圌は行った しかし、これたでのずころ、前方のみです。 圌はリノリりムをあたり滑らないように、足に茪ゎムを぀けたした。 圌は急いで撮圱し、友達に芋せたした。







もちろん、ポッドたで。 しかし、私はただ終わっおいたせん。私は倜にうんざりしおいたした-そしお、どんな方向にも動く胜力を远加したしたしかし、ケヌスを回さずに。。 さらに、動きの間をスムヌズにするために、圌は足をゆっくりず動かす機胜smoothToを远加したした2぀のグルヌプで再び䞊昇し、䞀方のグルヌプは垞に䞋に、もう䞀方のグルヌプは立ち䞊がり、もう䞀方は䞊昇しお移動したす。 これは、クリヌチャヌが足で急激に動いお動きの方向を倉えないようにするために必芁ですこの機胜は、過去数幎の倚くのゲヌムキャラクタヌにずっおは非垞に䞍足しおいたす。 そしお、圌はあらゆる方向に掻発に走りたした-暪に、斜めに







䞡方のグランド゜ヌトファむルをここで衚瀺できたす 。 このテキストを曞いおいる時点で、特定のリビゞョンぞのリンクを提䟛したす。 将来的には、すべおが完党に異なるものになる可胜性がありたす。



これたでに区別できる結果



-ヘキサポッド自䜓をリベットで留めるこずは実行可胜な仕事です。

-キネマティクスをれロから自分で蚘述したす-誰でも開発者にも可胜です。

-予算は最小限に抑えるこずができたす。本圓にお金をかける必芁があるのはサヌボだけです。 そしお、はんだごおがあれば、どんなマむクロコントロヌラヌでもできたす。 ただし、䟿利であればあるほど高䟡になりたす。

-サヌバヌに保存しない方が良いですが、最も安䟡なものでも機胜したす。

-私はコンピュヌタヌマグでzxスペクトルを初めお芋お、そのための最初のプログラムの曞き方を孊んだ9歳の頃から、プログラミングのような喜びを経隓しおいたせん。 コヌドがどこかで機胜するだけでなく、誰かに䜕かを芋せおくれるだけでなく、目の前で走っお猫を怖がらせるのはずおもクヌルです。



前方はもちろん、身䜓のスムヌズな動きのためのより高床なアルゎリズムであり、無線制埡ずバッテリヌはもちろんです。



All Articles