HyperSLAM icon indicating copy to clipboard operation
HyperSLAM copied to clipboard

stereo_inertial error

Open zzwu29 opened this issue 1 year ago • 5 comments

Thanks for your great work! But I have a question, could you please help me solve it? When I run stereo settings, all is ok

python run.py stereo --datasets euroc --sequences MH_01_easy

But with the stereo_inertial setting, I cannot get the right output

python run.py stereo_inertial --datasets euroc --sequences MH_01_easy

图片 Finally, I cannot find the script comparison.py to compare multiple result folders with the above layout.

Thank you!

zzwu29 avatar Mar 31 '23 06:03 zzwu29

Hi, can you run stereo-inertial mode correctly? I can't run it correctly

WuZihao12 avatar May 25 '23 07:05 WuZihao12

@zzwu29

WuZihao12 avatar May 25 '23 08:05 WuZihao12

Hi, can you run stereo-inertial mode correctly? I can't run it correctly

Sorry, I can't. If you have a method, please contact me.

zzwu29 avatar May 25 '23 10:05 zzwu29

I am grappling with the same problem. Have you folks conquer this pitfall?

JzHuai0108 avatar May 17 '24 04:05 JzHuai0108

I am also running the stereo + IMU version, but there is also an error, which seems to come from optimizer.cpp:

auto CeresOptimizer::updateSensor(IMU& /* imu /, const Range& / range */) -> void { CHECK(false); }

Backtracking this function, I can be found:

auto AbstractOptimizer::process(const InertialMeasurement& message) -> void { // Fetch parameters. const auto& stamp = message.stamp(); auto& imu = const_cast<IMU&>(message.sensor());

// Update gyroscope bias. const auto& gyroscope_bias = imu.gyroscopeBias(); const auto& accelerometer_bias = imu.accelerometerBias(); if (gyroscope_bias.elements().empty() || accelerometer_bias.elements().empty() || !gyroscope_bias.range().contains(stamp) || !accelerometer_bias.range().contains(stamp)) { updateSensor(imu, window_); } DCHECK(gyroscope_bias.range().contains(stamp)); DCHECK(accelerometer_bias.range().contains(stamp));

// Create observation and residual. auto& observation = mutableEnvironment().addInertialMeasurement(message); add(observation); }

Although I haven't read the entire project file, I feel that this is the content of the IMU update, so I suspect that the current version of the code has not yet released the inertia content. The author should have left an interface, and the assertion failed when the interface was called, which may be the reason for the error. I hope the author can open source this part. If the above statement is wrong, please correct it!

ZzhYgwh avatar Jun 25 '24 07:06 ZzhYgwh

@ZzhYgwh is correct in assuming that the IMU support would have been added (or rather ported) in a future patch. Compared to its original internal version, HyperSLAM underwent extensive structural remodeling before its release, resulting in the sub-repositories now available on GitHub. However, development on HyperSLAM has largely been discontinued due to limited resources and manpower.

Attached, you will find the exact original version of HyperSLAM used for our evaluations (to the best of my knowledge). Please note, however, that its overall structure significantly differs from the publicly available version and is provided as is.

HyperDevelop-IROS2022.zip

In favor of further developing HyperSLAM, we shifted our focus to eliminating the associated complexity of spline residual evaluations altogether as well as implementing a distributed optimization framework. The soon-to-be-released Hyperion includes far superior auto-generated residual/cost implementations which you might find helpful to quickly develop a continuous-time pipeline tailored to your needs.

McEmzi avatar Jul 22 '24 08:07 McEmzi