

**聞きたいこと**  
現在、加速度センサーから速度を計算するプログラムを作成していますが、速度の異常がなかなか解消されません。この問題をどのように解決すればよいでしょうか。

**目標**  
加速度センサーの値から+-1km程度の誤差の速度を求めたいです。

**状況**  
速度から速度を計算するプログラムを作成していますが、速度の異常がなかなか解消されません。具体的にはセンサーを加速させて一旦停止した際にセンサーを動かしていないにも関わらず速度の値が上昇し続けている状態です。

**これまでに試したこと**  
誤差を修正するために、キャリブレーションを追加しました。それにより、初期のプログラムに比べ誤差が軽減されましたが、まだ改善されていない部分があります。具体的には、センサーを加速させて一旦停止した際にセンサーを動かしていないにも関わらず速度の値が上昇し続けている状態です。

**センサー**  
MPU-9250

**コード**

[code]

    #include "Wire.h"
    #include "I2Cdev.h"
    #include "MPU6050.h"
    
    
    int16_t ax, ay, az;
    long ave =0;
    
    float calculated_velocity = 0;  //合計速度
    float current_velocity = 0;     //加速度*処理時間
    
    unsigned long time = 0;
    
    
    MPU6050 accelgyro;
    
    
    void setup(){
       Wire.begin();
       Serial.begin(115200);
    
       Serial.println("Initializing I2C devices...");
       accelgyro.initialize();//センサーを初期化
       accelgyro.setFullScaleAccelRange(MPU6050_ACCEL_FS_16);
    
       Serial.println("Testing device connections...");
       Serial.println(accelgyro.testConnection() ? "MPU6050 connection successful" : "MPU6050 connection failed");
       pinMode(13, OUTPUT);
       time = micros();//プログラムの動作開始からの時間
    
       for(int i = 0; i < 500; i++){
          accelgyro.getAcceleration(&ax, &ay, &az);
          ave += ax;
       }
       ave /= 500;//誤差の平均
       Serial.println("Calibration is complete.");
    }
    
    
    void loop(){
       unsigned long now = micros();
       float duration = (now - time)/1e6;//処理にかかった時間
       time = now;
    
       current_velocity = 0;
       //姿勢検出シールドのセンサーの値をチェックし、各変数に記録する
       accelgyro.getAcceleration(&ax, &ay, &az);
    
       current_velocity = (ax-ave) * duration / 204; //(x軸の加速度-誤差)*処理にかかった時間/204
       calculated_velocity += current_velocity;
    
       Serial.println(calculated_velocity*3.6,3); //3.6はm/s→km/h、","の後ろの数は桁数
    
[/code]


CC BY-SA 4.0
2023-04-29T15:55:46.277
94686
2023-04-30T09:26:19.850
2023-04-30T02:15:23.340
58105
58105
question
c arduino
加速度センサーを用いて速度計を作成していますが、正しい速度が得られません。


> 加速度センサーの値から+-1km程度の誤差の速度を求めたいです。

原理的に見て、それは無理なはなしです。  
全く誤差がないという状況では、計算上速度を得ることができるでしょうが、  
残念ながら、現実はそういうわけには行きません。


CC BY-SA 4.0
2023-04-30T09:26:19.850
94691
2023-04-30T09:26:19.850
27481
94686
answer