ロボットを開発するこずはどういう意味ですか

ロボットずプログラミングに぀いお読んで、「このようなこずを自分でやるのは玠晎らしいこずだ」ず考えたす。 圌らは蚘事を読み、ビデオを芋たす。 写真ではすべおがはっきりしおいたす。 通垞、完成品もビデオで衚瀺され、補造技術も簡単に衚瀺されたす。 そしお、すべおが明確であるように芋えたすのこぎりで削られ、ねじ止めされ、はんだ付けされ、接続され、このコヌドでそのプログラムにプログラムされたした。



さらに熱心で、興味深く、䞀芋シンプルなオプションを遞択し、行動に移し、倚くの堎合、コピヌしお最初のロボットを䜜りたす。 これは匷い意志ず非垞に重芁な決定です-䞻なこずは、少なくずも自分で䜕かを始めるこずです 補造プロセスでは、ある皮のシュトゥケンティダの泚文/賌入ず思われるものたで、倚くの技術的な調敎がありたす。 そしおただ-コネクタは正垞にはんだ付けされたせん-ワンタッチビデオはどのように機胜したすか 䜜成プロセスはしばしば遅れたすが、氞続的な初心者のロボット工孊は䜕らかの圢で結果を終了し、少なくずも「盎線で」意味のある最初の起動を行いたす。











そしお、ロボットが完成するず、なぜすべおがこのようにその順序で正確に行われるのかを理解するこずになりたす。 䜜成プロセスは、すでに䜕らかの圢で実珟、圢匏化、およびペむントできたす。 この瞬間から、次の第二䞖代のモデルの開発が始たりたす。



はい、以前興味のある蚘事も読みたした。 そしお今、私は読んだ 私は特にヘリコプタヌに関する蚘事が奜きです。地球から、空ぞ しかし、正盎に蚀うず、圌らは私の考えだけを呌び起こしたした。 さらに、プログラミングを理解する必芁があり、研究所でCず䞀緒に働いたずき、すべおが完党に忘れられおいたした。 Arduinoが䜕であるかは知っおいたすが、圌女のラむブを芋たこずはありたせん。 などなど。 私は技術教育を受けおおり、FPGAのDSP問題に関䞎しおいたす。 技術的には、私が把握しお把握するのに障害はありたせんが、実際には...私は仕事でこれをすべお行い、私にずっおは、「屋根の䞊」ず蚀うように、このすべおのビゞネスがありたす。 その結果、䜕らかの圢でそれを開始するためには、䜕らかの良いむンセンティブが必芁でした。 刺激は、他の誰かがそれを必芁ずしたずきに珟れたした。真実は、本圓の創造はあなたが他の人にそれを䞎えるずきであるず蚀われおいたす。



私の仕事の性質を知っおいる、若い私たちは焌きたおの ゚ンデュランス䌚瀟の創蚭者の1人である私の良き友人は、いく぀かの技術的な問題に぀いお私に連絡したした。 圌らはアメリカに開発者がおり、すでに超安いarduinoに車茪が付いた電話+プラスチックプラットフォヌム-安くおどこにもないように芋えるテレプレれンスロボットのプロトタむプをすでに発衚しおいるこずが刀明したした。 しかし、圌らはただ1぀のマヌケティングず「ここで販売された」ビゞネスをやりたくはありたせんでしたが、技術的なトピックをより詳现に掘り䞋げ、独自のモデルを開発するこずを望んでいたした原理ず機胜が同等であっおもロシアでは、完成した結果だけでなく、その生産のための技術自䜓も取埗するために。 これは謙虚な僕のこの件ぞの参加の前提条件です私は自分自身にヒントを䞎えたす。



最初は、蚘事も読んで、圌らがどこで䜕を買うのか、どうやっおそれをするのかを芋たした。 しかし、単䞀の写真はありたせんでした。 䞀般に、すべおが明確であるように芋えたすが、同時に、すべおではありたせん。 コンピュヌタヌから管理する方法、コンピュヌタヌにビデオを配信する方法は明確ではありたせん。 さらに、私は゜フトりェア゚ンゞニアではないので、この゜フトりェアのテヌマを最初から「掘り䞋げ」たくはありたせんが、もちろん興味深いでしょう。 どういうわけか、スクリプト蚀語AutoItを䜿甚しお、どういうわけかすべおのニヌズをうたく満たしたした。 怜玢の結果、私にずっお重芁な2぀の重芁なリ゜ヌスが芋぀かりたした。carduinoオンラむンストアずサむバヌプレむスフォヌラムです。 ストアでは、必芁なすべおのコンポヌネントを1か所で賌入できたす。



もちろん、䟡栌はebayやaliず比范しおワむルドですが、䞻なものはそうではありたせんでした-プラットフォヌムずそれに必芁なボディキット、そしおすべおの小さなものを買うこずができたした。 そしお、それはピックアップ/泚文に䟿利でした。 フォヌラムの「自分でできる」\「ロボティクス」および「自分でできる」\「Cyber​​Wrt」セクションでは、䞀般的な情報ず、Wi-Fiを介したロボットずコンピュヌタヌの接続を詳现に敎理する方法を芋぀けるこずができたす。 専門分野での10幎の経隓が実感し、すぐに䜕かをコピヌ、ねじり、たたはプログラミングし始める代わりに、私は鉛筆ず玙を手に入れたした...



「開発」ずはどういう意味ですか 「ロボットを䜜る」が䜕であるかは明らかです-あなたはそれを受け取っお...それをしたす そしお、それを「開発」する方法は

以䞋では、ロボットの䜜成ではなく、プロセス、぀たり開発に぀いお説明しようずしたした。 ロボットを構築物ずしお䜜成するこずは、最初から盎感的で盎感的です。 それが䜜成されるず、これ-それ、あれ-これはねじ蟌たれたす。 圌はこのようにねじ蟌みたした-突然、2番目の郚分を別の方法でねじ蟌む必芁があり、8番目の郚分は手袋のように収たるこずが刀明したした。バッテリヌワむダを巊に5番目の郚分の近くに移動する必芁がありたす近くに10番目の詳现があるためです。 継続的な創造性。 倧人ずしお詊しおみたしょう。最初に䜕をするかを考え、次にそれを行いたす:)



したがっお、この蚘事で説明する内容は。 私はロボットをどのようにしたかに぀いおは曞かないこずにしたした。そのような蚘事はたくさんあり、他の蚘事の倖芳には意味がありたせん。 私は、賌入プラットフォヌムでセンサヌをぶら䞋げお自分や他の人を喜ばせるためのおもちゃを䜜った最初の人でも10人目でもありたせん。 私は自分の思考技術を説明するために、いわば詊しおみるこずにしたした。 ロボットを䜜るこずはそれほど難しくないずいう事実だけでなく、ロボットをれロから䜜成しお詊すこずができる方法論を蚭定し、初心者のロボット工孊では、䜜成の段階は最初は明確で理解しやすく、未知ぞず進む。



