I am trying to calculate accel and gyro noise and random walk for Intel realsense using allan variance. I quickly generated imu csv in the format specified here using custom CPP script for just 3 seconds. I wanted to check if it will work or not before recording 20 hours of IMU data.
I created ros bag from csv by running:
rosrun kalibr kalibr_bagcreater --folder ./data/imu_data --output-bag ./data/newbag.bag
Checking the bag created:
root@e9408da6622e:/data# rosbag info /data/data/newbag.bag
path: /data/data/newbag.bag
version: 2.0
duration: 2.4s
start: Dec 30 2023 18:41:25.42 (1703961685.42)
end: Dec 30 2023 18:41:27.84 (1703961687.84)
size: 312.7 KB
messages: 830
compression: none [1/1 chunks]
types: sensor_msgs/Imu [6a62c6daae103f4ff57a132d6f95cec2]
topics: /imu0 830 msgs : sensor_msgs/Imu
Then I converted it to allan variance compliant bag by running:
rosrun allan_variance_ros cookbag.py --input /data/data/imu_data/newbag.bag --output /data/data/imu_data/cooked_bag.bag
Checking the bag created:
root@e9408da6622e:/catkin_ws# rosbag info /data/data/imu_data/cooked_bag.bag
path: /data/data/imu_data/cooked_bag.bag
version: 2.0
duration: 2.4s
start: Dec 30 2023 18:41:25.42 (1703961685.42)
end: Dec 30 2023 18:41:27.84 (1703961687.84)
size: 41.7 KB
messages: 830
compression: lz4 [1/1 chunks; 8.47%]
uncompressed: 296.1 KB @ 122.5 KB/s
compressed: 25.1 KB @ 10.4 KB/s (8.47%)
types: sensor_msgs/Imu [6a62c6daae103f4ff57a132d6f95cec2]
topics: /imu0 830 msgs : sensor_msgs/Imu
I created allan variance config file imu_confog.yaml:
imu_topic: "/imu0"
imu_rate: 346
measure_rate: 346 # since bag contains 830 messages / 2.4 seconds = 345.8333 approx 346
sequence_time: 3 # since bag contains 2.4 seconds worth of data
(I also tried with both rates 400, no luck.)
Here is how my data folder looks like:
Then I run allan variance:
root@e9408da6622e:/catkin_ws# rosrun allan_variance_ros allan_variance /data/data/imu_data /data/data/allan_variance/imu_config.yaml
And finally run Analyse.py:
root@e9408da6622e:/catkin_ws# rosrun allan_variance_ros analysis.py --data /data/data/imu_data/allan_variance.csv --config /data/data/allan_variance/imu_config.yaml
/catkin_ws/src/allan_variance_ros/scripts/analysis.py:23: RuntimeWarning: divide by zero encountered in log
logy = np.log(y)
Traceback (most recent call last):
File "/catkin_ws/src/allan_variance_ros/scripts/analysis.py", line 101, in <module>
accel_wn_intercept_x, xfit_wn = get_intercept(period[0:white_noise_break_point], acceleration[0:white_noise_break_point,0], -0.5, 1.0)
File "/catkin_ws/src/allan_variance_ros/scripts/analysis.py", line 24, in get_intercept
coeffs, _ = curve_fit(line_func, logx, logy, bounds=([m, -np.inf], [m + 0.001, np.inf]))
File "/usr/lib/python3/dist-packages/scipy/optimize/minpack.py", line 708, in curve_fit
ydata = np.asarray_chkfinite(ydata, float)
File "/usr/lib/python3/dist-packages/numpy/lib/function_base.py", line 495, in asarray_chkfinite
raise ValueError(
ValueError: array must not contain infs or NaNs
But as you can see it is giving error array must not contain infs or NaNs. Turns out there are some NaNs in allan_variance.csv file generated. What I am doing wrong here?
I have uploaded all bags and csv file on drive here.