12

ロボット アプリケーションの実装に Erlang を使用したいと考えています。Erlang で実装されている現在の現実世界のアプリケーションのほとんどは、Web ベースです。コラード教授によって実装されたロボットは、Erlangの心臓部であるErlangの並行性を利用せず、より人工知能に集中していました(そのプロジェクトの私の理解によると)。

いくつかのアイデアは、サッカー ロボットのようなものです。複数のロボットが部屋を掃除しますが、そのようなシステムでは、ロボットは MATLAB を使用して制御できる C (またはその他のプログラミング言語) でプログラムできます。MATLAB は画像処理 (ビジョン システム) と複雑な配列計算の解決に役立ちます。Erlang を使用するポイントは何ですか? (間違っている場合は訂正してください)

Erlang の機能、特に同時実行性を利用できるロボット アプリケーションを誰か提案してもらえませんか。また、Erlang は他の言語よりもそのようなアプリケーションに最適であると主張できます。

少し詳細な回答は私に大いに役立ちます。

4

2 に答える 2

10

しかし、Erlang は、ロボット アプリケーションに対する最良のアプローチではないかもしれません。しかし、 Erlang が多くのロボティクス アプリケーションで重要なコンピューティング モデルをサポートしていることを実証するという、あまり野心的でない論文を選ぶこともできます。ロボット工学に Erlang を使用するポイントは次のとおりです。

  • 並行世界をモデル化および監視する並行性。
  • センサー、アクチュエーター、コンピューティング リソースの配布。
  • 動作を結び付けるステート マシン。
  • フォールト トレランスのためのスーパーバイザ。

どんな言語でも何でもできますが、Erlang は特にアーキテクチャ レベルでいくつかのことを便利にします。

たとえば、Erlang での並列プログラミングの第 14 章では、エレベーターごとに 1 つのプロセス、フロアごとに 1 つのプロセスによってリフト制御システムをモデル化し、後で衛星制御システムのプロセス構造について説明します。リフトやサテライトはあまりロボットに似ていないかもしれませんが、原理は同じです。

Corrado Santoro らによるErlang & Robotics の作業。並行性を十分に活用します。彼らの2007 年のモバイル ロボット プロジェクトには、低レベルの I/O から高レベルの計画まで、さまざまな (同時) OTP 動作が多数あります。ロボット工学とプレーヤー/ステージを使用して Erlang を教えることは、もう 1 つの最近の仕事です。

ロボット サッカーや掃除ロボットのアイデアは問題なく、同時実行性とロボット間通信の余地が十分にあります。しかし、そのサイズの任意のロボット アプリケーションを実行するだけではありません。チームと作業する特定のロボットがあるか、自分でシミュレーターを取得します (どちらの方法でもシミュレーターを取得します)。

それぞれのロボットが独自のプロセスを実行し、すべてが衝突するまで互いに向き合う多数のロボットをシミュレートしてみてください。それが機能している場合は、タスクを置き換えて、モーターを制御する (ふりをする) プロセスを追加し、壁を感じ、環境を見て、ユーザーのコマンドを理解し、分解し、他のロボットや計画プロセスとメッセージを交換します。

そのような設計が一般的であることとその理由を理解するために、ロボット システム アーキテクチャをよく読んでください。Erlang はこの種のプログラミングを容易にしましたか?

于 2011-01-26T15:18:27.620 に答える
3

erlang が最適な場所と最適な時期を理解する唯一の方法は、erlang でしばらくプログラミングすることです。それは erlang が最も得意とすることではなく、erlang の小さなスポーンと otp を使用した機能的な設計パターンが、同じ問題を命令型言語で解決しようとする場合とどのように比較されるかを理解することです。短い箇条書きの長所と短所のリストでは、正当な評価を得ることはできません。Google の go ルーチンとチャネル、haskell と D は問題なく同様に動作します。Erlang は特に分散に優れています。新しい並行言語では、物事を並行させるために一生懸命働く必要はありません。特にerlangでは、スポーンを均等に実行する場合、並行性を使用しているCPU集約型のタスクを実行します。ロボティクス用の erlang に関する情報はあまり見つかりませんが、同じ問題の多くに取り組む、物事を分散および並行させるための多くの例を含む3冊の本を見つけます。他の並行言語は通常、そのような方法に特化していません。多くの便利なプリミティブが erlang に組み込まれています。

他の言語で同様のことを行うことについて多くの投稿がなされてきましたが、erlang に固執することで多くの作業を節約できます。

http://www.google.com/search?sourceid=chrome&ie=UTF-8&q=%22erlang+style%22+%22(concurrency|message+passing)%22 http://groups.google.com/group/ golang-dev/browse_thread/thread/e120a586441b9b24/806eab93bd5281a0?#806eab93bd5281a0

于 2011-01-26T02:17:06.117 に答える