3つのセンサを同期してデータを取得したいです.

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
オグ

3つのセンサを同期してデータを取得したいです.

#1

投稿記事 by オグ » 13年前

初めまして,オグと申します.

現在,卒業研究で実験車両のプラットフォームをC++言語で構築しています.
その中で,3つのセンサを同期してデータを取得したいのですが,どうもやり方がわかりません.

現在の開発環境,センサ概要は下記のようになっています.
開発環境
●Windows XP
●Visual Studio 2010 C++
●Win32コンソールアプリケーション

センサ(すべてシリアル通信でRS232c→USB→PC)
●レーザレーダ(サンプリングタイム25ms)
●9軸ジャイロセンサ(サンプリングタイム10ms~1000ms:可変)
●車速センサ(サンプリングタイム250ms)


サンプリングタイムが各センサでバラバラなため同期に難航しています.
また,各センサ1つ1つでのデータ取得はできます.


現在は,各センサそれぞれ独立でデータ取得・更新を行い,PCの時間で区切ってそれぞれのデータを引抜いてきて,同期データを取得するようなプログラムを作りたいと思っています.
卒業研究を始めるにあたって,C言語を勉強し始めた様な初心者で申し訳ないのですが,ご回答宜しくお願い致します.

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 3つのセンサを同期してデータを取得したいです.

#2

投稿記事 by softya(ソフト屋) » 13年前

はじめまして。
25msや50m周期で揃えれば大丈夫そうに見えますがダメなのでしょうか?
あとどうやっても、マルチタスクOSであるWindows XPの場合は最低数ms台の誤差は出るのですが問題はないですか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

beatle
記事: 1281
登録日時: 14年前
住所: 埼玉
連絡を取る:

Re: 3つのセンサを同期してデータを取得したいです.

#3

投稿記事 by beatle » 13年前

オグ さんが書きました: 現在は,各センサそれぞれ独立でデータ取得・更新を行い,PCの時間で区切ってそれぞれのデータを引抜いてきて,同期データを取得するようなプログラムを作りたいと思っています.
それなら、各センサは非同期でデータを更新しつつ、メインスレッドからタイマーか何かで各センターのデータが格納されている変数を読み取る、というのはどうでしょうか。

コード:

double sensor_data[3];

//3つのセンサーが非同期にデータを更新する
void raser_rader_received(double value)
{
    sensor_data[0] = value;
}
void gyro_received(double value)
{
    sensor_data[1] = gyro;
}
void velocity_received(double value)
{
    sensor_data[2] = value;
}

// タイマーにより一定間隔で呼び出される
void timer_tick()
{
    // sensor_data[0], ... , sensor_data[2]を使って何らかの処理
}

オグ

Re: 3つのセンサを同期してデータを取得したいです.

#4

投稿記事 by オグ » 13年前

softyaさん,beatleさん
ご返答有難うございます.また,連絡が遅れて申し訳ありません.

現状では,9軸ジャイロセンサとレーザレーザの同期については確認できました.(50ms周期)
また,数ms台の誤差は問題ありません.
beatleさんにご指摘いただいた通り,各センサを非同期で更新しつつ,タイマーで各センサのデータを引抜くように,同期プログラムを作成しています.

今,現在で問題となっているのは車速センサの同期方法です.
車速センサを含めて同期を行うと,その他のセンサのデータ取得に200ms程,遅れがでてしまいます.

そのため,車速センサ単体でのデータ取得の時間計測をしたところ,1回データを取得し終わった後に,200msほどループが止まっていることが判明しました.
車速センサのデータ取得についてはReadFile関数で文字列を1行分読み取っているだけです.
【1行分読み込んだ後に次の文字列のヘッダを受信するまで待つ】という処理は行っていません.
現在は,この問題で悩んでいます.

アドバイスを宜しくお願い致します.

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 3つのセンサを同期してデータを取得したいです.

#5

投稿記事 by softya(ソフト屋) » 13年前

それだけの情報では何とも言えませんが、
>200msほどループが止まっていることが判明しました.
どの関数で止まっているのでしょうか? 肝心な情報が抜け落ちています。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

“C言語何でも質問掲示板” へ戻る