22

プログラミングを学ぶ前から、ロボットがどのように機能するかに魅了されてきました。これで、基礎となるプログラミング命令がどのように記述されるかはわかりましたが、理解できないのは、それらの命令がロボットによってどのようにたどられるかです。

たとえば、次のコードを書いた場合:

object=Robot.ScanSurroundings(300,400);
if (Objects.isEatable(object))
{
   Robot.moveLeftArm(300,400);
   Robot.pickObject(object);
}

ロボットが左を向いたり、腕を動かしたりなどの物理的な動作を行うように、CPU はこのプログラムをどのように追跡しますか? 主にバイナリ言語/ASM で行われますか?

最後に、ロボットの作成方法を学びたい場合、どこに行けばよいですか?

4

14 に答える 14

17

結局、何かが高レベルのコマンドを非常に低レベルのコマンドに分解する必要があります。「カップを持ち上げる」を、実際にモーターを回転させるハードウェアコマンドにアームを移動する方法(ジョイントの角度)に変換する必要があります。

以下を含む(ただしこれらに限定されない)この翻訳の一部を提供しようとするフレームワークがあります。

ただし、ロボット工学の研究はシステムのすべての層に関心があるため、翻訳スタック全体を提供するシステムは多くありません。ロボット工学の研究を検討している場合、これを簡単にしようとするシステムがいくつかあります(ここでもランダムサンプル)。

それができない場合、 Makeなどのサイトは、ロボットプロジェクトを構築するためのガイドを提供します。挑戦はあなたが興奮しているプロジェクトを見つけて、町に行くことです!

于 2009-02-12T03:55:35.823 に答える
8

Microsoft Robotics Studio (MRS)を確認してください。多くのビデオ/スクリーンキャストと、書かれたチュートリアルがあります。さらに、Channel9 には、ロビティクスに関する多くのビデオ、インタビューなどがあります。デモンストレーション、および MRS の開発者へのインタビューを含みます。

于 2009-02-12T03:27:25.737 に答える
5

最近のほとんどのロボットでは、メカニズムの逆運動学モデル(この場合は腕)があり、空間座標を腕の関節の位置に変換します。これらのジョイントは通常、サーボモーターによって動かされます。腕をスムーズに動かすには、腕がたどる経路を定義する一連の中間関節位置が必要です。また、腕の端にある「手」の速度を一緒に制御する関節の速度についても心配する必要があります。

アームが動いている間、サーボシステムは実際の位置に関するフィードバックを受け取ります。単純なサーボシステムでは、基本的なPIDフィードバックループを使用してモーターを調整できます。より複雑なシステムには、慣性、重力、摩擦などを補正するフィードフォワードパラメータが含まれます。これらは非常に洗練される可能性があります。

ロボットの周りの空間に障害物を考慮しなければならないとき、本当の楽しみが始まります。障害物を感知し、それを回避して目的地に到達する方法を理解する必要があります。

于 2009-02-12T13:11:54.177 に答える
4

上記で言及されていないので、これにArduinoプロジェクトに関する何かを追加する必要があります。

Arduino ベースのロボット工学プロジェクトへの参入には、非常に低いハードルがあります。ハードウェア用に作成する「スケッチ」プログラムは、非常に理解しやすく、C 構文に似ています。抵抗器からのトランジスタがわからない場合でも、これらのボードでは、プラグイン ハードウェアと、ベース コンピュータ ボードを拡張する追加の「シールド」を使用して多くのことを行うことができます。

それは非常に楽しく、非常に柔軟で、コードを現実の世界と相互作用させるものです。さらに、その「オープン ハードウェア」は、オープン ソース ソフトウェアの方針に非常に沿っています。

于 2010-01-12T06:14:04.687 に答える
3

ロボットはハードウェアと相互作用することで動作します。コードからのブリッジは、多くの場合、さまざまなタイプのI/Oポートを介して行われます。たとえば、単純にRS232ケーブルである可能性があります(古いCOM1ポートをご存知でしょう)。ハードウェア部品は、モーター(サーボモーターなど)とセンサー(障害物を感じる超音波、距離を取得するレーザー、スイッチなど)で構成されます。

これを行うためにアセンブラを使用する必要はありません。それを実行できる言語はたくさんありますが(ほとんどではないにしても)、ハードウェアとの対話方法に関する知識が必要です。ドライバーを書くようなものです。自分でロボットを作りたい場合も、少なくとも基本的な電子機器が必要です。

興味のある方は、この本をご覧になることをお勧めします。これは良い入門書です。

また、ベーシックスタンプのプログラミングを試すこともできます。チュートリアルに従うのは非常に簡単で、ロボットの作成方法を始めるのに役立ちます。それほど高価ではなく、すぐにハードウェアを操作できるようになります。

頑張って楽しんでね!

于 2009-02-12T03:46:21.370 に答える
3

プログラミングが上手になれば、書く必要のある最も難しいコードの多くをテストするために、実際にはロボットさえ必要ないことに気付くかもしれません...(つまり、ロボットに常に魅了されているシーンを見て認識させる)私...しかし、ある時点で、この問題に必要な物理的なロボットは簡単な部分であることに気づきました...ソフトウェアは難しい部分です!)...

