Чтобы построить беспилотник практически с нуля, необходимо сначала рассмотреть огромный объем работы, который в большинстве случаев приходится собирать воедино из самых разных тем, от SPI (последовательный периферийный интерфейс) до эффективного проектирования микросхем. Используя некоторые уже существующие библиотеки, такие как Boost и Qt, я сокращаю большую часть работы, которая в противном случае заняла бы почти вечность. Я также строю поверх уже существующего кадра этого беспилотника UDIRC: http://www.udirc.com/Products_show.asp?pro_id=594
Во всем, что связано с разработкой этого дрона, есть определенная ярость, так как я постоянно работаю над уничтожением жуков, приближающихся со всех сторон. В настоящее время основные проблемы, с которыми я сталкиваюсь, связаны с NRF24L01 + LNA + PA, которые, похоже, не могут отправлять что-либо по беспроводной сети с довольно хорошей вероятностью успеха. Менее 1% всех пакетов данных доходят до принимающей стороны, и это только после тестирования nrfs с конденсаторами 0,1 мкФ между VCC и землей. Я разберусь с этим. Еще одна неприятная проблема, хотя и не ошибка, заключается в том, что NRF24L01 является полудуплексным, а это означает, что он не может передавать и получать одновременно. Это очень дорого. При необходимости переключаться из режима передачи в режим приема я трачу время и силы впустую. Сейчас меня больше всего беспокоит время, поскольку единственная причина, по которой я использую C++, заключается в том, чтобы сделать код быстрым, но при этом доступным. Это также мой первый раз, когда я использую C++, что означает еще больше боли/забавы. Ура!
Что касается датчика, я использую IMU с MPU9255 и BMP180 для большинства показаний гироскопа и барометрического давления. Он также поставляется с интегрированным магнитометром! Как здорово! Оказывается, нет. По крайней мере, в настоящее время. После второго показания магнитометра пример кода, который я использую для проверки целостности датчика, застревает внутри цикла, постоянно считывая данные магнитометра, которые становятся доступными быстрее, чем они считываются, поэтому он никогда не распечатывается. Так что это весело.
Положительным моментом является то, что у меня есть последовательный интерфейс, работающий через внешнее приложение, отличное от Arduino IDE, и это было достигнуто с помощью Boost, который я настоятельно рекомендую практически всем. Он не только хорошо задокументирован, но и имеет настолько обширную кодовую базу, что его можно использовать для множества целей. 10/10. Рекомендовал бы.
Вероятно, через 4–5 недель я начну создавать графический интерфейс для запуска интерфейса дрона на стороне клиента для ввода с клавиатуры и тому подобного. Это откроет совершенно новую червячную систему ввода, основанную на событиях. Прямо сейчас я работаю с идеей без каких-либо реальных предварительных знаний о чем-либо, связанном с поставленной задачей. Вкратце, мою текущую позицию можно резюмировать комиксом XKCD:
