私はそれがそのように私をひねるとは思わなかったが、ロボット工学のかなり鋭い攻撃が起こった。 さて、自尊心のある犠牲者のように、私はできるだけ多くの人々に感染しようとします。
狂気がどのように発展したか、私は記事で説明することにしました。 長いことが判明しましたが、誰かが興味を持つかもしれません。 この記事は、ロボット工学をまだ練習していない人を対象にしていると思います。
結果は次のとおりです。 ビデオはビンテージで、iPhoneの所有者が撮影したもので、結局彼らは芸能人です。 音を画面外に意図的に残したので、すべてが本物のようにざわめきました。
歌詞
次の数段落はもっぱら叙情的であり、厳しい技術的な読者は読み飛ばすことができます。
すべてはオフィスでの昼食から始まりました。 私たちは何人かいましたが、1人の従業員が趣味があるかどうか尋ねました。 私たちは考え、考え、突然誰も趣味を持っていないことに気づきました。 もちろん、プログラミングへの渇望があり、スポーツ、家族、友人がいますが、マッチから家を引っ張ったり、ボートを切ったり、切手を集めたりすることはありません-いいえ、これは起こりませんでした。 欲やその他の感情からは知りませんが、好きなものがないという考えが頭に残っています。 上昇、仕事への道、仕事への道、家への帰り道、家族との最大1時間(誰もがビジネスをしています!)、睡眠...夜、明らかに何らかのリセットが発生し、翌朝新しい反復が始まります。 その従業員は、私の頭の中にフィードバックを載せた投稿を固執するようでした。 そして私だけではありません。 その夕食の犠牲者は、すぐに明らかになったので、2人でした。 二人にとって興味のあるトピックはロボット工学でした。 子供の頃、私はアマチュア無線家でした。私は研究所を卒業し、ロボット、ロボットシステム、複合体の学位を取得し、現在はソフトウェア開発者です。 このような趣味は私のためだけに作られています。 以前どこに行ったことがありますか?
オフィスでは、ロボットとRoboBattaの作成を呼びかけましたが、ボランティアはいませんでした。 共感者はいましたが、残った参加者は2人でした。 私たちは誰もが自分のロボットを作ることを決め、指定された日付(締め切りは約2か月です)に、私たちは戦いで衝突するでしょう。 美意識と暴力の拒絶により、私たちはIRガンとIRレシーバーを支持して、ハンマー、グラインダー、その他の野な道具を捨てざるを得なくなりました。 時間が経つにつれて、ロボバタのアイデアは私に感動しなくなりましたが、今はロボット(もちろん私の魅力)とその開発のための多くの計画を持っているので、私はロボバトルを保持するという事実が本当に時間通りに私を刺激しました。 それは大きな動機であり、彼は時間を求めて急ぎました。
建築
さて、ここまでです。 ロボットの製造がどのように進んだか、どのような問題に遭遇し、どのように解決したか、そして私にとって最も一般的な質問、つまりどれだけの費用がかかるかを説明したいと思います。
最初は、ロボットの制御システム(将来の脳内)にArduinoプラットフォームを使用すると想定していました。 私の「相手」は同じ道を進んでいた。 このトピックは私たちにとっては新しいものだったので、インターネットを調べてみると、Arduinoの世界には、イーサネットシールド、Bluetoothシールド、モーターシールド、ジャイロスコープ、加速度計、そして私たちのようなオタクに役立つかもしれない他のセンサーやインターフェイスカードがすべて揃っていることがわかりました。 しかし、ロボットに便利なノードを探すほど、すでに持っていると確信するようになりました。 スマートフォンで。 Android 2.3.4を搭載したHTC Sensationを搭載しています。 そして、すでにあります:Bluetooth、WiFi(WiFiルーターも)、カメラ、懐中電灯、巨大なディスプレイ、サウンド、マイク、microUSB、メモリ、ジャイロスコープ、コンパス。 そして、ここで私は私のロボットの脳がスマートフォンに移動することにしました。 そして、Arduinoは脊髄の機能を実行します。 それらがコマンドを受け入れ、実行し、センサーからデータを収集できるようにして、それらを脳に送信できるようにします。
このアーキテクチャソリューションには大きなマイナス点があります-記事の最後では、ロボットのコストにスマートフォンのコストを含める必要がありますが、既にスマートフォンを持っているため、彼がくれたプラスを渡すことができませんでした。 さらに、仕事中のAndroid OSのプログラミングのトピックに興味があり、そのようなソリューションが役に立ちました。 私のロボットはまだ自律アクションの準備ができていません。これはプロジェクトのさらなる開発のトピックです。そのため、ロボット制御で別の層が生まれました-制御コマンドを生成し、TCPソケットを介してAndroidアプリケーションに転送する単純なクライアントプログラムです。 このようなプログラムは、TCPソケットを介して接続を確立できる場合にのみ、任意のプラットフォーム向けに作成できます。 これで、XNAを使用して簡単な.NETアプリケーションを作成しました。 ロボットを制御するには、XBOX 360ゲームパッドを使用します。
機能
誰が何かをしているのかスケッチします。
Arduinoスケッチ機能:
- Androidアプリケーションとの接続を確立します。
- Androidアプリケーションから受信したコマンドの受信と実行。
- ロボットセンサーからの信号の受信と、Androidアプリケーションへのこれらの信号の送信。
Androidアプリの機能:
- Arduinoスケッチへの接続を確立します。
- .NETアプリケーションとの接続を確立します。
- .NETアプリケーションからコマンドを受信します。
- Arduinoレベル向けではない、受け入れられたコマンドの一部の実行。 たとえば、サウンドの再生、ヘッドライト(カメラのフラッシュ)のオン、スマートフォンのディスプレイの顔の変更など。
- Arduinoへのコマンド転送。
- Arduinoからのセンサーの信号の受信。
- センサー信号への応答。 たとえば、IRガンからのショットがロボットに当たったときにサウンドを再生します。
- .NETアプリケーションへのセンサー信号の送信。
.NETアプリケーションの機能:
- Androidアプリケーションとの接続を確立します。
- 入力処理(XBOX 360ゲームパッド)。
- チームビルディング。
- コマンドをAndroidアプリケーションに転送します。
- Androidアプリケーションからセンサー信号を受信します。
- ロボットの現在の状態を表示します。
Javaのプログラミング(Androidアプリケーションのレベル)が新しいことを除いて、関数のソフトウェア実装に大きな問題はありませんでしたが、これらは私の個人的な困難です。 Arduinoのスケッチは問題を引き起こしませんでした-非常に単純な言語(配線)、非常に許容できる開発環境。 私がいじらなければならなかったのは、ロボットを制御することでした。 アプリケーションをC#で作成しましたが、それでも非常にシンプルでシンプルですが、ロボット制御アルゴリズムを2回修正する必要がありました。すぐに適切なロボット制御を達成できませんでした。 しかし、私は自分より先に進んでいます。それについては下に書きます。
私の計画
締め切りはかなり短いか、とても遅かったので、次の計画を立てました。
- Arduinoコントローラーをマスターする。
- カートの組み立て、電子機器の取り付け。
- Arduinoプログラミング、スタンドアロンのコマンド実行。
- USB PCを介したカート制御。
- ArduinoをAndroidスマートフォンに接続します。
- コマンドをPCからスマートフォンに転送します。
- 銃とヒットセンサー。
- 最終組み立て。
- ヘアスタイル、ドキュメント。
Arduino Controllerをマスターする
「ウォームアップ」のための計画の最初の項目が必要でした。 Arduinoが何であるかを理解し、開発環境をインストールし、新しい言語に慣れ、いくつかのテストスケッチを書く必要がありました。 実験用に、既製の
「マトリョーシカX」セットを購入しました。 リンクを商業広告として受け取らないでください。しかし、Amperkaは非常に便利なリソースであることが判明しました。 多くのトレーニング情報、ビデオチュートリアル、フォーラムがあります。 LEDで十分に遊んだら、次に進みましょう。
カートの組み立て、電子部品の取り付け
私がロボットのモバイルプラットフォームに求めていたのは、アパートでの操作に便利なほど小さく、遊び心があり、出会った延長コードのカーペット、敷居、およびワイヤーは、それにとって不可避な障害ではなかったことです。 もちろん、Arduinoの電子機器とスマートフォン用の十分なスペースが必要です。 このすべての下に、そのような
四輪プラットフォームが見事に登場しました。
ギアボックス付きの4つのモーターに加えて、電気技師のプラットフォームセットには、トグルスイッチと外部電源コネクタが含まれています。 このコネクタはArduino Uno電源コネクタと互換性があり、後でテストする際に非常に役立ちました。
これがカートの最初の写真です。

付属のホルダーには、5本の単三電池が取り付けられています。 後で判明したように、4つのエンジン、2つのサーボ、および電子機器のバッテリーを見逃し始めました。 そして、カートの魅力がすべて明らかになりました。 12ボルトのNi-MHバッテリーパックを手に入れました。 そのため、標準の5 AAホルダーの代わりに、それぞれ10個のAA缶の2つのバッテリーアセンブリがトロリーに収まることがわかりました。 これらは20個のAA缶です! アセンブリを並列にオンにして、12 Vと2200 mAhを取得しました。 確かに、このミニモンスターの充電器にお金を費やさなければなりませんでした。 また、外部電源コネクタが役立ちました。 ロボットのバッテリーを充電するために使用します。

プラットフォームの追加の楽しいボーナスは、サーボドライブを取り付けるための定期的な場所です。
私が出会ったトロリーの唯一の欠点は、ギアシャフトに車輪が緩く取り付けられていることでした。 組み立てる際、ホイールマウントは信頼できるように見えましたが、カーペット上でのロボットの最初のテスト中に、ホイールが脱落し始めました。 ホイールのデザインはそれをねじ込むことを意味しませんでした-ぴったりとフィットするため、ホイールを接着したくなかったので、普通のネジでそれらをドリルしてギアボックスシャフトに固定しなければなりませんでした。 幸いなことに、ギアボックスのシャフトには穴があります。