ロボット工孊に関䞎したこずがない人を想像しおください。 圌には、はんだごおの友人、マルチメヌタヌ、ワむダヌカッタヌ、ドラむバヌなどの手工具がありたす。 自分を玹介したしたか いいね 行こう...








最初のステップは理解するこずです



䜕をしたいですか そしお、なぜこれが必芁なのですか



私にずっお、この問題は最初に解決されたした-Wi-Fiたたはむンタヌネットを介しおコンピュヌタヌに接続できるビデオカメラを備えたタむプラむタヌを䜜成する必芁がありたす。コンピュヌタヌでは、タむプラむタヌから写真を芋お、それを制埡しお移動したす 理解できるように思えたすが、どういうわけか退屈で、䜕かが欠けおいたす。 リモヌトコントロヌル-それは䜕らかのロボットですか ロボット ロボットずは ロボットは、それ自䜓で䜜業を行うある皮の自埋的なものです。 このタスクに適甚する方法は そしお、マシンが自分自身に乗っおみたしょう そのため、問題の声明はありたせん-必芁に応じお攟しおください。 しかし、圌女が奜きなように乗るなら、圌女は物䜓ず衝突したす。 これはなんずなく悪いこずです。 そのため、機械は前方を確認しお障害物を回避し、衝突を防ぐこずができなければなりたせん。 これをどのように行うこずができたすか ビデオカメラからのデヌタを凊理できたす。 ええず...どういうわけか、これにアプロヌチする方法がたったく明確ではありたせん。 これはおそらく簡単ではありたせん。 他に䜕がありたすか あらゆる皮類の赀倖線およびレヌザヌ距離蚈が販売されおいたす あなたはそれを買うこずができ、どういうわけかそこから距離を埗るこずができたす。 それはナンセンスですが、そこには䜕かがありたす...



反射に基づいお、デバむスの抂念であるアむデアが生たれたす。 考察の結果は論文に芁玄され、簡朔に、本質を集䞭させるべきです。 次のデバむスを取埗する必芁がありたす。



-オペレヌタヌのコマンドに埓っお、圌の前でビデオを攟送する衚面での移動方法を知っおいたす。

-「存圚」の自埋モヌドがありたす任意の方向に独立しお移動できたす。

-あなたの前の状況を制埡したす。

-正面の物䜓を怜出した堎合、オペレヌタヌのコマンドを無芖したり、オフラむンモヌドでの移動方向を倉曎したりするこずはできたせん。



目的を決めたようです。 はんだごおを甚意しおテヌブルに配眮したす。 あなたは垃で包むこずができたす-それはより柔らかく、より快適になりたす。 状況に慣れさせおください。



第二段階-珟実の研究



基本的な機胜を決定し、䜕をする必芁があるかが明らかになった埌、疑問が生じたす。それをどのように行うか、どのように芋えるかです。



ハンマヌを手に持ち、厳しい衚情であなたの家を凝芖し、テヌブルカバヌ、車怅子、パン​​ツからのゎムバンド、䞭囜の棒、カヌテンからの20センチメヌトルの生地、サンダルからのラッチ、郚品甚に分解したラップトップ-すべおを明確に宣蚀したす進歩の名の䞋に私を枡したす 声に䞍必芁な質問がないように、脅嚁ず粟神化の色合いを同時に䞎えるこずができたす。 しかし、私はより効果的な方法を提案したす。この目的のために、人々が䜜成した楜噚は「むンタヌネット」ずしお理想的です。 私たちは、あなたの宗教があなたに䜿甚を蚱可し、読み、芋、聞き、掘り䞋げるこずを開始できる怜玢゚ンゞンに「自分の手でロボット」ずいう単語を入力したす。 䜕かを思い぀くこずは、それを行う方法を思い぀くよりもずっず簡単だからです。 さらに、合栌するこずであなたはもっずもっず面癜いこずがわかりたす



したがっお、この段階の結果は、最埌の段階で思い぀いたもののタむプを決定する、より詳现な抜象リストになるはずです。 デバむスは次のようになりたす。



-2぀の゚ンゞンを備えた3茪プラットフォヌム2぀の駆動茪、3぀目-バックアップずしお。

-単䞉電池で駆動1.2-1.3V x 4 =箄5ボルト-゚ンゞンに最適;

-デバむスはArduino Nanoマむクロコントロヌラヌによっお制埡されたす゚ンゞン制埡-゚ンゞンドラむバヌを介しお、5Vからマむクロコントロヌラヌに電力を䟛絊できたす。

-超音波センサヌ5V電源を䜿甚しお範囲を決定したす。

-フラッシュされたルヌタヌ5V電源はアクセスポむントずしお機胜し、Webサヌバヌに接続しおマむクロコントロヌラヌにコマンドを発行できたす。䞀方、ルヌタヌに接続されたWebカメラから画像にアクセスできたす。

-2぀のスむッチがデバむスにむンストヌルされたすON / OFF電源ずON / OFF自埋モヌド-これ以降、デバむスはありたせん。自埋的に動䜜できるため、ロボットを意味したす。

-ロボットには障害物が怜出されたずきに点灯するLEDが装備されおいたす。

-ロボットの前面に2぀の明るい癜色LEDがありたす-ラむト-なぜですか暗いずきはロボットを怖がらせるべきではありたせんが、明るい光では垞にいくらか明るくなりたす。ここでの䞻なこずは振り返らないこずです-ビデオカメラは前方のみ。

-りェブカメラはロボットにむンストヌルされ、ルヌタヌに接続されたす。



私たちが提瀺したこの倖芳は、ロボット甚のコンポヌネントの垂堎を研究しおいる間に受け取ったアむデアに基づいおいたす。 ねじに察するロボットの詳现な衚珟はありたせん-ただし、䞀般的な機胜のみが、結果がどうなるか想像できたす。 䞀般的に、すべおをcarduinoストアで賌入できるほか、ルヌタヌを䜿甚しおロボットずの通信を敎理し、サむバヌプレむスフォヌラムで瀺されおいるずおりにセットアップできるず結論付けおいたす。 個々のコンポヌネントを接続する耇雑さを理解し、ルヌタヌのプログラミング方法を理解しおいなかったたで。 しかし、圌らは、個々のコンポヌネントを互いに電気的および情報的に接続できるこずを認識し、少なくずも構造ず倖芳を決定したした。



ロボット郚品
車茪、゚ンゞン、ファスナヌを備えたプラットフォヌム











゚レクトロニクス甚ボヌド











マむクロコントロヌラヌCarduino Nano v.7











超音波センサヌHC-SR04











゚ンゞン制埡甚ドラむバヌ











TP-Link MR3020ルヌタヌ











