現実のロボットを作成するにはどうすればよいですか?
-
22-08-2019 - |
質問
プログラミングを学ぶ前から、私はロボットがどのように機能するかに興味を持っていました。これで、基礎となるプログラミング命令がどのように記述されるかはわかりましたが、理解できないのは、それらの命令がロボットによってどのように実行されるかということです。
たとえば、次のコードを書いたとします。
object=Robot.ScanSurroundings(300,400);
if (Objects.isEatable(object))
{
Robot.moveLeftArm(300,400);
Robot.pickObject(object);
}
ロボットに左を見る、腕を動かすなどの物理的な動作をさせるには、CPU はこのプログラムをどのように実行するのでしょうか?主にバイナリ言語/ASM で行われますか?
最後に、ロボットの作り方を学びたい場合はどこに行けばよいでしょうか?
解決
最も近代的なロボットでは、このような場合には、腕の関節のための位置に空間座標を変換し、アームを、メカニズムの逆運動学モデルを持っているでしょう。これらの接合部は、通常、サーボモータによって移動されています。スムーズに腕を移動するには、あなたが腕をフォローしたいパスを定義する中間関節位置のシリーズを必要とします。あなたも一緒にアームの先端に「手」の速度を制御する関節の速度、心配する必要は。
アームが動いている間にあなたのサーボシステムは、その実際の位置についてのフィードバックを得ることになります。シンプルなサーボシステムは、モータを調整するための基本的なPIDフィードバックループを使用することができます。より複雑なシステムは、そうで慣性、重力、摩擦を補償し、及びフィードフォワードパラメータを含むであろう。これらは、非常に高度化することができます。
あなたがロボットの周りの空間内の障害物を許容する必要がある場合、本当の楽しみが開始されます。あなたは障害物を感知し、それを避けるため、まだ目的地に到達する方法を見つけ出す必要があります。
他のヒント
最後に、高いレベルのコマンドに非常に低いレベルのコマンド.何かして翻訳"のカップ"などのアームを動かせるような角度の関節は、ハードウェアのコマンドを実際にモーターです。
ある枠組みを提供する金額の翻訳が含まれますが、この限りでは:
しかし、ロボット研究に興味のある階層毎のシステムがありませんを提供するシステム全体の翻訳スタックです。ばんざいを知ってもらうためにロボットが複数のシステムの試みこしやすく、ランダムなサンプル):
など) 作 でも提供ガイドビルロボット事業を開始。の課題を探るプロジェクトで興奮、街を行く!
チェックアウトする必要があります マイクロソフト ロボティクス スタジオ (夫人)。彼らはたくさん持っています ビデオ/スクリーンキャスト, 、 そして 書かれたチュートリアル. 。さらに、Channel9 には、 たくさんのビデオ, 、ロボット工学をテーマにしたインタビューなど。MRS のデモンストレーションや開発者へのインタビューも含まれます。
私はちょうど Arduinoのプロジェクトについて何かを追加する必要があり、私はそれが上記参照いけないので、これにを。
のArduinoベースのロボットプロジェクトへの参入のための非常に低いバーがあります。あなたは、ハードウェアのために書く「スケッチ」のプログラムは非常に拾いやすいとCの構文に似ています。あなたが抵抗からあなたのトランジスタを知らない場合は、これらのボードにはまだあなたがプラグインハードウェアおよび追加「盾」をたくさん行うことができベース・コンピュータ・ボードを拡張する。
そのコードが現実の世界との相互作用を得ることは非常に柔軟で、何か、非常に楽しいです。プラスその「オープンハードウェア」非常にオープンソースソフトウェアのラインに沿っています。
ロボットは、ハードウェアと相互作用することによって動作します。あなたのコードからのブリッジは、多くの場合、I / Oポートの異なるタイプを介して行われます。これは単に、(あなたがそれらの古いCOM1ポートを知っている)は、例えばRS232ケーブルである可能性があります。ハードウェア部分は、モータによって構成されることになる(例えば、サーボモータの)およびセンサ(例えば、距離やスイッチを取得するための障害物、レーザーを感じるように超音波)。
あなたはそれを行うためにアセンブラを使用する必要はありません、そこにそれを行うことができます言語のロット(そうでない場合は、ほとんどが)ですが、それは、ハードウェアと対話する方法についての知識が必要です。ドライバを書きたいです。それはあなたがロボットを自分でビルドしたい場合は、少なくとも基本的な電子回路を必要とします。
あなたが興味を持っている場合、、私はあなたがこの本 幸運と楽しみを持っている!
あなたがプログラミングで十分取得する場合、あなたはあなたも実際にあなたが書く必要があります最も困難なコードの多くをテストするためのロボットを必要としないことを発見することがあります...(IE、ロボットが見て認識させますシーンはいつも私を魅了...しかし、いくつかの点で、私はこの問題のために必要な物理的なロボットは簡単な部分であることに気づき...ソフトウェアは難しい部分です!)...
(停止、歩く、腕を動かす)おそらく、ロボットの行動と知性を説明し、アクションに低レベルの言語を聞かせするために、より高いレベルの言語を取得する方が簡単です。多くの研究はそれをグーグル、インテリジェントエージェントのためのBDIアーキテクチャと呼ばれているものであります。
あなたはこのサイトの詳細を見つけることができ、それはJavaで作られたエージェントの動作を記述するためのDSLです。ジェイソン・インタプリタ言語はAgentSpeak(L)であると呼ばれています。
メンターであることを地元の FIRST のロボティクスチームやボランティアを探します。 FIRST中・高校生のためのロボットコンテストです。目標は、子供たちは、構築プログラム、テスト、およびロボットを実行するためにすべての作業を行うということですが、あなたはまだで掘ると、本当にソフトウェアを習得する機会がたくさんあります。彼らは、ナショナルインスツルメンツによって LabViewのを使用している、そして、2月8日のように、ただのための地域の競争を始めています今年。 LabVIEWは、モータ、アクチュエータ、およびセンサーをプログラムできるようにNIのハードウェアとのインタフェースとグラフィカルプログラミング環境です。 NIのものは、あなたがの追加ボーナスを得る、かなり滑らかな状態で使用するのは簡単です、それに加えて、各チームへの無料提供されます、あなたは、ハードウェアとソフトウェアを自分で購入する必要はありませんので、(少なくとも始めるために。)プラス彼らのスタートを切るエンジニアの新世代を支援します。
あなたは、ハードウェア(最も可能性が高いSTAMPまたはモーターとFPGAなど)とインタフェースドライバを持っている必要があります。その後、me.moveLeftArm(x、y)の関数を呼び出します。運転者がmoveLeftArm()はX秒/ミリ秒/度のためにアクチュエータを移動する意味を知っているであろう。
私はあなたがロボットプログラミングを行うキットを見つけることができると確信しています。
は、Javaの代替をしたい場合、私はこの本をお勧めすることができます Linuxのロボット。これは、Javaでのキット、部品、センサー、および完全なソースコードのリストを取得する場所についての良い情報をたくさん持ってます。
私と同じかゆみを共有する..私は私の最初のビーグルボードと、いくつかのセンサー/サーボそれは I2C のバスを使用することができます。私は、イベント駆動型の設計とユーザー空間スレッドです繊維(原繊維、あなたがする場合)の粗製の実装を使用するつもりです。
基本的に私のデザインは、サーボのグループごとに1つのスレッドを起動する一つのプロセス、のために呼び出します。各グループマネージャのスレッドは、サーボあたり2(おそらく)、原線維のx#を起動します。一のフィブリル(すなわち、物体が等、オブジェクトを滴下し、ピックアップするだけ重すぎる)、サーボを制御するために使用される他のフィブリルは、サーボからのイベントを処理している。
主なプロセスは、他のすべてのイベントをリスニングし、交渉の障害物を前方に移動しながら、「右手が左手が何をしているかを知っている」ことを確認することのタスクを持っています。
その私はそれを誇りに思うポイントに取り組んで何かを得るために私に2年間の大半を取るつもり..しかし、私はその点にそれを取得し、多くの楽しい夜を予測します。
私は非常に高いマイクロカーネルではなく、Linuxを使用されます。
私は、イベント駆動型の方法だけでなく、私自身のR2を作るために私の願望と自分自身をシャープにするために、このように多くをやっている:)
始 Phidets しています。います。にあります TrossenRobotics.com のための部品です。
のPhidgetsインターフェイスkitが良い。からはがきサーボコントローラを構築物が移動します。
のTrossenフォーラムにも良い場所を見直し、他の人の事業この新しいデータセンターコード/プロジェクトサンプルです。僕たちだけで---嬉しい。
ここでは良い答えがたくさん。ファンタジーコードのあなたの作品は、はるかにあなたがそのようなMSロボットメーカー超えるC#などの、より高いレベルの言語で行うだろうかからではありません。ただ、(「腕を動かす左」のような)も、シンプルなものが非常に「情報の偏り」がロードされていることに注意してください。
金属まで、ロボットアームは、リンクと[おそらく】電動関節のセットです。したがって、「腕を動かす左」(または任意の点における座標()、D&Hテーブルのマニピュレータのための順方向及び逆運動学を見て)既に計算するために非常に複雑な作業である。
腕を左に移動するという概念もありますが、何もその空間にいないし、衝突が発生しません想定しています。環境が拘束されない場合は、多くの場合、センサー(カメラ)とマシンビジョンアルゴリズムのいくつかの並べ替えに基づいて、衝突検出システムを実装する必要があります。
要約すると、言語とハードウェアインタフェースは、所望の動作を達成するために、システムをモデル化に比べしばしば自明である。
最後の質問「どのようにロボットを作成する」については、私は[[Adafruit] [1]、[Hackster.io] [2]、あるいは[グリッチ]のようなオンラインコミュニティで関連プロジェクトを探してから始まる見つけます3]、または最初からロボットを構築している誰かのブログの記事を探して、例えば、 https://burningservos.com 、または、ハードウェアとソフトウェアの両方の例のためのドキュメンテーション&チュートリアルを提供し、製品http://emanual.robotis.com/docs/en/platform/openmanipulator_x/overview/するます。