~xdavidwu/motion-control

2273819d74e67194ed941f83ea8084bae79ceb14 — xdavidwu 2 years ago 1b2a0bd
ahrs: tilt: fix direction
1 files changed, 4 insertions(+), 4 deletions(-)

M ahrs/tilt/tilt.ha
M ahrs/tilt/tilt.ha => ahrs/tilt/tilt.ha +4 -4
@@ 9,14 9,14 @@ export fn new(neutral: (f64, f64, f64)) tilt = {
};

export fn estimate(tilt: tilt, readings: (f64, f64, f64)) quaternion::quaternion = {
	// r = q neutral q^(-1), find q
	// neutral = q r q^(-1), find q
	let r = quaternion::normalize((0.0, readings.0, readings.1, readings.2));
	const dot = tilt.neutral.1 * r.1  + tilt.neutral.2 * r.2 + tilt.neutral.3 * r.3;
	const angle = math::acosf64(dot);
	const axis = (
		tilt.neutral.2 * r.3 - tilt.neutral.3 * r.2,
		tilt.neutral.3 * r.1 - tilt.neutral.1 * r.3,
		tilt.neutral.1 * r.2 - tilt.neutral.2 * r.1,
		r.2 * tilt.neutral.3 - r.3 * tilt.neutral.2,
		r.3 * tilt.neutral.1 - r.1 * tilt.neutral.3,
		r.1 * tilt.neutral.2 - r.2 * tilt.neutral.1,
	);
	return quaternion::from_axis_angle(axis, angle);
};