ハブ未知のモデルのコンパクトでミニチュアのハブ











りェブカメラLogitech C270













はんだごおはテヌブルの䞊にあり、䞊の写真に興味を持っお芋えたす。 興味は明らかです-はんだ付けは圌のためにすべおです



ステヌゞ3-創造性䞀般的な開発



倚くの時間が費やされたしたが、結果はただ芋えおいたせん 結果は、むメヌゞず思考の圢で私たちの頭の䞭にしかありたせん。 どういうわけか、これらの考えを具䜓化する必芁がありたすか ロボットの倖芳がどのように芋えるかは、すでにおおよそ理解できたす。 コンポヌネントのセットも定矩されおいたす。 どのように接続したすか これらはすべおどのように互いに通信したすか ロボット-これは電球ではありたせん-スむッチをフリックするず点灯したした。 それから圌はトグルスむッチをクリックし、電源が䟛絊された-そしお䜕 そしお、ここで、芪愛なる読者、開発は3぀のコンポヌネントに分岐し始めたすデザむン、電気、゜フトりェア。



完党に既補のものをすべお䜿甚するため、このような完党な蚭蚈開発は行われたせん。 予芋可胜なすべおの蚭蚈䜜業は、個々の箱を䞡面テヌプにうたく接着し、特別に指定された堎所にボルトをねじ蟌むこずで構成されたす。 抂しお、そういうコンポヌネントの組立図があるはずです。 しかし、プラットフォヌムやベヌスがない堎合は、むンストヌルされおいるすべおのコンポヌネントの寞法を掚定し、寞法を蚈算しお、ベヌスボヌドのサむズ、他のロボットコンポヌネントの取り付け方法などを理解する必芁がありたす。 しかし、すべおは私たちにずっお単玔であり、アセンブリ図面の圹割はロボットの最終的なタむプの写真によっお挔じられるため、この開発の方向はこの蚘事ではたったく考慮されおいたせん。



座っお絵を描いた埌、ロボットの次の機胜的なフォヌムに移動できたす。











写真の品質に぀いおは事前に謝眪したす。 たくさんの写真を撮りたしたが、トラフィック量を枛らしたくありたせんでした。そのため、品質ず音量の間で劥協するこずになりたした。぀たり、少し重くなりたすが、読みやすく理解しやすいです。



写真には䜕が芋えたすか



ロボットは、通信ナニットず制埡ナニットの2぀の独立した郚分で構成されたす。 通信ナニットは倖郚オペレヌタヌず通信し、倖郚オペレヌタヌからコマンドを受信し、それらを制埡ナニットに発行したす。 制埡装眮は、コマンドを受け取り、それらを実行したす。 ぀たり、管理を2぀のレベル-䜎レベルプラットフォヌム管理、センサヌずの盞互䜜甚ず高レベル䜎レベル郚分のオペレヌタヌずコマンド制埡ずの盞互䜜甚に分割したした。 管理タスクは2぀の郚分に分かれおおり、個別に解決できたす。たず、Arduinoマむクロコントロヌラヌの圢で動くプラットフォヌムを扱い、次に再構成されたルヌタヌの圢で通信したす。



通信ナニット。



1電気工孊。 ここでは、すべおが䞀般的に明らかであるように芋えたす。カメラはビデオず音声を提䟛し、ハブを介しおルヌタヌに接続したす。 Arduinoもハブを介しお接続したす。 ケヌブルをUSBコネクタに接続するのはあたり賢明ではありたせん。間違える可胜性は十分に小さく、逆も同様です。䞀郚の人はこの可胜性を十分に持っおいたすが、これは私たちに぀いおではありたせん!!! 挿入する堎所を芋お、登らない堎合は、匷く抌したす-ぎったり収たるはずです、USBです



2プログラミング。 ルヌタヌ甚の既補のファヌムりェアずロボット甚の既補のモゞュヌルが䜿甚されるため、ここでの開発はありたせん。 コントロヌルナニットずのむンタヌフェむスプロトコルは既に決定されおいたす-あなたもそれを把握する必芁がありたす。 どのように正確にフラッシュし、そこで䜕を正確に構成するか-埌でそれを理解したす。



コントロヌルナニット。



1電気工孊。 すべおが明らかなようです。 マザヌボヌドにはすべおがはんだ付けされおいたす。 センサヌがArduinoに接続されおいる堎所を把握する必芁があるだけで、同時にどこでも䞍芁な䜜業を行わないため、地面が電源ず混同されたす。 接続の芳点からは、特別な問題はないようです。 確かに、ボヌドずの接続先をすぐに把握するこずはできたせんが、マスタヌの䜜品を芋お、䞋の写真を芋぀けた埌、すべおが適切に配眮されたす。 どのように、そしお䜕が離婚されたのか-そしお、私たちはそれを理解したす、誰もファむルルヌルをキャンセルしたせん䜕かがあれば、それを終了したす











2プログラミング。 そしお、ここに問題がありたす。 そこでどのように、䜕をすべきか。 ここにチヌムが来たした。 どうする 私たちは再び玙ず鉛筆を取り、描画したす。 その結果、次の機胜的な゜フトりェアスキヌムを取埗できたすプラットフォヌムのみ。











次の正方圢が刀明した。 しかし珟圚、これらは玔粋に゜フトりェアモゞュヌルです。 感じるこずも觊れるこずもできないもののある皮の具䜓化ですが、それは、ロボットがこの抜象化のレベルの論理に基づいお動くためです。

コマンドは、むンタヌフェむスモゞュヌルで受け入れられる必芁がありたす。 着信デヌタが理にかなっおいるこず、これが干枉や誀ったコマンドではないこずを認識しなければならないのは圌です。 コマンドを識別する堎合、モゞュヌルは制埡モゞュヌルにどのようなコマンドが届いたかを通知する必芁がありたす。 コマンド制埡モゞュヌルは、いく぀かのアクションを実行する必芁がありたす-移動を開始、停止、前方に障害物があるかどうかを「芋る」、ラむトをオンにする、たたはオフにするなど。



自埋モヌドボタンが抌された堎合、制埡モゞュヌルは前方に障害物があるかどうかを刀断し、モヌタヌモゞュヌルに適切なコマンドを発行しお前進し、障害物がある堎合は䜕らかのアクションを実行する必芁がありたす。 ゚ンドデバむスを盎接制埡する機胜は、耇雑さのレベルに基づいお他のモゞュヌルに郚分的に委任されたす。 制埡モゞュヌルは、゚ンゞンを前進させるために、前進が可胜かどうかを知る必芁がありたす。 ほずんどの堎合、そのように、超音波センサヌからデヌタを取埗するこずはできたせん-なぜこれを行う必芁があるのでしょうか 呜什方法は知っおいるだけです-センサヌを操䜜するための゜ナヌモゞュヌルがありたす そしおここで、ロボットの前の動䜜状況に関するレポヌトを求めおいたす。先に進むこずができたすか



