問題タブ [hard-real-time]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
embedded - リアルタイム オペレーティング システムの硬度のテスト
リアルタイム機能をアドバタイズする組み込みデバイス ( Technologic TS-7800 ) を持っていますが、「ハード」または「ソフト」については何も述べていません。メーカーからの回答を待っている間、自分でシステムをテストしても問題ないと思いました。
リアルタイム/決定論的動作 (レイテンシーとジッター) に関して特定のデバイスの「ハードネス」を決定するための確立された手順は何ですか?
大学にいるので、かなりきちんとしたハードウェア (優れたオシロスコープと信号発生器) にアクセスできるので、テスト機器の面で問題に遭遇することはないと思いますが、専門知識だけです。
haskell - 大規模なリアルタイム システムに Haskell を使用する: どのように (もし)?
Haskell の力を組み込みリアルタイムの世界に適用できるかどうかを知りたくて、Google でAtomパッケージを見つけました。複雑なケースでは、コードに古典的な C バグ (クラッシュ、メモリ破損など) がすべて含まれている可能性があり、それらを引き起こした元の Haskell コードまでたどる必要があると思います。では、これが質問の最初の部分です。「Atom の経験があれば、コンパイルされた C コードの低レベルのバグをデバッグし、Haskell の元のコードでそれらを修正するタスクにどのように対処しましたか?」
私は Atom の例をいくつか探しました。このブログ投稿では、結果の C コード 22KLOC について言及されています (そして明らかにコードはありません:) 。含まれている例はおもちゃです。thisおよびthisリファレンスにはもう少し実用的なコードがありますが、これで終わりです。この件名に「かなり」を入れた理由は、生成された C コードを 300KLOC+ の範囲で使用した経験を共有していただければ幸いです。
私は Haskell の初心者なので、未知の未知のために見つけられなかった他の方法があることは明らかです。そのため、この分野の独学のための他の指針は大歓迎です - そしてこれは質問の 2 番目の部分です - 「Haskellでリアルタイム開発を行うための他の実用的な方法は何ですか?」. マルチコアも写真に含まれている場合、それは余分なプラスです:-)
(この目的での Haskell 自体の使用について:このブログ投稿で読んだことから、Haskell のガベージ コレクションと遅延により、スケジューリングに関してはかなり非決定論的になりますが、おそらく 2 年で何かが変わった可能性があります。SO に関する現実世界の Haskell プログラミングの質問このトピックに最も近いものでした)
注:上記の「リアルタイム」は「ハード リアルタイム」に近いものです。メイン タスクが実行されていないときの一時停止時間を 0.5 ミリ秒未満にすることができるかどうか、興味があります。
erlang - なぜErlangはソフトリアルタイムアプリケーションには適しているが、ハードリアルタイムには適していないのですか?
それとも、ハードリアルタイムにも適していますか?
linux - preempt_rtパッチを使用したユーザースペースでのハードリアルタイム
差出人:https ://rt.wiki.kernel.org/articles/f/r/e/Frequently_Asked_Questions_7407.html
リアルタイムはカーネルにのみ影響します。ユーザースペースは、より良いリアルタイムの動作を除いて、違いに気づきません。
ユーザースペースでアプリケーションを作成した場合、リアルタイムのハード効果が得られないということですか?
c - Linuxを使用したリアルタイムプログラミング
RTパッチを適用したバニラLinuxカーネルを構築してセットアップしました。すべてがうまくいき、新しいカーネルを正しく起動できるようになりました。
不思議に思うのは、これです。Cで作成したシミュレータープログラムがあり、新しいカーネルで許可されているように、ハードリアルタイムモードで実行したいと考えています。おそらく、シミュレーター全体をリアルタイムの優先順位で実行する必要はありませんが、内部のタスクの一部は実行します。
どうすればこれを達成できますか?プログラムを実行するだけではうまくいかないと思います。
real-time - Firebase はハード リアルタイム計算に適していますか?
私は最近 Firebase に出会い、非常に興味深いと感じました。
ハード リアルタイムとソフト リアルタイムの違いを読んで、Firebase がハード リアルタイム計算に適しているかどうかに興味があります。
私の直感では、これはソフト リアルタイムにのみ適していると思いますが、この感覚を真に検証する (SaaS としての性質を除いて) ものはほとんどありません。
linux - リアルタイムループと非リアルタイム機能を同時に持つためのより良いアプローチは何ですか
悪いタイトルで申し訳ありませんが、それを簡単に説明する方法が本当にわかりません...
私のシナリオでは、ロボット アプリケーションの場合、1 ミリ秒ごとにモーターを制御するリアルタイム ループが必要です。同時に、パス プランニング、画像処理、オブジェクト認識など、リアルタイムの要件を持たないことを実行したい場合もあります。さらに、非リアルタイム タスクの結果の一部は、リアルタイム モーター制御に送信されます。ロボットを制御するためのループ。
リアルタイム部分については、Ubuntu と RT-Preempt Patch を使用しています。したがって、こちらのサンプル コードのように while ループでリアルタイム制御ループを実行できます。
ただし、非リアルタイム部分についてはわかりません。私の謙虚な意見では、同じプロセスで新しいスレッドを作成し、そのスレッドで非リアルタイム タスクを実行します。
私はリアルタイム プログラミングに非常に慣れていないので、自分の設計で何が問題になるのかわかりません。また、そのようなプログラムを設計するためのパラダイムがあるのだろうか?
- -編集 - -
私のアプリケーションに関するいくつかの詳細。
ロボットは、具体的にはロボットアームです。
リアルタイム部分については、順運動学、逆運動学、およびヤコビアンを計算します。次に、単純な PID コントローラーを使用して適切な出力コマンドを計算します。最後に、EtherCAT を使用して各モーターにモーター コマンドを送信します。
たとえば、非リアルタイム部分については、kinect から PointCloud ストリームを取得し、いくつかの前処理を行い、シーン内のオブジェクトのポーズを計算し、ロボット アームの適切な把握ポーズを決定し、最後にそれぞれのゴールを送信します。ロボットアームが実際にゴールに移動して物体をつかむように、モーターをリアルタイム部分に接続します。全体のプロセスには 10 秒ほどかかる場合があります。ただし、同時にリアルタイム ループを実行し続け、適切な力コマンドまたは位置コマンドを送信して、ロボット アームが元のポーズを保持して静止するようにする必要があります。
この 2 つの部分の間の通信に関しては、多くの場合、非リアルタイム部分から新しいアルゴリズムによってコマンドが生成され、それがリアルタイム部分に送られ、ロボット アームが動かされます。ただし、非リアルタイム部分のアルゴリズムは、エンド エフェクタの現在のポーズなどを知る必要がある場合があります。したがって、非リアルタイム パーツは、リアルタイム パーツに存在するフォワード キネマティクスから情報を取得する必要があります。