于 2009-02-12T03:53:42.007 に答える
2

おそらく、ロボットの行動と知性を説明するためのより高水準の言語を取得し、アクション (腕を動かす、歩く、停止する) を低水準の言語に任せる方が簡単です。インテリジェント エージェントの BDI アーキテクチャと呼ばれるものについては、Google で多くの研究が行われています。

このサイトで詳細を確認できます。これは、Java で作成されたエージェントの動作を記述するための DSL です。それはジェイソンインタープリターと呼ばれ、言語は AgentSpeak(L) です。

于 2009-02-12T03:24:50.640 に答える
2

地域のFIRSTロボット チームを見つけて、メンターになるボランティアをしてください。FIRSTは中高生向けのロボット競技会です。目標は、子供たちがロボットを構築、プログラミング、テスト、実行するすべての作業を行うことですが、ソフトウェアを掘り下げて実際に学習する機会はまだたくさんあります. 彼らはLabViewを使用していますNational Instruments によるもので、2 月 8 日の時点で、今年の地域コンテストが始まったばかりです。LabView は、NI ハードウェアと接続してモーター、アクチュエータ、およびセンサーをプログラムできるグラフィカル プログラミング環境です。NI のものは非常に洗練されており、非常に使いやすく、さらに各チームに無料で提供されているため、(少なくとも開始するために) ハードウェアとソフトウェアを自分で購入する必要はありません。新世代のエンジニアのスタートを支援します。

于 2009-03-09T02:21:58.793 に答える
1

.Net に精通している場合は、Phidets から始めてください。部品については、 TrossenRobotics.comをチェックアウトできます。

Phidg​​ets インターフェイス キットは、出発点として適しています。そこから、サーボ コントローラーを入手して、動くものを作り始めることができます。

Trossen フォーラムは、他の人のプロジェクトをレビューするのにも適しています。コード/プロジェクトのサンプルもある新しいデータセンターがあります。私は彼らのために働いていません...ただ幸せな顧客です。

于 2009-06-08T20:54:44.313 に答える
1

ハードウェアとインターフェイスするドライバーが必要です (ほとんどの場合、モーターを備えた STAMP または FPGA など...)。次に、関数 me.moveLeftArm(x,y); を呼び出します。ドライバーは、moveLeftArm() がアクチュエータを X 秒/ミリ秒/度移動することを意味することを認識します。

ロボットのプログラミングを行うキットを見つけることができると確信しています。

于 2009-02-12T03:22:42.050 に答える
1

私も同じかゆみを共有しています..私は最初のBeagle Boardと、 I2Cバスを使用できるいくつかのセンサー/サーボを購入しようとしています。イベント駆動型の設計と、ユーザー空間スレッドであるファイバー (必要に応じてフィブリル) の大まかな実装を使用します。

基本的に、私の設計では、サーボのグループごとに 1 つのスレッドを起動する 1 つのプロセスが必要です。各グループ マネージャ スレッドは x の数のフィブリル (サーボあたり 2 つ) を起動します (おそらく)。1 つのフィブリルはサーボを制御するために使用され、もう 1 つのフィブリルはそのサーボからのイベントを処理します (つまり、オブジェクトが重すぎて持ち上げられない、オブジェクトが落とされたなど)。

主なプロセスには、他のすべてのイベントをリッスンし、「右手が左手が何をしているかを知っている」ことを確認しながら、前進して障害物を乗り越えるというタスクがあります。

私が誇りに思うところまで何かが機能するようになるまでには、2年以上かかるでしょう.

Linux ではなく、マイクロカーネルを使用する可能性が非常に高いです。

私はこれを、イベント駆動型のメソッドと、独自の R2 を作成したいという私の願望で自分自身を研ぎ澄ますために行っています :)

于 2009-03-09T02:53:47.440 に答える
1

Java の代替手段が必要な場合は、本Linux Roboticsをお勧めします。キット、パーツ、センサーの入手先に関する有益な情報が多数あり、Java の完全なソース コード リストもあります。

于 2009-03-09T02:04:44.187 に答える
0

ここにたくさんの良い答えがあります。あなたの幻想的なコードは、MS Robotics Studio を介した C# などの高レベル言語で行う方法とはかけ離れています。単純なこと(「腕を左に動かす」など)でさえ、「情報のバイアス」が非常に多いことに注意してください.

金属に至るまで、ロボット アームは一連のリンクと [おそらく] 電動ジョイントです。したがって、「腕を左に動かす」(または座標内の任意の点) は、計算するのが非常に複雑なタスクです (D&H テーブル、マニピュレーターの順運動学と逆運動学を探してください)。

また、腕を左に動かすと、そのスペースには何もないと見なされ、衝突は発生しないという概念もあります。環境に制約がない場合は、多くの場合、ある種のセンサー (カメラ) とマシン ビジョン アルゴリズムに基づく衝突検出システムを実装する必要があります。

要約すると、言語とハードウェアのインターフェイスは、システムをモデル化して目的の動作を実現することに比べればたいてい簡単です。

于 2010-01-12T06:06:20.970 に答える