• 締切済み

情報共有

今Webotsをしています。 Aロボットにa_robot.cのプログラムを走らせてGPS(x,y,z)の情報を常に取得していて、Bロボットにはb_robot.cのプログラムを走らせてGPSの情報を常に取得してる状態のものがあります。 できるだけリアルタイムにGPSの値を共有したいのですが、どうしたらいいでしょうか? Webotsに限るやりかたではないでしょうけど、違うプログラムの値を別のプログラムに移す?渡す?にはどうしたらいいのかということを知りたいです。 私が考えるのは、fprintf、fscanfで書き込み読み込みを繰り返したらできるかもと考えているのですが、もっと違うやり方でやれるのではないかと思い、質問しました。 宜しくお願いします。

みんなの回答

  • arain
  • ベストアンサー率27% (292/1049)
回答No.1

限定せずに「情報を共有する」という観点からのみ記載します。 a. 値に変化があったらイベント(メッセージ)を通知し、イベント(メッセージ)を受けた側はデータを取得しに行く。 b. a.の簡略版。値に変化があったらイベント(メッセージ)を通知する。ここのイベント(メッセージ)に必要な情報を含めておく。 c. 複数のプロセスからアクセスできるメモリ領域(共有メモリ)を作成し、必要に応じてアクセスする。 但し、同じ値を複数のプロセスから更新すると不整合を起こす可能性が発生するため、 「更新は一つのプロセスからのみ」もしくは排他制御により更新中は他のプロセスからのアクセスを禁止する必要がある。 a.(b.)のイベントと組み合わせることも可能(イベント通知→共有メモリからデータ取得)

