Делаю тут автопилот для кораблика.
В общем -то все получилось и работает/плавает нормально но есть проблема
и проблема эта - компас.
Использую модулек HMC5883
Естественно проблем со считыванием данных из него не имею. выдает числа от -160 до +120 по х и от -120 до +60 по Y
Ну я программно высчитываю середину и масштабирую к чистому выходу -100...0...+100
дальше делаю расчеты во флоате.
Код: Выделить всё
d = atan2(MAGFilt[0]*1.0 - MAGOffset[0]*1.0, MAGFilt[2]*1.0 - MAGOffset[2]*1.0);
d = d * (180.0/PI);
Course = d;
Course += 90;
Course += MagCalib.MagOffset;
но это все справедливо только для платы которая идеально паралельна поверхности земли...ну или наклонена так же как и при калибровке пределов и средних значений(кораблик на малом ходу делает пару кругов почета).
Так вот если наклонить кораблик сильнее - тоесть на корму поставить груз - кораблик проседает жопой и показания компаса уже улетают в хрень. ну скажем при наклоне на столе кораблика на 20-30" показания уходят на +-30 градусов в зависимости в какую сторону наклонять.
Вот и вопрос - как правильно обсчитать дополнительную третью ось магнитомера?
Может нужны ещё акселерометр 3осевой чтоб вектор гравитации получать. но какими формулами это все потом связать?
Кто сталкивался/делал/изучал - ничего не подскажет? Ато все что находил я - это примерно такие же реализации как и у меня или сложные матричные уравнения под матлаб.
Не доверяйте русским лужам - это может быть вход в метро.