はんだごおががろがろになっお、がんやりず芋えないように出おきお、興味を持っお゜ケットを芋぀めおいたした。110ボルトか220ボルトか。



第4段階-創造性詳现な開発



䜕をどのように行うかは理解できたす。 䜕から明らかです。 これがどのように機胜し、どのように芋えるかは明確です。 時間だ 䜕かを始めたしょう 非垞に倚くの人が、読み、芋、評䟡し、考え、発明し、拒吊し、塗りたした。 ええず...そこに、はんだごおが近くにありたす。 圌は私たちを芋おいたす。 圌は困惑しおいる-それは取るず支払うように芋える、なぜ私はゎミをする必芁がありたすか 私たちはため息を぀き、はんだごおを䞀枚の玙で芆いたす。今すぐ眠りたしょう、すべおが準備できおいるわけではありたせん。 すべおが機胜する様子を理解するだけでは十分ではありたせん。すべおが構造的に芋える様子を理解する必芁がありたす。 理解を最倧限にする必芁がありたす。



通信ナニット。



ほずんどすべおが最終段階で発芋されたした。 すべおが明確です。 サむバヌプレむスフォヌラムでは、 このトピックに粟通し、TP-Link MR3020ルヌタヌを再フラッシュしお構成する方法を理解したす。 ルヌタヌのファヌムりェアをダりンロヌドしたす。 どこにどのIPを入力し、䜕を、どこにクリックするかを蚘述したファむルを䜜成したす。唯䞀の問題は、どのコマンドがマむクロコントロヌラヌに送信されるかが明確でないこずです。フォヌラムに座っお、読曞ずチャットをした埌、すべおが明確になりたした私に答えお助けおくれたすべおの人に感謝したす。すべおのコマンドを同じテキストファむルに蚘述し、どのチヌムが䜕を担圓しおいるかをマヌクしたす。すべおがシンプルであるこずが刀明したした。たずえば、「進む」などのボタンが抌されるず、ASCIIコヌドの特定の行が送信され、ボタンが解攟されるず、「停止」以䞋のバむトが送信されたすずいうコマンドが発行されたす。



コントロヌルナニット。



前の段階で、制埡ナニットに正確に接続するものを決定したした。コントロヌルナニットの䞭心はArduino nanoです。これは䜕ですかそれらの電球ずこれらのコネクタは䜕に責任がありたすか゜ナヌの脚に関連する結論は䜕ですかずにかく゜ナヌず通信する方法は



コンポヌネントに関する情報を䞀生懞呜勉匷し始めたす。幞いなこずに、むンタヌネットがあれば図曞通に行く必芁はありたせん。䜿甚するコンポヌネントの技術的な説明を䜜成したす。ロシア語のリ゜ヌスで、どのようなボヌドが機胜するかを読んでメモを取るこずができたす。゚ンドデバむスずの接続方法ず゚ンドデバむスの操䜜方法を理解するために、圌らはすべおが非垞に簡朔で明確で理解可胜な独自の「デヌタシヌト」を䜜成したす。メヌカヌの英語のデヌタシヌトを調べるだけで十分な堎合もありたすが、䞭囜語たたはデヌタシヌト自䜓が非垞に膚倧である堎合がありたすそのように200ペヌゞので、短いメモを䜜成するこずをお勧めしたす。



私たちはマむクロコントロヌラヌで「ヘルプ」を䜜成したす。

Carduino nano v。7








次に、呚蟺機噚がどのように接続され制埡されるかを理解したす。゚ンゞンドラむバヌ

L9110Sチップに基づく゚ンゞンドラむバヌ














超音波センサヌ

゜ナヌHC-SR04
















このすべおの理解の埌に、゜フトりェアモゞュヌルの接続のブロック図が描かれたす。これは、それらずの盞互䜜甚を反映し、䜕がどこに接続されおいるかマむクロコントロヌラヌのどのレッグにに関する情報を含みたす。











この図を描くには粟神的な努力が必芁です-結局、フレヌムワヌクは基本的に蚭定され、その䞊にコヌドが配眮されたす。ここで、発蚀する必芁がありたす。実際、私はFPGAを開発しおいるため、最初はFPGAの堎合ず同じように構造をペむントしたした。SIのようなプログラミングの堎合、回路䞊の信号の数は実際には冗長であるこずが理解されるべきです。しかし、その埌、プラットフォヌムの独立性が埗られたす。FPGAですべおを詊すこずができ、さらにオプションがありたす。



この図を巊から右に読みたしょう。 UARTむンタヌフェむスモゞュヌルはデヌタを受信したす。デヌタがコマンドの堎合、SCTRLパルスストロヌブの䞋のCTRL制埡バむトを制埡モゞュヌルに発行したす。ストロボを受信した制埡モゞュヌルは、䜕らかのコマンドが到着したこずを理解し、CTRL入力を読み取り、コマンドを実行したす。 「forward」コマンドが来たずしたしょう。出力信号はパルス信号Get_Distであり、距離デヌタはDist入力で期埅されたす。原則ずしお、Get_Distパルスを垞に受信するこずは犁止されおいたせん。この堎合、必芁なずきにDist入力ポヌトから範囲倀を取埗するだけです。レンゞですべおが倧䞈倫だずしたしょう-障害物はただ遠くにあり、あなたはそよ颚に乗るこずができたす。モヌドバスを介しおモヌタヌ制埡モゞュヌルに信号が発行され、所定の速床で前進する必芁があるこずを瀺したす。範囲を枬定し、察応するLEDに移動するず、動䜜を瀺し、システムで䜕が起こっおいるかを理解するために、高レベル論理ナニットも発行されたすデバッグ時に圹立ちたす。



モゞュヌル方匏がありたす頭が敎いたした方法ず内容は明らかです。次に、これを説明する必芁がありたす-各モゞュヌルが䜕をすべきか、どのような条件の䞋で。



むンタヌフェヌスモゞュヌル




















制埡モゞュヌル
































距離枬定モゞュヌル




















゚ンゞン制埡モゞュヌル
















はんだごおからのプラグが付いおいる尟はテヌブルのコヌナヌのたわりのシヌトの端の䞋から萜ちた。葉が少し滑り、銃口が開いた。はんだごおは、「神殿の呚りに指をねじる」ずいうゞェスチャヌさえ必芁ずしない衚珟で芋えたす「TKは自分自身に曞きたす-なんず異端...ここで私は所有者ず「幞運」ですが、」圌は悲しげに考え、電源プラグを静かにテヌブルで振った。



第5段階-䜜成



開発はほが完了したした。すべおの瞬間が限界たで明らかにされおいたす。それは奇跡を生み出すために残っおいたす-スペアパヌツのこの山ず、写真、プレヌト、図、図を含む小さなリヌフレットの山から、すべおが始たったものを集めるために。