Arduinoプログラミング、スタンドアロンコマンド実行
そのため、次のステップでは、プラットフォームから動きを取得したかったのです。 このために、「Freeduino.ru」から「
Motor Shield v3」を購入しました。 4つのDCモーターまたは2つのステッピングモーターを制御でき、2つのサーボ用のコネクタもあります。 さらに、モーターシールドはSPIをサポートします。 それから私は、冗長でさえ素晴らしいオプションであるように思えました-私は2つのサーボと2つのDCモーターのみを制御する必要がありました(左右の場合、フロントとリアのモーターは並列に接続されています)。 さらに、私はなんとかモーターとサーボを制御し、私の計画のこの項目も閉じました。
「Motor Shield v3」の問題は後で始まりました。 スマートフォンとペアリングするためにDFRobotからUSB Host Shieldを購入したとき、使用されているArdunoデジタル出力に関して競合が発生し始めました。 このモーターシールドの通常の制御モードを試してみました。SPI-達成した最高の方法は、モーターとサーボの制御でしたが、無料の出力はありませんでした。 しかし、それでも赤外線銃を制御する必要がありました。 私が理解したように、問題は純粋にソフトウェアにありました。 私が使用したライブラリは、freeduino.ruにあります。 それらの日付は2009年12月です。 このサイトは、SPIを使用するためのライブラリの変更がステッピングモーターでテストされていないことを示していますが、近い将来、それを行うことを約束します。 そして、神は彼らと一緒にいるでしょう、これらのステッピングモーターで、図書館の日付は2009年だけです。 プロジェクトは中止されたようです。 私はソースを正直に見て、ため息をつき、私は本当にそれを掘り下げたくないことに気づきました。 別の時間。 もちろん、1台のサーボドライブだけで管理できましたが、自分を制限したくはありませんでした。
理論的には、2つのエンジンを制御するには、コントローラーの4つの脚が必要です。さらに2つのサーボが必要です。1つはIR銃から発射し、4つはUSBホストシールドを制御します。 合計11本の脚。 私はゼロと最初のレッグを使用しませんでした-これらはArduino UnoシリアルポートのTXとRXです。 一般的に言って、それらは使用できますが、私が理解しているように、このベンチャーは危険です-コントローラを再プログラムする準備をする必要があります。 だから、私はこれらの足を放った。 Arduino Unoの13本の脚すべてを調べたことがわかりました。 これは、「モーターシールドv3」がエンジンごとに2本の脚または私が故障した4本の脚のSPIバスを使用するように強制するためです。
別のモーターシールドを購入しなければなりませんでした。 メーカーDFRobot。 名前は特に独創的ではありません:
「Arduinoの2Aモーターシールド」 しかし、それは単純であり、制御のために4つのArduinoデジタル出力のみが必要です(そのうち2つはPWMを使用する必要があります)。 完成したライブラリでさえ必要ありません。 確かに、サーボ用のコネクタはありませんが、これらは些細なことです。
USB PCを介したカート制御
このステップでは、ロボットコマンドシステムを作成し、Arduinoスケッチのほぼ最終バージョンを入手したと言うかもしれません。 USBポート経由で接続すると、Arduinoは通常のシリアルポートのように接続します。 それへのコマンドは、どのターミナルクライアントからでも送信できます。 最初は、Arduino IDEの一部であるシリアルモニターを使用しました。 チームをすばやく投入するのにうんざりし、テスト用に3つのスライダー(エンジンと水平サーボドライブの制御用)を備えたWinFormアプリケーションを作成しました。これにより、スケッチを確認し、ロボット制御で最初の実験を行うことができました。
コマンドシステムは単純です。すべてのコマンドは5文字で、最初の2文字がコマンド自体を表し、残りの3文字(デジタル)がパラメーターの値を決定します。 例:
LF190-左エンジンは前方(左前方)で速度は190(速度は000〜255に設定)。
HH045-ヘッドの水平回転角度(ヘッド水平)を45度に設定します。
ArduinoをAndroidスマートフォンに接続する
それから私は学び、苦しめなければなりませんでした。 最初は、ArduinoをAndroidに接続するのはWindowsに接続するのと同じくらい簡単だと思いました。 Androidアプリケーションでは、シリアルポートを受け取り、Arduinoのコマンドをそのポートに書き込みます。 簡単に機能しませんでした。 AndroidデバイスのCOMポートはどこか遠くに隠れていることがわかります。 私は何かを理解していなかったことを認めます-私は研究のための時間を持っていませんでした。 問題を研究して、プロジェクト
「android-serialport-api」を見つけました。 HTC電話のシリアルポートのアクティブ化に関するセクションもあります。 そして、夢、魔法、ヒーローの3つのモデルが考慮されます。 私のものはここにはありません。 他に私を止めたのは、アクティベーションのために最初にすることは「あなたの電話をルート化する」ことでした。 私は自分の携帯電話をわだち掘りしていません、そして今のところ私は本当に行きません。
そのため、私は自分が見つけた別のものに沿って進みましたが、すでにすべての人がかなり踏み込んだ道である
Android Open Accessory Development Kitです。 DevGuideでは、すべてが十分に詳細に記述されていますが、私が気に入らなかったのは、そこに与えられたDemoKitのクレイジーな例だけでした。 例には、接続、接続の定義、データ転送、受信、複数のLEDの制御、モーター、ジョイスティックの操作、非常に洗練された(少なくとも私にとって)アクティビティなど、一度にできるすべてが含まれます。 Androidアプリで。 最初の呼び出しからサンプルのソースコードを習得していないので、
簡単なバージョンが見つかり、すぐにすべてが適切に配置されました。
DFRobotからUSB Host Shieldを購入してインストールした後、AndroidアプリケーションからArduinoスケッチにコマンドを転送できましたが、すぐに2つの問題に直面しました。 上記の1つは、最初のモーターシールドとの何らかの競合です(freeduino.ruのモーターシールド制御ライブラリに問題があると確信しています)。 しかし、2番目はまだ解決できませんでした。 誰かが私に何をすべきかを教えてくれたら素晴らしいでしょう。 USBホストシールドは、USB接続のホストです(この結論については申し訳ありません)。 つまり、電力はUSBホストシールドからスマートフォンに供給されます。 そして、私の生い茂ったスマートフォンは、Kroneバッテリーまたは5本の単三電池で栄養失調に陥るカートを過食し始めます。 そこで、電池を入れるというアイデアが生まれました。 12 Vと2200 mAhは、モーター、サーボ、スマートフォンに電力を供給する上で非常に役立ちますが、この食物連鎖からスマートフォンを除外したいのです。 電話オプションには何も見つかりませんでした。 電話機を再度ルート化しないと、ソフトウェアソリューションは存在しないようです。 それから私は問題に対するハードウェアソリューションしか持っていませんでした。 USBケーブルには、電源、アース、送信ライン、受信ラインの4つのラインが含まれています。 最初のアイデア-食べ物を切る-は失敗しました。 その後、スマートフォンはUSBホストへの接続の検出を停止します。 インターネットでもう一度調べてみると、この問題を解決した人が見つかりました。
サイモンモンクは、Arduinoの同様のバンドルでUSBホストシールドに接続すると、Nexus Oneの充電をオフにすることができました。 これを行うために、彼はUSBケーブルの電力線のコンテキストで1kΩの抵抗を取り付けました。 接続の定義(アクセサリ検出)がすでに機能しており、電話の充電がまだ開始されていないときに、彼は経験的にこの抵抗を受けました。
ラインのセクションにキロオームの抵抗を入れて、スマートフォンを接続しようとしました。 接続が検出され、スマートフォンのバッテリーの充電がすぐに開始されました。 次に、可変抵抗器を10 kOhmに設定します。 効果は同じです。 さらに10 kOhmを順次追加しました-アクセサリの検出は行われませんでした。 そして、充電は開始されませんでした。 勝利の瞬間があり、可変抵抗器でゆっくりと抵抗を下げ始め、16キロオームでスマートフォンがArduinoを検出しました。 同時に、スマートフォンで充電が開始されました。 クラッシュ。 私はまだ彼の投稿へのコメントの中でサイモンの購読をやめたので、少し考えを巡らせたので、最後のコメントはドミトリーからかかっていて、今のところfarめています。 最終的に、2200 mAhで何とか冬になります。
サイモンが注意を払っており、私も彼に完全に参加しているのは、ケーブルと電話を使ってすべての実験を自分の責任で行うということです。 言っておくべきだった。
予定外の驚き-Arduinoの電源干渉
そこで、次の構成を取得しました。テストアプリケーションを搭載したスマートフォンを、USB Host Shield、Motor Shield、Arduino Unoの3フロアのボードに接続します。 スマートフォン上の私のテストアプリケーションは、さまざまなモード(速度、方向の変更)でエンジンを回転させ、サーボをさまざまな角度に回転させるコマンドをカートに送信します。 そして、突然突然崩壊します。 コマンドが実行されることもあれば、トロリーが狂ったように振る舞うこともあります-車輪をさまざまな方向に回転させてから、サーボドライブを揺さぶり、これらの発作は送信されたコマンドとは関係ありません。
私が以前にこの問題に遭遇したことがなかったことは奇妙でした。 それを研究して、私は気付きました:新しい構成では、電源は1つのソースから供給されます-エンジンの電源と電子機器の電源の両方。 それ以前は、Arduinoには常に別のソース(KronバッテリーまたはPCからのUSBケーブル)で給電していました。 追加の電源を使用した実験により、私の理論が確認されました。 どうやら、Arduinoの電源によると、エンジンの実行によるリードがあります。 彼らがそれについて書いているものを見ました。 人々は、クアドロコプターガイドの世界でこのような問題に遭遇します。それは強力な電動機の世界であり、おそらく、2つの並列ペアにエンジンが含まれているために引き込まれました。 電流が2倍になり、干渉が強まり、カートがクアドロコプターに向かって引っ張られました。
Amperkaのフォーラムで
トピックを開きましたが、同様の問題を抱えている人はそこに遭遇しませんでした。 私は本当に2つの電源を使いたくありませんでした-これはどういうわけか奇妙です。 Arduino Powerの入力にフィルターをかけるだけで十分であると理解しましたが、これには技術的な能力が十分ではなく、さらに検索する時間は長くなりました。 私がそのような問題の解決策から何とか見つけたのは
ここだけです。 私はチャンスをとることに決め、TEN 8-1221 DC-DCコンバーターを購入しました。 コンバータは、入力12Vをそれぞれ0.8Aの共通接点で+ 5Vおよび-5Vに変換します。 -5Vを共通にし、+ 5Vと+ 10Vを得ました。 10VはArduinoに電力を供給し、その安定器を介してUSBホストとモーターシールドチップに供給しました。 そして、5Vを使用してサーボに電力を供給し、Arduinoスタビライザーを少しアンロードしました。 前と同じように、モーターに外部電源を供給するために、モーターのシールド端子に同じ12Vを印加しました。 しかし今では、DC-DCコンバーターに組み込まれたフィルターを期待していました。 私は幸運でした、そして私の希望は実現しました。 これで、カートはテストAndroidアプリケーションのすべてのコマンドを熱心に実行しました。
PCからスマートフォンへのコマンドの転送
ここで、私の幸福のために、すべてがスムーズに行きました。 これは、PCとスマートフォンの相互作用のために、外部WiFiルーターが必要であるか、HTC Sensation自体がルーターとして機能するかのいずれかでした。 これは便利で、森の中でもロボットを制御できます。 私は広範囲にわたる計画のため、BluetoothやXBeeなどではなく、意図的にWiFiを選択しました。 通信のために、Androidアプリケーションがサーバーソケットを開き、.NETアプリケーションが接続を確立し、ロボットにコマンドを送信します。 すべてがシンプルでした。
電話の便利なオプションは、「飛行機」モードに切り替えることができ、すべての通信をオフにしてから、WiFiルーターをオンにすることでした。 これが開発者の間違いなのか、公約されたユーティリティなのかはわかりませんが、気に入っています。 GSM、3G、Bluetoothをオフにしても、WiFiを使用できます。 Androidサービスも作成しませんでしたが、Androidアプリケーションを管理しました。
銃とヒットセンサー
ここでも、すべてが滞りなく行われました。 銃の役割はTSAL4400 IR LEDによって実行され、ヒットを修正するために、TSOP31236光検出器を使用しました。 IR LEDは100mA、ピーク200mAで動作します。 Arduinoデジタル出力の最大許容電流は40 mAです。 したがって、トランジスタを配置してIR LEDを制御することをお勧めします。 光検出器の結合は、その
データシートに示されています。
もちろん、ArduinoスケッチでIR信号を送信(ショット)し、IR信号を受信(ヒット)します。 これには、
IRremoteライブラリを使用します。
赤外線ビームを狭めるために、LEDを金属管に入れました(壊れたテレスコピックアンテナの一部を使用しました)。

最終組立
この時点で、基本的な問題とハードウェアとソフトウェアの問題はすべて解決されましたが、私は別のレーキを見つけることができました。 そのため、その前にはサーボドライブが1つしかありませんでした(DF05BBの回転角度は180度)。 私のロボットの頭は水平面と垂直面で回転するはずなので、2つ目のサーボを購入しました。 私はまったく同じものを見つけませんでしたが、360度の回転角を持つより強力なものを見つけました。 水平面に最適なオプションを考えました。 私がそれを買ったとき、私は説明の2つの言葉に注意を払わなかったことが判明しました:「コンティニウス・ロタイティング」。 これは、サーボが360度回転せず、単に回転することを意味します。 回転の速度と方向は制御できますが、回転角度は制御できません。 以前、私はそのようなサーボの存在を知りませんでした。 私の最初のサーボドライブがそれまでにAmperkaに現れていたので、私は別のものを探す必要がありました。
次のステップは、携帯電話用の垂直サーボとマウントをインストールすることです。 すでに書いたように、トロリーに水平ドライブを取り付けるために、すでに通常の設置場所があり、垂直用に
特別なブラケットを購入しました。


HTC Sensation:
HTC Z710e(Z710ECAR01)のホルダーは、携帯電話のインストール
に最適でした。 ロボット専用に購入しました。 垂直サーボのブラケットに固定するためのネジキャップは凹んでいることが判明し、電話機の後壁を傷つけません。