関連するQ&A

  • エントロピー(情報量)の性質

    情報理論の参考書で下のような、エントロピーに関する問題がありました。 3つの確率変数X,Y,Zについて次の(a)~(d)を証明せよ。また、その意味を解釈せよ。 (a) H(X,Y,Z)≦H(X)+H(Y)+H(Z) (b) H(X,Y,Z)=H(X|Y,Z)+H(Y|Z)+H(Z) (c) H(X,Y|Z)≦H(X|Z)+H(Y|Z) (d) H(X|Y,Z)≦H(X|Z)≦H(X) 証明はできたんですが、意味を解釈するというのがうまく説明できません。 一応自分なりに考えてみたんですが、どうも自信がありません。 どなたか、チェックしてくれれば嬉しいんですが・・・ よろしくお願いします。 (a)X,Y,Zの値を同時に知ったときに得られる情報量より、X,Y,Zの値を別々に知ったときに得られるそれぞれの情報量の和の方が大きい。 (b)Z→Y→Xという順で値を知ったとすれば、Z,Y,Xのそれぞれの値を知った時点で得られるそれぞれの情報量の和は、X,Y,Zの値を同時に知ったときに得られる情報量に等しい。 (c)Zの値が既知であっても、(a)と同様に値を同時に知ったときに得られる情報量より、値を別々に知ったときに得られるそれぞれの情報量の和の方が大きい。 (d)YとZの値が既知のときより、Zの値だけが既知のときの方が、そしてZの値だけが既知のときより、既知の値がないときの方が、Xの値を知って得られる情報量は大きい。すなわち、得ている情報が少ないほど、情報により得られる情報量が大きくなる。

  • fscanf関数について

    -------------------------------------------------- #include<stdio.h> #include<stdlib.h> int main() { FILE*fp; int ch,dt; char ss[80]; if((fp=fopen("bbb.txt","w"))==NULL){ printf("出力ファイルをオープンできません.\n"); exit(1); } fprintf(fp,"%c",'A'); fprintf(fp,"%s\n","abcdeABCDE"); fprintf(fp,"%d\n",1234); fclose(fp); if((fp=fopen("bbb.txt","r"))==NULL){ printf("入力ファイルをオープンできません.\n"); exit(1); } ch=fgetc(fp); printf("ch=%c\n",ch); fscanf(fp,"%s",ss); printf("ss=%s\n",ss); fscanf(fp,"%d",&dt); printf("dt=%d\n",dt); fclose(fp); return 0; } -------------------------------------------------- 以上のプログラムで、プログラムの通り「bbb.txt」は、 AabcdeABCDE 1234 となっております。 そこで疑問なのですが、「ch=fgetc(fp);」は1文字読み込みなので、'A'だけと分かるのですが、「fscanf(fp,"%s",ss);」はfpからの読み込みで何故、 AabcdeABCDE 1234 の全部を読み込まず、'A'を抜かした、「abcdeABCDE」だけを読み込んでくれるのか? 後、「fscanf(fp,"%d",&dt);」は何故「AabcdeABCDE」を抜かした、「1234」だけを読み込んでくれるのかが分かりません。 「fscanf(fp,"%d",&dt);」については数値だけを読み込んでくれるのかと思い、 ch=fgetc(fp); printf("ch=%c\n",ch); fscanf(fp,"%s",ss); printf("ss=%s\n",ss); の部分を無くせば、「1234」だけを読み込んでくれるのかと思ったのですが、数値は正しく表示されません。 以上教えていただければ嬉しいです。

  • テキストファイルから文字を読み込み最初の行を削除

    現在、リアルタイムでセンサーで値を取得してそれをファイルに書きだすと同時にgnuplotで描画するwindows(VC++)プログラムを作っております。 手順としては (1)ADCの装置から値が送信されるのでそれを取得 (2)fprintfでデータ書き出し (3)gnuplotでグラフを作る ということをやっています。 データの書き出し、リアルタイムでのグラフ表示はできるようになったものの、グラフを作る際、データがそれまで取った値全てのデータでグラフを作ってしまうので非常に膨大なデータをプロットしてしまいます。 そこで、「最新の1000個だけをプロットする」ようなことをしたいのですが、このとき、データを保存するファイルとは別に、一時ファイルを作り最新の1000個のデータをその一時ファイルに書き込みそれをplotすることを考えました。(1秒おきに、最新のデータが一番後ろの行について、1000個前のデータが削除される) しかしながら、「最初の行(1000個前のデータの行)を削除する」というところでどう実現すれば良いのか分からなくなってしまいました。 ご存じの方いらっしゃいましたら教えていただきたいです。 どうぞよろしくお願い致します。 ===== 一時ファイル ====== #a   b a0    b0    ←ここの行を削除したい! a1    b1    ・    ・    ・ a999 b999 a1000 b1000  ←ここが追加される

  • 標準出力とファイルに効率的に同じ出力をする方法

    C&C++でプログラムしています。 (以下は、できれば、Cの範囲内で行いたいと思います。) 結果の出力を画面とファイル両方に出力しています。 printf("A"); ... printf("Z"); fprintf(fp,"A"); ... fprintf(fp,"Z"); ただし、行数が多い場合には、ほとんど同じプログラムがだぶって書いてあり、画面用50行、ファイル出力用50行で、計100行とプログラム行数も長くなってしまいます。 サブルーチン化するなどの方法で、この2つのルーチンを短く記述することは、できないでしょうか? 例えば、 画面に出力する場合には、 fprintf(fp1,"***"); ファイルに出力する場合には、 fprintf(fp2,"***"); として、どちらに出力するかによってファイル指定子を変更できると良いのですが、可能でしょうか? よろしくお願い致します。

  • ノード元でfor-eachしたい

    こんにちは。はじめまして。 <A> <B> <C>1</C> <D>あ<D> </B> <B> <C>2</C> <D>い<D> </B> <Z> <Y>999</Y> <X>わ</X> </Z> <Z> <Y>888</Y> <X>ん</X> </Z> <A> というXMLで Aでfor-eachしたいんですが… それでBとCとYとXの値を取得したいのです。 これってできますか? どうもXMLの作り方が変で困っています。 スタイルシートのみでどうにかできないかと思い質問してみました。よろしくお願いします。

    • ベストアンサー
    • XML
  • エクセルのシート間の情報のやりとりについて教えて下さい。

    エクセルのシート間の情報のやりとりについて教えて下さい。 シート1で、以下のように配置し、 B列:年齢 C列:名前 D列:身長 E列:体重 これを30人分(30行)作成して、それぞれの値を記入しました。 シート2で、例えばA1に「20」と記入すると、B1にシート1の20行目のデータが「B1・C1・D1・E1」に記入されるようにしたいのです。 また、シート2のA2やA3も同様に「12」とか「10」とか、任意の値を入れると、シート1のその行数からデータを取得したいと考えています。 更にそのシート2で取得した情報を、シート3の任意のセルで文字列の中に埋め込みたいです。 もし、詳しい方がいましたら教えていただけないでしょうか。 お願いいたします。

  • 条件式がある場合の恒等式

    x+y+z=3、3x+2y+z=2のとき、xを用いてy、zを表せ。 また、このようなx、y、zについて常にax^2+by^2+Cz^2=14が成り立つとき 定数a、b、Cの値を求めよ。 という問題です! 答えは、y=-2x-1、z=x+4、a=7、b=-2、C=1 計算のやりかたがわからないので、 そこら辺をわかりやすく書いていただけると たすかります! お願いします(´・ω・`)

  • Excelを使った数値の計算 (数列の和?)

    こんにちは。お世話になります。 A1+B1+C1+……+Z1の値は =SUM(A1:Z1) で求まることは知っているのですが、 では、 (A1÷8)+(B1÷8)+(C1÷8)+……+(Z1÷8) の値はどのように表現すれば求めることができますか? (↑割り算記号÷に関して、 A1の値が25のとき、A1÷8の値は3として計算してほしい、という意味です。A1からZ1はすべて正の整数です。) よろしくお願いします。

  • エクセル/マクロについて

    例えば、 A1のセルに株価をリアルタイムで表示させています。(楽天証券リアルタイム・スプレッドシート利用) B1のセルに売買の目安として"1,501"(円)と入力しておきます。 A1の値は相場時間中つねに変動するのですが、一度でもB1の値である"1,501"をつけた場合に、C1のセルに"Y"と表示するようなマクロはどう組めば良いのでしょうか? あるいは、マクロを使う以外の方法があるのなら教えてください。 よろしくお願いします!

  • 2つの情報を1つのSQLで取得する方法について

    お世話になります。 SQL文で、下記内容のデータを取得する方法がわかりません。 ・TESTテーブルからA、B、Cの3項目のデータを取得する。 ・但し、この中のC項目については、WHERE句の条件を満たす データの最大値を取得する。 ・項目AおよびBの取得条件は、項目Cと同一条件とする。 ・目的は、項目AおよびBに関しては、WHERE句の条件を満たす  全てのレコードを取得し、項目Cにおいては最大値のみ取得したい。 上記内容を取得しようと考えた場合、 現時点で下記のSQL文を作成して実行しましたが、 うまくデータが取得できません。 SELECT A, B, C FROM TEST WHERE C = (SELECT MAX(C) FROM TEST) AND Z = 'xxxxx' AND Y = 'x' AND X = 'Y' ※項目X, Y, ZはTESTテーブルのカラムです ※上記SQLを、A、Bのみ取得用とCのみ取得用に   それぞれ分解して実行すると、それぞれの結果は   正常に取得できます。 2つの結果を1つのSQLで取得することは可能でしょうか? どなたかご教授願えますか?よろしくお願いいたします。

専門家に質問してみよう