悲しいはんだごおを぀かんで、コンセントに差し蟌みたす。私たちがスポンゞで刺し傷をきれいにした瞬間に、圌は喜び、ヒスを济び始めたす。はんだを含むフラックスは、テヌブル䞊での友奜的なラりンドダンスによっお導かれたす。倪陜は窓の倖を芋お、ボヌド䞊のスポットはんだ付けスポットSMD抵抗噚を匷調しおいたす。ゆっくりはんだ付けするず寿呜が長くなりたす

















誰もが無関心になるこずのない、最も楜しくお面癜い開発段階。ここで、私たちの目の前で、私たちは誰にずっおも明癜な、䜕か面癜いものを手に入れたす。タブレットである皮の絵を描くこずは芳察者にずっお面癜くないだけでなく、それがどのように発生するかを心から理解できないため、この段階は以前のものず察照的です。そしお...最初のロボットがテヌブルの最初の1センチを通過し、手のひらでテヌブルの端をブロックしたからずいっお、䞁床20センチの端から止たるのはずおもクヌルです。賢い生き物が刀明-これ以䞊先に進むこずができないこずを理解しおいたす

















この段階で、機械構造党䜓を組み立お、ワむダをはんだ付けし、マむクロコントロヌラをプログラムしたす。䜕が起こったかをテストしたす。分かりたせん 思う。TKを修正したす。実際には、実際に曞かれお発明されたものずはたったく異なる方法で刀明するからです。再び議䌚に戻りたす。テスト䞭です。分かりたせん 倱意しないでください。マルチメヌタヌで突いお、攟電したバッテリヌを亀換したす。喜ぶ...























厳密に蚀えば、この段階の最埌に、䞊蚘のドキュメントずずもに結果の再珟性を保蚌するリストを䜜成する必芁がありたす。䞊蚘の倧きなコンポヌネントを匕甚したしたが、泚文時に必芁な「ルヌスパりダヌ」も入れるように頌みたした電源スむッチ、バッテリヌコンパヌトメントを接続するためのコネクタヌ、コネクタヌパッド2.54mm ...

















さらに、ワむダ、はんだ、フラックス、工具などの消耗品が䜜業に䜿甚されたした。技術的なニュアンスがある堎合、それらにも泚意を払う必芁がありたす。











プログラムを2回曞いた。

最初に曞かれたずおりに曞かれたずき。私は積極的にサむトarduino.ruを読みたした。私はもうプログラムを曞きたせんでしたが、構文を理解し、Cを思い出し、プログラムコヌド実行のシヌケンスで絶えず誓いたしたすべおの蚈算ブロックがクロック/ルヌプで動䜜するずき、 1行のみが凊理されたす。



2回目は、厳密に構造的にプログラムの組織に行きたした。これは垞に正圓化されたわけではありたせんが、元のスタむルを蚭定する堎合は、それに埓う必芁がありたす。芁点は...䞊蚘の゜フトりェアモデルの構造をコヌド内で繰り返すこずです。コヌドでは、最初にすべおの倉数を宣蚀し、定数を構成したす。次に、初期化ブロック「void setup」に埓いたす。そしお、メむンサむクル「ボむドルヌプ」が続きたす。そのタスクは、モゞュヌルを継続的にポヌリングするこずです。各モゞュヌルには、その動䜜に圱響する独自の入力倉数ず出力倉数がありたす。メむンルヌプでは、これらの倉数が管理されたす。



問い合わせボタンは、すべおのモゞュヌルの動䜜モヌドを蚭定したす。むンタヌフェむスを介しおコマンドを受信した堎合、オフラむンモヌドが有効になっおいないず、コマンドは他の制埡モゞュヌルに送信されたす。最初は、モヌタヌ制埡ずラむトの2぀のモゞュヌルしかありたせんでした。その埌、サりンド生成モゞュヌルが登堎したしたが、それを䜜成する時間はありたせんでした。ここで、圱響を受けたレむアりト構造-モゞュヌルの远加/陀倖は簡単で明確です倉数宣蚀のブロック、初期化の行、メむンルヌプの行、モゞュヌル自䜓のコヌド。範囲決定モゞュヌルず回転アルゎリズムを実装するモゞュヌルは、必芁に応じお他のモゞュヌルから呌び出されたす。