電話ホルダーの下にあまり空きスペースがなく、すべてのmicroUSBコネクタがそこに収まるわけではありませんでした。 HTCの独自のUSBケーブルコネクタが適合し、ケーブル自体はかなり柔らかいです。 短くしなければなりませんでした。 もう一方の端には、USBホストシールドに接続するためのUSB-A(オス)コネクタを配置します。
次に、IRガンとIRレシーバーについて説明します。 銃身のマウントは即興の手段で作られています。この役割のために、セミトイクランプのパーツは完全にフィットします。 銃がロボットヘッドの傾きや、突然必要になったときにスマートフォンの「ハードウェア」ボタンの使用を妨げないように、電話ホルダーの左側に固定しました(ボタンは右側にあります)。 すでに書いたように、バレルは伸縮アンテナで作られており、その部分は熱収縮チューブで固定されています。 IRレシーバーはあまり洗練されていませんでした。この形式では、RoboBattlesにのみ必要です。その後、実際に取り外すことができます(実際には銃も)。 したがって、ロボットの背面に両面テープでレシーバーを貼り付けました。
さて、電子機器について一言。 DC-DCコンバーターを取り付けるために、
Proto Shieldプロトタイピングボードを購入しました。同時に、IRレシーバーのストラップをハンダ付けして誤検知をカットしました。 その上に、サーボ用のコネクタとすべての電子機器の電源コネクタも取り付けました。 DC-DCコンバーターの10ボルト出力は、VccおよびGndピンに直接出力されます。 つまり Arduino Uno電源コネクタを使用していません。 DC-DCコンバーターの5ボルト出力は、サーボコネクタに出力されます。 ボードの4つの「フロア」が判明しました。 4階はカートに収まりたくなかったので、プラットフォームの上部パネルを上げるために小さなスペーサーを配置する必要がありました。
髪型
光を入力するために、ロボットには顔と、もちろん尾が必要でした。 私は同じコンピューターアーティストなので、ペイントだけを手元に置いています。 どういうわけか、彼は満足、不満、怒り、そして死に至るまでの4つの顔を描いた。 その後、彼は気分を変えるために管理プログラムを微調整しました。 ちなみに、両方を試してみたところ、プログラミングがずっと簡単になったと自信を持って言えます。 テールは銅線から紡がれ、熱収縮チューブに詰められ、背面とUSBコネクタの間に挟まれました。 ショットとヒットのサウンドを追加しました。 気分ごとにより多くの音が必要です。

