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