プログラムテキスト
////////////////////////////////////////////////////////////////////////////////////////////////////////// // Robot Platform RASH 1 AlSHex // 1.0 // // Create: 23/03/2015 // Modification: 11/04/2015 // // Description:    RASH 1 // ////////////////////////////////////////////////////////////////////////////////////////////////////////// // const int LEDtech = 13; //     const int LEDdist = 3; //      const int Sonar_t = 14; //   const int Sonar_r = 15; //   const int Mode = 16; //    -   : =0 - ; 1=   const int MB1 = 4; //  - digital const int MB2 = 5; //  - pwm const int MA1 = 6; //  - pwm const int MA2 = 7; //  - digital const int HDL = 17; //    const int SPK = 11; //    //const int LGHT = ; //    //   const long UART_Speed = 9600; // UART //   const int D1 = 20; //         const int D2 = 110; const float A = 2.5; const float B = 305; //   const byte Byte_forward = byte('W'); //:  const byte Byte_back = byte('S'); //:  const byte Byte_left = byte('A'); //:  const byte Byte_right = byte('D'); //:  const byte Byte_stop = byte('x'); //:  const byte Byte_sound = byte('C'); //:  / const byte Byte_light = byte('V'); //:  const int Dist_min = 40; // ,        [] const int Cycle_lightoff = 1000; //-            const int Speed_default = 255; //  ,         ,            //  const int Delay_prog = 10; //   , [] const int M_stop = 0; //    (  ) const int M_forward = 1; const int M_back = 2; const int M_left = 3; const int M_right = 4; //    -  //========== Interface ========== void _UART_Interf(unsigned int RST, unsigned int *Data); //  : Data[0]=1 -  ; Data[1] -   //RST - : 0=  ; 1=  //Data -    : Data[0]=1 -  ; Data[1] -   // //  UART     Serial //========== Motor ========== void _Motor(unsigned int RST, unsigned int Mode, unsigned int Speed); //RST - : 0=  ; 1=  //Mode -  : 0= ; 1=  ; 2=  ; 3=  ; 4=   //Speed:    - ,  : 0=  ; 255=   // //MA1, MA2, MB1, MB2 -   , MB1  MA2 - , MB2  MA1 -  (0/255) //LEDtech -      ,          "" //========== Sonar ========== unsigned int _Sonar(unsigned int RST); //RST - : 0=  ; 1=  // //Sonar_t -      Trig //Sonar_r -      Echo //LEDdist -  (0/255)    ,     -    -   ,      //========== Control Motor ========== void _ControlM(unsigned int RST, unsigned int SCTRL, unsigned int DCTRL, unsigned int Mode); //RST - : 0=  ; 1=  //SCTRL -    DCTRL: 0= ; 1=  //DCTRL -  ()    //Mode -  : 0=   ; 1=   // //    Sonar, Motor  Rotate //LEDtech -      ,   1       //========== Control Light ========== void _ControlL(unsigned int RST, unsigned int SCTRL, unsigned int DCTRL, unsigned int Mode); //RST - : 0=  ; 1=  //SCTRL -    DCTRL: 0= ; 1=  //DCTRL -  ()    //Mode -  : 0=   ; 1=   // //HDL -      : 0=  ; 1=   //========== Control Sound ========== void _ControlS(unsigned int RST, unsigned int SCTRL, unsigned int DCTRL, unsigned int Mode); //RST - : 0=  ; 1=  //SCTRL -    DCTRL: 0= ; 1=  //DCTRL -  ()    //Mode -  : 0=   ; 1=   // //SPK -  (0/255)       //========== Rotate ========== -  ,      ControlM   void _Rotate(unsigned int RST, unsigned int Speed); //RST - : 0=  ; 1=  //Speed:    - ,  : 0=  ; 255=   //  unsigned int CMD[2] = {0,0}; //  : CMD[0]=1 -  ; CMD[1] -   unsigned int CTRL[8] = {0,0,0,0,0,0,0,0}; //   //CTRL[0]: 0=  ; 1=   //CTRL[1]: 0=  ; 1=   void setup() { // pinMode(MB1, OUTPUT); digitalWrite(MB1, LOW); pinMode(MB2, OUTPUT); analogWrite(MB2, 0); pinMode(MA1, OUTPUT); analogWrite(MA1, 0); pinMode(MA2, OUTPUT); digitalWrite(MA2, LOW); pinMode(Sonar_t, OUTPUT); digitalWrite(Sonar_t, LOW); pinMode(Sonar_r, INPUT); digitalWrite(Sonar_r, LOW); pinMode(LEDdist, OUTPUT); analogWrite(LEDdist, 0); pinMode(Mode, INPUT); digitalWrite(Mode, LOW); pinMode(LEDtech, OUTPUT); digitalWrite(LEDtech, LOW); pinMode(HDL, OUTPUT); digitalWrite(HDL, LOW); pinMode(SPK, OUTPUT); analogWrite(SPK, 0); //   Serial.begin(UART_Speed); _UART_Interf(1, CMD); _UART_Interf(0, CMD); _Sonar(1); _Sonar(0); _Motor(1, 0, 0); _Motor(0, 0, 0); _Rotate(1, 0); _Rotate(0, 0); _ControlM(1, 0, 0, 0); _ControlM(0, 0, 0, 0); _ControlL(1, 0, 0, 0); _ControlL(0, 0, 0, 0); _ControlS(1, 0, 0, 0); _ControlS(0, 0, 0, 0); } void loop() { //       if (digitalRead(Mode) == LOW) { if (CTRL[1] == 1) { CTRL[0] = 1; } else { CTRL[0] = 0; } //     ,    reset      ,  .  reset  CTRL[1] = 0; } else { if (CTRL[1] == 0) { CTRL[0] = 1; } else { CTRL[0] = 0; } CTRL[1] = 1; } // ,     D_Interf _UART_Interf(CTRL[0], CMD); //   //  _ControlM(CTRL[0], CMD[0], CMD[1], CTRL[1]); //  _ControlL(CTRL[0], CMD[0], CMD[1], CTRL[1]); //  _ControlS(CTRL[0], CMD[0], CMD[1], CTRL[1]); delay(Delay_prog); } //========== Interface module ========== void _UART_Interf(unsigned int RST, unsigned int *Data) { unsigned int DUART; static unsigned int cnt_byte; if (RST == 0) { if (Serial.available() != 0) { DUART = Serial.read(); switch (cnt_byte) { //  ,     -         case 0: if (DUART == byte('t')) { cnt_byte++; } else { cnt_byte = 0; } Data[0] = 0; Data[1] = 0; break; case 1: if (DUART == byte('x')) { cnt_byte++; } else { cnt_byte = 0; } Data[0] = 0; Data[1] = 0; break; case 2: if (DUART == byte('_')) { cnt_byte++; } else { cnt_byte = 0; } Data[0] = 0; Data[1] = 0; break; case 3: if (DUART == byte('c')) { cnt_byte++; } else { cnt_byte = 0; } Data[0] = 0; Data[1] = 0; break; case 4: if (DUART == byte('o')) { cnt_byte++; } else { cnt_byte = 0; } Data[0] = 0; Data[1] = 0; break; case 5: if (DUART == byte('m')) { cnt_byte++; } else { cnt_byte = 0; } Data[0] = 0; Data[1] = 0; break; case 6: if (DUART == byte('=')) { cnt_byte++; } else { cnt_byte = 0; } Data[0] = 0; Data[1] = 0; break; case 7: //   ,        cnt_byte = 0; Data[0] = 1; Data[1] = DUART; break; } } else { Data[0] = 0; Data[1] = 0; } } else { cnt_byte = 0; Data[0] = 0; Data[1] = 0; } } //========== Sonar module ========== unsigned int _Sonar(unsigned int RST) { unsigned int Duration; if (RST == 0) { digitalWrite(Sonar_t, HIGH); //    delayMicroseconds(10); digitalWrite(Sonar_t, LOW); Duration = pulseIn(Sonar_r, HIGH); //     (   ) //    if (Duration/58 > D1 && Duration/58 < D2) { analogWrite(LEDdist,int((-A*float(Duration/58)+B))); } else { if (Duration/58 < D1) { analogWrite(LEDdist, HIGH); } else { analogWrite(LEDdist, LOW); } } return Duration/58; //    } else { digitalWrite(LEDdist, LOW); return 0; } } //========== Control Motor module ========== void _ControlM(unsigned int RST, unsigned int SCTRL, unsigned int DCTRL, unsigned int Mode) { unsigned int Dist; static unsigned int Speed; static unsigned long Time_forward; if (RST == 0) { if (Mode == 0) { //""     if (SCTRL == 1) { //   switch (byte(DCTRL)) { //  case Byte_forward: Dist = _Sonar(0); if (Dist > D1) { _Motor(0, M_forward, Speed); } //    -  break; case Byte_back: _Motor(0, M_back, Speed); break; case Byte_left: _Motor(0, M_left, Speed); break; case Byte_right: _Motor(0, M_right, Speed); break; case Byte_stop: _Motor(0, M_stop, Speed); break; default: break; } if (DCTRL > 47 && DCTRL < 58) { //  Speed = (DCTRL-47)*25+5; digitalWrite(LEDtech, HIGH); delay(1000); digitalWrite(LEDtech, LOW); } } } if (Mode == 1) { //  Speed = Speed_default; Dist = _Sonar(0); if (Dist > Dist_min) { if (millis()-Time_forward < 21000) { _Motor(0, M_forward, Speed); } else { // 20    ,    , ..     . _Motor(0, M_stop, Speed); delay(300); _Motor(0, M_back, Speed); delay(600); _Motor(0, M_stop, Speed); delay(300); _Rotate(0, Speed); _Motor(0, M_stop, Speed); delay(300); Time_forward = millis()-1; //-1  ,  millis()-Time_forward      } } else { _Motor(0, M_stop, Speed); delay(300); _Rotate(0, Speed); delay(300); Time_forward = millis()-1; } } } else { Dist = 0; Speed = Speed_default; Time_forward = 0; _Sonar(1); _Motor(0, 0, 0); _Rotate(1, 0); digitalWrite(LEDtech, LOW); } } //========== Control Light ========== void _ControlL(unsigned int RST, unsigned int SCTRL, unsigned int DCTRL, unsigned int Mode) { static unsigned int Light; // 0=  ; 1=   if (RST == 0) { if (Mode == 0) { //""     if (SCTRL == 1) { //   switch (byte(DCTRL)) { //  case Byte_light: if (Light == 0) { Light = 1; digitalWrite(HDL, HIGH); } else { Light = 0; digitalWrite(HDL, LOW); } break; default: break; } } } if (Mode == 1) { //  //block operations } } else { Light = 0; digitalWrite(HDL, LOW); } } //========== Control Sound ========== void _ControlS(unsigned int RST, unsigned int SCTRL, unsigned int DCTRL, unsigned int Mode) { if (RST == 0) { if (Mode == 0) { //""     if (SCTRL == 1) { //   switch (byte(DCTRL)) { //  case Byte_sound: //block operations break; default: break; } } } if (Mode == 1) { //  //block operations } } else { analogWrite(SPK, 0); } } //========== Motor module ========== void _Motor(unsigned int RST, unsigned int Mode, unsigned int Speed) { if (RST == 0) { switch (Mode) { //      case 0: //stop digitalWrite(LEDtech, LOW); digitalWrite(MB1, LOW); analogWrite(MB2, 0); analogWrite(MA1, 0); digitalWrite(MA2, LOW); break; case 1: //forward digitalWrite(LEDtech, HIGH); digitalWrite(MB1, HIGH); analogWrite(MB2, 255-Speed); analogWrite(MA1, Speed); digitalWrite(MA2, LOW); break; case 2: //back digitalWrite(LEDtech, HIGH); digitalWrite(MB1, LOW); analogWrite(MB2, Speed); analogWrite(MA1, 255-Speed); digitalWrite(MA2, HIGH); break; case 3: //left digitalWrite(LEDtech, HIGH); digitalWrite(MB1, LOW); analogWrite(MB2, Speed); analogWrite(MA1, Speed); digitalWrite(MA2, LOW); break; case 4: //right digitalWrite(LEDtech, HIGH); digitalWrite(MB1, HIGH); analogWrite(MB2, 255-Speed); analogWrite(MA1, 255-Speed); digitalWrite(MA2, HIGH); break; default: break; } } else { digitalWrite(LEDtech, LOW); digitalWrite(MB1, LOW); analogWrite(MB2, 0); analogWrite(MA1, 0); digitalWrite(MA2, LOW); } } //========== Rotate ========== -   void _Rotate(unsigned int RST, unsigned int Speed) { unsigned int Dist; static unsigned int Num; unsigned int cnt; unsigned long Now_time; if (RST == 0) { do { if (Num%2 == 0) { //  if (Num >= 0 && Num < 128) { _Motor(0, M_right, Speed); delay(100); _Motor(0, M_stop, Speed); delay(100); } if (Num >= 128 && Num < 255) { _Motor(0, M_right, Speed); delay(200); _Motor(0, M_stop, Speed); delay(100); } } else { if (Num >= 0 && Num < 128) { _Motor(0, M_left, Speed); delay(250); _Motor(0, M_stop, Speed); delay(100); } if (Num >= 128 && Num < 255) { _Motor(0, M_left, Speed); delay(150); _Motor(0, M_stop, Speed); delay(100); } } cnt++; Dist = _Sonar(0); } while (Dist < Dist_min && cnt <= 3); //      3   ( .            - -  Num) cnt = 0; Now_time = millis(); //  while (Now_time > 255) { //  Now_time -= 255; } Num += Now_time; //   : + while (Num > 255) { //     Num -= 255; } } else { Dist = 0; Num = 0; cnt = 0; Now_time = 0; _Motor(1, 0, 0); _Sonar(1); } }
      
      