原則として、これはすでに実行できます。 しかし、もう1つ忘れられたのは、ロボットの制御性です。
実装は実行可能であるように見えますが、何かが間違っていました。伝統によれば、ゲームパッドの左スティックが動きを制御します。右-概要、すなわち頭の回転。管理上の欠陥はあちこちにありました。最初に、知識のない人のために、ジョイスティックについてのいくつかの言葉。少なくともXNAでのゲームパッドジョイスティックは、-1から+1の範囲のxおよびy座標を提供します。ポイント(0、0)は、ジョイスティックの中心位置に対応します。さらに、ジョイスティックの極端な位置は、半径が1の円に対応しています。交通規制について。トロリーにはステアリングホイールがないため、曲がった車両のように旋回します。アイデアは、例によって最もよく説明されます。前進しながら右に滑らかに曲がりたいとします。その後、左車輪は速度を変えずに回転し続け、右車輪は減速します。ジョイスティックは前方および右側の位置にあり、0〜+1の範囲のxおよびy座標を返します。ジョイスティックの状態を、開始点が(0、0)で終了点が(x、y)のベクトルと考えてください。アイデアは、ベクトルエンジンを左エンジンの速度として表し、モジュールの積をx軸と形成する角度のサインで表したものです。これは、右側のトラックエンジンの速度です。 x軸は移動方向に垂直です。 0度に近い角度(正しい位置にあるジョイスティック)では、右側のエンジンの速度はゼロになり、角度が90度の場合、右側のエンジンの速度は左側の速度と等しくなります。「コーミング」の時までに、このアイデアはすでに実装されていました。さらに、ゲームパッドの左トリガーがクランプされ、ベクトルの角度が小さい場合、X軸で異なるアルゴリズムが機能し、カートの異なる側のモーターがベクトルモジュールと同じ速度で異なる方向に回転したときに、反転モードがすでに追加されていました。しかし、管理を容易にするために1つのことだけでは不十分でした。上記の三角法全体の速度の値は0から1まで変化しました。これらの値を比例して0から255の値に変換し、モーターのPWMを指定しました。低い値では、エンジンは異なるキーでのみブザーを鳴らし、その後、すぐに最大速度に達しました。そして直感的に、カートを運転するときの不快感として認識されました。解決策は、非線形依存性を追加することでした。座標の値が小さい場合(xなど)、f(x)は急速に増加します。 xが1に近づくと、f(x)の成長が遅くなります。 y座標でも同じです。中心が点(1、0)で半径が1の円関数は、f(x)= sqrt(2x-x ^ 2)に非常に適しています。両方の座標にこの変換を追加すると、コントロールの鮮明度が低下し、予測しやすくなりました。そして今、正しいジョイスティックと頭の回転について。私の欠点は、ジョイスティックの座標を比例して頭の回転角度に変換したことです。つまり
ジョイスティックの中心位置は、水平方向に90度、垂直方向に90度に対応していました。これが楽しみの方向です。垂直の回転角度にソフトウェアの制限を導入したため、私は垂直に横たわっています。これは90度ではなく、垂直偏差の振幅の中間でした。しかし、今では重要ではありません。サーボが0〜180度回転するため、90度をカウントします。そして何が起こったのか:ジョイスティックの座標(1、0)では、頭は右(0度)になります。座標(0、1)で、頭を上に向けます(0度)。しかし、ジョイスティックが水平または垂直ではなく斜めにずれると、ヘッドはどちらかのサーボでゼロ度に到達できなくなります。ジョイスティックの領域は円であるため、たとえば、座標(1、1)は使用できません。したがって、結論:中心が原点で直径が2のジョイスティックの円形領域は、同じ中心と辺が2の正方形領域に「引き伸ばす」必要があります。最初の象限の前半(0〜45度)でこの問題を解決しました。要するに、次のことが出てきました。x '= sqrt(x ^ 2 + y ^ 2)y' = y * x '/ xここで、(x'、y ')は新しい座標で、正方形に拡張されますが、最初の象限の前半にのみ拡張されます。まあ、それがおそらくすべてです。管理性を修正して、私はオフィスで自慢しに行きました。価格
ロボットの作成プロセスを楽しみ、想像力を発揮し、手遅れになる前に友人に自慢したい場合は、「計画と結論」の見出しに行くことをお勧めします。このセクションは私を邪魔します。まず、ロボット自体の部品のコストによると:購入日 | 価格、こする。 | お名前 |
2011年10月21日 | 2,590 | 四輪プラットフォーム |
2011年10月21日 | 590 | サーボ駆動 |
2011年10月21日 | 1 990 | マトリョーシカX(Arduino Uno +プロトタイプ作成の詳細) |
2011年10月26日 | 1,200 | サーボとブラケット |
11/01/2011 | 0 | バッテリーアセンブリ12V、1100mAh 2個(提示) |
11/01/2011 | 850 | HTCセンセーション用カーマウント |
2011年11月7日 | 1,690 | USBホストシールド |
2011年1月21日 | 690 | 2Aモーターシールド |
2011年1月21日 | 290 | プロトシールド |
2011年12月1日 | 93 | IRレシーバーTSOP3123 |
2011年12月1日 | 13 | IR LED TSAL4400 |
2011年12月1日 | 690 | サーボ駆動 |
2011年12月5日 | 886 | DC-DCコンバーターTEN 8-1221 TRACO |
全期間 | 1,000 | 小さいもの(フラックス、ワイヤー、収縮チューブ、バッテリーなど) |
合計 | 12 572 | |
ここにそのような量があります。モスクワの価格。確かに、部品は中国のオンラインストアでも注文できます。そこでは、価格が著しく異なります。2倍、さらには3倍も安くなります。しかし、あなたは長い間待たなければなりません。時間がなかったのは確かですが、耐えられなかったでしょう。今、私が買ったもの、またはすでに持っていたもの、そしてそれなしではロボットは行かないでしょう:購入日 | 価格、こする。 | お名前 |
2011年10月29日 | 1,290 | XBOX 360ゲームパッド |
2011年11月25日 | 3 850 | ユニバーサル充電器IMAX B5 |
ずっと前 | 18 900 | HTC Sensation(2011年12月19日のYandex市場でのモスクワの平均価格) |
計画と結論
2か月間の真夜中の仕事の後、私が上記のすべてを行ったとき、妻は私に尋ねました。段落をスキップします。はい
これまでのところ、私が持っているのはロボットと呼ぶには早いです。 わかった。
しかし、それはロボットになると思います。私が関心を持っている次のトピックは、スマートフォンからPCへのビデオおよびオーディオストリームの転送です。さて、戻る。次にやりたいのは、ロボットの自律性を開発することです。モバイルプラットフォームの準備が整ったので、ロボットの「肩」には、高レベルのプログラミング言語を備えたかなり強力な「頭」があります。さらに、音、画像、顔、目まいがする見通しを認識する既製のオープンアルゴリズムを見つけることができます。私はこれまで見ても怖いです。おもしろければ、さらに書きます。私の経験、私に詰め込まれたバンプと詳細なグラブカードが誰かに役立つことを願っています。UPD:プロジェクトはcode.google.comサービスに転送されました。ロボットMityaの名前はすでに家族や友人の間で修正されているため、プロジェクトの名前は次のようになります。ロボットミティア。すべてのソースコードを表示するために開きました。ロボットのプログラミングの3つのレベルはすべて、Arduinoのスケッチ、Androidアプリケーション、およびWindowsアプリケーションです。 Subversionはバージョン管理システムとして使用されます。タグフォルダーには、バージョン1.0.0の完全に機能するリリースが含まれています。サーバーからプロジェクトのソースコードをダウンロードし、コンパイルしてロボットで実行することにより、パフォーマンスを「ゼロから」チェックしました。いつものように、現在のプロジェクトブランチのTrunkフォルダー。Arduinoスケッチはarduino-0022 IDEバージョンで書かれています。ダウンロードセクションで使用するライブラリとともにIDEのバージョンを入れました。Androidアプリケーションを作成する際、Checkstyleコード分析プラグインがインストールされたIndigo Service Release 1のJava Developers開発環境用のEclipse IDEを使用しました。Checkstyle設定で許可した唯一の譲歩は、最大行長を80文字から160文字に増やすことでした。残りの設定は変更されませんでした。Windowsアプリケーションを開発するために、Microsoft Visual C#2010 Expressが使用されました。コードの品質を分析するために、StyleCopが使用されました。Expressバージョンのスタジオは拡張機能の埋め込みをサポートしていませんが、MSBuildとの統合の可能性があるため、StyleCopの使用は可能です。テーマは、StyleCop&C#Expressの記事で見事に説明されています。頑張って