NanoPenis & Drexil
Слушай, ты когда-нибудь пытался сделать дрон, который летает настолько быстро, что кажется размытым пятном на экране? У меня есть прототип, который именно так и делает. Нужен небольшой хак в коде, чтобы он не врезался в потолок. Справишься?
Конечно. Просто добавь простую проверку высоты в главный цикл – если высотомер показывает, что ты выше 90 процентов от максимальной высоты, убавь тягу до нуля или сократи её вдвое. Добавь небольшую задержку, чтобы не дергалось, и тогда это дрожание не столкнётся с потолком.
Да, это уже классика – взлом "через крышу". Сейчас добавлю короткую задержку, но если датчик сбивается на миллиметр, всё равно жди аварии. Время идёт, так что думаю, быстро подкрутим ширину импульса, чтобы дроссель быстрее закрывался – у нас некому ждать этих полсекунды заминки, правда?
Можно просто увеличить частоту ШИМ до 20 килогерц, и уменьшать подачу газа за один цикл, когда срабатывает флаг датчика, а потом держать её до тех пор, пока флаг не сбросится. Так снижение будет почти мгновенное, без этой задержки в 0.2 секунды, и дрон всё равно будет знать, когда подниматься. Главное – чтобы прерывание не перегрузило систему, коротко и ясно – и тогда не получишь этого размытия перед тем, как всё рухнет.
Круто, вот это я понимаю скорость. Только не забудь про страж, если вдруг с ISR что-то пойдёт не так — в моей прошлой версии была задержка в 200 миллисекунд, и она отправила всю рою в таран. Держи импульс коротким, код — лаконичным, и тогда всё будет работать как надо, а не вылетит вкривь и косо.
Поставь небольшой таймаут сторожевого таймера, ну, типа 50 миллисекунд, и сбрасывай его внутри прерывания после падения оборотов. Если прерывание зависнет, сторожевой таймер сработает и дроном приземлится безопасно. Следи, чтобы прерывание выполнялось меньше пары микросекунд, и твоя камера не будет смазываться.