第6段階-䜜成の理解



私たちは䜕をしたかったのですか

芋おみたしょう







䞀般的に、それは䜕もないようです。 乗りたす。 止たりたす。 玡瞟。 しかし...すべおがそんなに良いわけではありたせん。 ロボットは「2階」なしで非垞に粟力的に運転したすが、2階を蚭眮するず、明らかに「退屈したす」。 さらに、圌は絶えず巊に連れ去り、人生の1぀にずっお本圓に悪いこずをほのめかしたす。そしお、圌がそれをしたので、この非垞に...さたざたな皮に参加するこずは玠晎らしいこずです。



たずめるず、開発するものがたくさんあるこずを正盎に認めるこずができたす。



1ロボットは垞に盎線運動で巊にピックしたす。 電源の攟電が匷いほど、偏差は倧きくなりたす。 明らかに、これぱンゞンパラメヌタヌの広がりによるものであり、おそらく゚ンゞンドラむバヌチャネルの異なる動䜜によるものです。 ロボットのこの動䜜をなくすには、光孊匏゚ンコヌダヌを接続し、そこから情報を受け取っお、前進たたは埌退するずきに゚ンゞン制埡モゞュヌルのアルゎリズムを調敎する必芁がありたす。 さらに、電源には統合された電圧レギュレヌタが必芁です。たずえば、降圧電圧コンバヌタを䜿甚しおLi-ION゚レメントのペアに電力を転送できたす。



2ロボットは、倚くの堎合、前方の物䜓を認識したせん。 これは、超音波距離蚈の芖野角が狭いためです。 明らかに、2぀たたは3぀の超音波センサヌを蚭眮するこずで、物䜓たでの距離を決定する粟床ず信頌性を向䞊させるこずができたす。 距離を決定するために、センサヌは短い䌑止時間で連続的に調査され、超音波信号の盞互反射の圱響を排陀したす。



3ファヌムりェアバヌゞョン1.0で数回、回転アルゎリズムがハングする状況がありたした-ロボットは絶えず回転し、前方に障害物がなくおも前進したせんでした。 ロボットが匷制的に自由な方向に保持されるず、しばらくするず正垞に動䜜し始めたす。 このような状況を排陀するには、問題が発生した堎合のロボットの匷制再初期化により、ロボットの動䜜の自己蚺断の基準を拡匵する必芁がありたす。 MKのハングを回避するには、WatchDogを䜿甚する必芁がありたす。



4リモヌト制埡䞭に、モヌションを蚭定するキヌボヌドのボタンを攟した埌、ロボットが停止しなかった堎合に、状況がよく発生したす。 その埌、移動ボタンをすばやく抌しお離す必芁がありたした。 おそらく、停止コマンドが受信バッファヌで倱われたのか、おそらくコマンドはルヌタヌから発行されなかったのでしょう。 このような状況を解消するには、モヌションボタンを離すずきに、ルヌタヌから連続しお数回停止コマンドを発行する必芁がありたす。



5MKのファヌムりェアを䜜成する堎合、プログラムの順次実行により詳现が決たりたす。 「forward」コマンドを実行するには、むンタヌフェむスモゞュヌルに順次問い合わせ、範囲を決定、制埡し、モヌションモゞュヌルを呌び出す必芁がありたす。 このような調査では、範囲決定モゞュヌルは最倧50ミリ秒の遅延を導入し、着信コマンドの決定を犁止したす。 機胜の過床の成長や远加の範囲モゞュヌルの出珟の堎合、遅延は受け入れられなくなる可胜性がありたす。 FPGAにはこのような問題はありたせん。すべおのブロックは垞に䞊行しお動䜜したす。 ある時点で、コマンドを取埗し、範囲を凊理しおLEDに衚瀺し、他の倚くの操䜜を実行するこずが蚱可されおいたす。 MKでは、無関係な関数を盞互に䞊列実行するこずも䞍可胜であるか、倖郚むベントに垞に割り蟌みを䜿甚する必芁がありたすが、これは必ずしも䟿利ではありたせん。 ただし、FPGA甚のファヌムりェアの開発は、本質的に時間のかかる䜜業であり、特定のスキルが必芁です。 ほずんどすべおのプログラマヌがCコヌドを䜜成でき、VHDL / Verilogでコヌドを䜜成するには、チップロゞックの本質を理解する必芁がありたす。



6リモヌトコントロヌルでは、オンボヌドカメラからの画像の倉化が倧きすぎるため、宇宙での向きを決めるのが難しくなりたす。 この効果を枛らすには、衚瀺りィンドりのスムヌゞングや瞮小を適甚する必芁がありたす。



7テストの過皋で、機械郚品の蚭蚈の倱敗が明らかになりたした。 党負荷時プラットフォヌム+「2階」、プラットフォヌムのダむナミクスが䜎䞋し、コヌナリング時にきしみ音が聞こえたす。 おそらく、電源電圧を䞊げるこずで状況を修正できたす。 さらに、蚭蚈が䞍十分なため、ボヌルベアリングのコヌナリングやグリヌス補絊が圹に立たない堎合、埌茪が頻繁に詰たるこずがありたす。



8前方に移動するずきの最倧速床での手動制埡により、必芁に応じお停止し、埌方に玠早く移動するず、サポヌトのバックポむントが地面から匕き裂かれながら、ロボットが急激に前方に傟く可胜性がありたす。



そしお今、私たちは䜕をしたすか



1オヌディオ信号の発行の実装-特定の呚波数のオヌディオ信号発生噚の開発。

2車茪に光孊センサヌず光孊゚ンコヌダヌを䜿甚しお、盎線運動で車茪の速床を調敎したす。

3光センサヌを䜿甚した自動オン/オフヘッドラむトの実装。

4超音波センサヌを3぀に増やすこずにより、前方の物䜓たでの距離を決定する信頌性を向䞊させたす。

5暙準サむズ18650の2぀のリチりムむオン電池ず統合電圧レギュレヌタに基づく電源。

6゚ンゞンギアボックスを分解しおシリコングリヌスで最滑し、きしみ音をなくしたす。

76.0-7.5Vぞの䟛絊電圧の増加を評䟡したす。 同時に、MK出力の最倧出力電流を超えないように、LEDの抵抗を再カりントしおはんだ付けする必芁があるこずを考慮しおください。

8運動速床の滑らかな倉化を実珟するための状態の急激な倉化運動の開始たたは停止の間、倉化関数は線圢たたは指数関数的です。



第7段階-開発



「第2段階」に進みたす








さお、ここに我々はいる、そしお物語党䜓のフィナヌレに達した。



私はロボットの実蚌に成功し、サポヌト文曞、特定された欠点の説明、およびそれらに察凊する方法を手枡したした。 私の意芋では、これらの技術的な説明ず参照甚語に粟通しおいるず、「内郚」の電子機噚の動䜜を正しく理解し、「埮劙な」技術的な問題の倧郚分を陀去できるはずです。 誰もが満足しおいたようです。

残念ながら、Enduranceの開発に真剣に参加するのに十分な時間があるずは限りたせん。 私の知る限り、同瀟は興味を持っおおり、ある皋床、独立した開発者を探しおいたす。このトピックに興味があるだけでなく、ロボット工孊に参加する経隓、機䌚、欲求がある堎合は、そこに歓迎されるでしょう。



もちろん、このバヌゞョンでのロボットの䜿甚は、いく぀かの産業タスクの芳点から皮肉な光で芋られたす。 ただし、このプラットフォヌムは䟿利です。 遠隔監芖を目的ずしお、このようなロボットを囜内に蚭眮できたらいいず思いたす。 サヌボドラむブを取り付けお、ビデオカメラを回転させ、電源システムを考え盎せば、家の状況をい぀でも調べるこずができたす。 そしお、窓蟺に乗っお窓に行くずはい、少なくずもボヌドを眮いお、傟斜した平面を䜜りたす、家の倖に出たす。



バッテリヌをLi-IONバッテリヌず亀換するず、問題なく充電できたす。 同様のコントロヌラヌが既補で利甚可胜です。 このようなロボットの最初のバヌゞョンでは、怜査埌、充電ステヌションに手動で簡単に調敎でき、たずえば小型の電磁石を䜿甚しおコンタクタを接続したすオフハンド䞀般的に、ロボットは切り替え時に䞻電源に切り替えられ、バッテリヌは絶瞁されたす配線図ず自埋充電。 ロボットの2番目のバヌゞョンでは、自分でそれを行う方法を教えるこずができたす-充電ステヌションに合わせお「駐車」ボタンを抌したすオフ駐車タヌゲットの䞭倮に明るい圢を描くこずができ、ロボットは色怜出センサヌによっお誘導され、倜にすべおがヘッドラむトで匷調衚瀺されたす。



ロボット工孊で頑匵っおください

始めるこずを恐れないでください。



All Articles