Это да, но преимущества побайтного анализа перед строковым не ясно, если действия происходят на основе всего пакета-группы байтов принятых…на грудь.
Вам можно!
Я не понял вас… у меня гекса с пульта управляется. Какое отслеживание текущего положения имеете ввиду?
вообще не надо заниматься анализом ни байтов ни строк, оперируете чистыми данными
Вроде смысл “абзаца” осилил. Тут важный момент кроме сцепления-отталкивание - это поведение остальных лап в этот момент. Иначе царапанье так и останется на месте.
Скорее я вас…по 2 “абзацу”.
или чистой энергией.
строковые больше места занимают для тех же данных, если речь о числах. Обработка строк (поиск подстроки, получение подстроки, усечение, конвертация в число и т.д.) тоже процедура долгая. Поэтому получение сразу нужных данных имеет много преимуществ над строками. Строки в свою очередь более юзер-френдли, я чисто из-за этого их выбрал, а также потому что мне как минимум в 1 сторону все равно отправлять исключительно текст.
ну самая простая реализация это “три на земле и три переставляются” Вы как только движение по вектору начинаете, сразу лапы 0, 2, 4 отправляете в направлении вектора на край окружности переставляться (поднятыми), а лапы 1, 3, 5 у вас в это время из центра до края землю толкают в противоположном направлении. Они должны эту фазу за одинаковое время закончить и тогда 0, 2, 4 начинают толкать землю уже от края до края (вначале было от центра) а 1, 3, 5 переставляются.
ну тут я попрошу вас вчитаться и конкретизировать, что именно непонятно, чтобы я перефразировал
Приняли пакет в packet[…]
Бинарный: 5A 0A FF
Сравниваем второе число в пакете: if (packet[2] < 0} { .... }
Строковый: #10$-1$
Сравниваем второе число в пакете: ...скоко операций для этого нужно?..
Я на ней и завершил все свои опыты с гексаподом
Не, я пока буду переваривать 1 абзац. Идея с кругом интересная… в кадровом восприятии.
Ясно, вопрос экономии времени…а я думал волшебный протокол для каждого байта
Вот вам рисунок чтоб понятнее было. Серым обозначена область, в которую лапа в принципе может попасть (у меня ограничение Х до 0, а так еще под себя подломиться немного может). Синим я выделил цилиндр оптимальной на мой взгляд высоты и радиуса, в пределах которого лапа будет перемещаться когда шаги/перестановки совершаются. Справа боковое сечение всего этого дела чтоб понятнее было, как выглядит область. Может даже углядите за счет каких размеров плечей конечности она именно такая получается
Вот нашел в старых записях схематику этого дела с метками размеров
это если сервы -90..+90 могут, и механика их в этом не ограничивает. R = L1 + L2, r = L2 - L1
вот наш легендарный второй абзац с этого начался. Попробую немного с другой стороны зайти.
Во-первых нужны хорошие сервы, с маленькой deathzone - то есть которые довольно быстро начинают реагировать на изменение ШИМ и имеют неплохую точность. А то я видел mg996 (скорее всего подделка) как ШИМ на 5 градусов меняешь а им по барабану.
Во-вторых надо перемещения либо как вы в кадрах делать, и чем больше кадров тем лучше, но между ними нужна задержка, чтобы все сервы успевали провернуться на нужный угол. Либо рассчитывать траектории, например, как я параметрическими линиями, и следить чтобы рост параметра был отмасштабирован по времени. Оба варианта как бы обеспечивают плавность движений конечностям робота
Добавлю: у вас в любом случае получится движение немного рывками, т.к. за один шаг какой-то серве надо будет на 4 градуса повернуться, другой на 2 а третьей на 0.8 (условно) и им на это разное время потребуется, но при очень малом шаге разница сгладится, в т.ч. за счет люфтов в конструкции
Да, именно это - слабость sg90, печатных деталек и аккумулятора поспособствовали моему выбору в сторону 12 серв на гексапода. Поигрался и разломал.
Ну да, в моём варианте (двуного на 17 сервах) у каждой сервы меж кадрами были значения углов (в этих кадрах), их разница давала число одноградусных шагов, а общее время межкадрового перехода делилось на разницу углов. Так получалась задержка для каждой сервы на одноградусный сдвиг…вроде правильно вспомнил. Самописная функция в аргументах имела номера кадров и длительность межкадрового перехода.
как же я вас понимаю… я вот сначала хотел очень дешево, заказал mg90s клоны, а они прям говнище полное. Шестерни с плохой точностью сделаны и из-за этого потери в редукторе колоссальные, ни о каких 2.5кг/см там и близко речи нет. Одну поставил плавно менять угол от 0 до 180 непрерывно - через 15 минут у нее клей под наклейкой начал пузыриться, так сильно нагрелась.
Недавно пришли mg90d оригинал - вот с ними всё прям замечательно. Только цена в 4 раза дороже клона и корпус немного другой - пришлось робота полностью перерисовать и перепечатать. Но оно того стоило
Оставьте ссылку на продавца, что б народ знал какие сервы надо. Я лет 10-15 назад на ВДНХ видел гекса -самоделку другой ценовой доступности - алюминиевые листовые детали, сервы чёрные с мет. редуктором и питание по-моему через кабель. Но и размеры внушительные.
я сомневаюсь, что это по правилам форума разрешено, вот на фотке признаки оригинала:
и цена 12+ килорублей за 20шт
на алишке видел подходящие под описание наборы, без серв вообще не особо дорого, сервы там обычно как раз mg996 не очень хорошие в плане точности и мертвой зоны. И самое плохое, что 2 и 3 колено как правило во всех таких сборках на валу сервопривода только держатся, т.е. всегда нагрузка на излом вала
это цифровые сервы, были бы Футаба то ещё дороже
Ну, если чтение у нас неблокирующее, то обычно такое обходится
- написанием своего враппера, который блокируется, или
- использованием API операционной системы, например, если Serial представлен файловым дескриптором (как сделано на ESP32 бордах), то можно туда выполнить ioctl() для blocking I/O, или воспользоваться функцией типа select().
Ежели ничего из вышеперечисленного в п.2 нет, то тогда пишется своя функция, типа такой:
uint32_t БлокирующееЧтение(Таймаут) {
Цикл( пока не Таймаут, или не прочитано нужное количество байт) {
Если (есть, что читать) {
Читаем()
}
Задержка( Маленькая ); // дать возможность поработать другим задачам, например
}
Вернуть(Прочитанное)
}
Polling - это, конечно, не лучшее решение, но что поделать, если железо такоэ…
забавный коммент
Вы в курсе, что РТОС в ардуино далеко не везде есть?
Я бы даже сказал, что его нигде, кроме ЕСП32, нет.
Какие, нафик, “другие задачи” в Задержке?