Есть такая пословица:
- человек, у которого есть часы, точно знает сколько сейчас времени. Человек, у которого есть двое часов, точно ничего не знает.
Ну правильно, как определить какие из двух часов показывают более правильно, да и вообще работают?
Такая же ситуация происходит с любыми датчиками, поэтому в системах с резервированием ставят по 3 однотипных датчика, и чьи показания ближе друг к другу те и используют. Называется по научному такой подход мажорированием. А вот обычное дублирование датчиков, так любимое в гражданской авиации, практически бесполезно ибо при разных показаниях (например) двух высотомеров ситуация именно как с двумя часами - какому же из них верить? Такая неопределенность послужила причиной многих авиакатастроф...
Поэтому известие о том, что в контроллере семейства PixHawk установлено по два гироскопа и акселерометра мной было воспринято весьма скептически. Однак оказалось, что новая версия АрдуКоптера (3.3.3) прекрасно справляется не только с выбором исправного датчика из двух, но и умеет определять недостоверность показаний единственного компаса!
Магия? Почти, ибо как сказал Артур Кларк, "Любая достаточно развитая технология неотличима от магии", и вот очередное тому подтверждение. Имя этой магии - Фильтр Кальмана, используемый в новых прошивках, в которых нет ограничений от мелкого 8-битного процессора. Детальное описание работы фильтра Кальмана это целый учебник, но если в двух словах то он позволяет собрать все данные со всех датчиков вместе и по корреляции между ними делать выводы о состоянии системы. Например (жутко упрощенно): компас говорит что мы поворачиваем а оба гироскопа молчат - значит врет компас!
Вот ведь до чего техника дошла, на плате размером 35*35мм мы имеем полный автопилот, который летает лучше любого человека! Именно так - ибо у человека реакция в лучшем случае 0.2 секунды, а у автопилота 0.0025 - частота опроса датчиков и выдачи результата на управление идет 400 раз в секунду. И теперь он еще и научился понимать полную картину происходящего (Фильтр Кальмана), каково?!