Добрый день, форумчане. Уже почти полностью собрал робота-паучка с 8-ю ногами. Осталась реализовать программную часть, но вопрос не об этом. После месяца поисков, еше в самом начале своего проекта, увидел в продаже сервоприводы MG995. Почитав несколько обзоров, решил их приобрести. Сначала всё шло замечательно. Снял все размеры с приводов, сконструировал и собрал корпус, прикрутил все приводы. Масса готового устройства составила чуть больше 3 кг (приблизительно 3300 гр без аккумулятора (Li-Po 10000 mA 7,2V - 500 грамм)) и тут пошлю траблы. Один из приводов перестал держать уровень, вернее держит, но очень слабо, прокручивается при небольшом усилии (около 500 грамм). Остальные - пока держат, но чувствую что не долго будут держать. Покупал за 225 рэ за штуку. К Новому году скорее всего буду искать замену. Подскажите, какие посоветуете поставить приводы со стабильной тягой в течении продолжительного периода. По тяге - желательно 10 кг в стабильном режиме. И естесственно - не дорогие, можно даже на ebay.com. Как один из вариантов hs-645mg, но цена пока кусается немного. Или HK-15298 (15 кг) (http://rcsearch.ru/hobbyking/i16271/)
Материал соединений - текстолит толщиной 2 мм (это верхняя и нижняя планки в самом плече). Соединены с помощью латунных стоек для плат. Материал двух суставов - дюралюминий 0,8 мм. Сама конструкция ноги - примерно такая, как на рисунке (http://habrastorage.org/storage2/8fa/345/91e/8fa34591ea132609ed2d2a83f4bf64c6.jpg), но без эстетического вида.
Корпус платформы - две плоскости текстолита. К верхней плоскости смонтированы приводы, в нижней части фиксация через подшипники.
Вся конструкция получилась прочной, но легкой. Общий вес приводов - 1440 грамм (60 гр / привод), остальное - конструкция (детали ног - 60х8=480 + коробка - 300 гр). Сверху всего установлен ПК (200 гр) и камера (100 гр).
Получившийся размер платформы - 25 см в ширину и 30 см в длину (без ног). Размах ноги - 15 см. В общем, вес где-то 2600 - 3000 грамм без аккумулятора.
Из всех 27 сервов HK15298B оказалась 1/3 бракованными, но тяга у них очень хорошая. Сразу предупреждаю что они могут поворачивать только на угол 90 градусов.
DEVICE="/dev/ttyACM2"
N_TARGET=$1 # Количество одновременно управляемых каналов
N_CHANNEL1=$2 # Номер первого канала в цепочке
TARGET11=$3 # Угол поворота
TARGET12=$4 # Угол поворота
TARGET13=$5 # Угол поворота
N_CHANNEL2=$6 # Номер второго канала в цепочке
TARGET21=$7 # Угол поворота
TARGET22=$8 # Угол поворота
TARGET23=$9 # Угол поворота
N_CHANNEL3=$10 # Номер третьего канала в цепочке
TARGET31=$11 # Угол поворота
TARGET32=$12 # Угол поворота
TARGET33=$13 # Угол поворота
N_CHANNEL4=$14 # Номер четвертого канала в цепочке
TARGET41=$15 # Угол поворота
TARGET42=$16 # Угол поворота
TARGET43=$17 # Угол поворота
byte() {
printf "\\x$(printf "%x" $1)"
}
{
byte 0xAA #Start Byte
byte 0x0C #Device ID = 12
byte 0x1F #Command = Set Multiple Targets # Команда управления несколькими сервами
byte $N_TARGET #0x02 #Number of targets = 2 # Количество управляемых каналов одновременно
byte $N_CHANNEL1 #0x00 #First channel number = 0 # Номер первого канала в цепочке
byte $(((TARGET11*36+2048) & 0x7F)) #0x70 #First target low bits <- First SERVO
byte $(((TARGET11*36+2048) >> 7 & 0x7F)) #0x4E #First target high bits
byte $(((TARGET12*36+2048) & 0x7F)) #Second target low bits <- Second SERVO
byte $(((TARGET12*36+2048) >> 7 & 0x7F)) #Second target high bits
byte $(((TARGET13*36+2048) & 0x7F)) #Thread target low bits <- Second SERVO
byte $(((TARGET13*36+2048) >> 7 & 0x7F)) #Thread target high bits
} > $DEVICE
sleep 0.3
{
byte 0xAA #Start Byte
byte 0x0C #Device ID = 12
byte 0x1F #Command = Set Multiple Targets # Команда управления несколькими сервами
byte $N_TARGET #0x02 #Number of targets = 2 # Количество управляемых каналов одновременно
byte $N_CHANNEL2 #0x00 #First channel number = 0 # Номер первого канала в цепочке
byte $(((TARGET21*36+2048) & 0x7F)) #0x70 #First target low bits <- First SERVO
byte $(((TARGET21*36+2048) >> 7 & 0x7F)) #0x4E #First target high bits
byte $(((TARGET22*36+2048) & 0x7F)) #Second target low bits <- Second SERVO
byte $(((TARGET22*36+2048) >> 7 & 0x7F)) #Second target high bits
byte $(((TARGET23*36+2048) & 0x7F)) #Thread target low bits <- Second SERVO
byte $(((TARGET23*36+2048) >> 7 & 0x7F)) #Thread target high bits
} > $DEVICE
sleep 0.3
{
byte 0xAA #Start Byte
byte 0x0C #Device ID = 12
byte 0x1F #Command = Set Multiple Targets # Команда управления несколькими сервами
byte $N_TARGET #0x02 #Number of targets = 2 # Количество управляемых каналов одновременно
byte $N_CHANNEL3 #0x00 #First channel number = 0 # Номер первого канала в цепочке
byte $(((TARGET31*36+2048) & 0x7F)) #0x70 #First target low bits <- First SERVO
byte $(((TARGET31*36+2048) >> 7 & 0x7F)) #0x4E #First target high bits
byte $(((TARGET32*36+2048) & 0x7F)) #Second target low bits <- Second SERVO
byte $(((TARGET32*36+2048) >> 7 & 0x7F)) #Second target high bits
byte $(((TARGET33*36+2048) & 0x7F)) #Thread target low bits <- Second SERVO
byte $(((TARGET33*36+2048) >> 7 & 0x7F)) #Thread target high bits
} > $DEVICE
sleep 0.3
{
byte 0xAA #Start Byte
byte 0x0C #Device ID = 12
byte 0x1F #Command = Set Multiple Targets # Команда управления несколькими сервами
byte $N_TARGET #0x02 #Number of targets = 2 # Количество управляемых каналов одновременно
byte $N_CHANNEL4 #0x00 #First channel number = 0 # Номер первого канала в цепочке
byte $(((TARGET41*36+2048) & 0x7F)) #0x70 #First target low bits <- First SERVO
byte $(((TARGET41*36+2048) >> 7 & 0x7F)) #0x4E #First target high bits
byte $(((TARGET42*36+2048) & 0x7F)) #Second target low bits <- Second SERVO
byte $(((TARGET42*36+2048) >> 7 & 0x7F)) #Second target high bits
byte $(((TARGET43*36+2048) & 0x7F)) #Thread target low bits <- Second SERVO
byte $(((TARGET43*36+2048) >> 7 & 0x7F)) #Thread target high bits
} > $DEVICE
# Пауза перед завершением операций для отработки всех переданных команд управления
sleep 0.3
Почему не отрабатываются все команды, а только первые две? После отработки даже двух первых команд, нагрузка по питанию пропадает и все приводы переходят в отключенное состояние. Сначала думал - это нехватка питания, однако, при отправке команд на приводы вот так:
Код
// Поднятие первой группы
system ("bash web2.sh 3 0 110 135 45");
system ("bash web2.sh 3 6 154 135 45");
system ("bash web2.sh 3 12 25 45 135");
system ("bash web2.sh 3 18 25 45 135");
// Опускание второй группы
system ("bash web2.sh 3 3 134 90 90");
system ("bash web2.sh 3 9 134 90 90");
system ("bash web2.sh 3 15 45 90 90");
system ("bash web2.sh 3 21 90 90 90");
Сам файл web2.sh:
Код
DEVICE="/dev/ttyACM2"
N_TARGET=$1 # Количество одновременно управляемых каналов. По умолчанию = 3 (21, 22, 23).
N_CHANNEL=$2 # Номер первого канала в цепочке. По умолчанию = 21.
TARGET1=$3 # Угол поворота плеча
TARGET2=$4 # Угол поворота локтя
TARGET3=$5 # Угол поворота кисти
byte() {
printf "\\x$(printf "%x" $1)"
}
{
byte 0xAA #Start Byte
byte 0x0C #Device ID = 12
byte 0x1F #Command = Set Multiple Targets # Команда управления несколькими сервами
byte $N_TARGET #0x02 #Number of targets = 2 # Количество управляемых каналов одновременно
byte $N_CHANNEL #0x00 #First channel number = 0 # Номер первого канала в цепочке
byte $(((TARGET1*36+2048) & 0x7F)) #0x70 #First target low bits <- First SERVO
byte $(((TARGET1*36+2048) >> 7 & 0x7F)) #0x4E #First target high bits
byte $(((TARGET2*36+2048) & 0x7F)) #Second target low bits <- Second SERVO
byte $(((TARGET2*36+2048) >> 7 & 0x7F)) #Second target high bits
byte $(((TARGET3*36+2048) & 0x7F)) #Thread target low bits <- Second SERVO
byte $(((TARGET3*36+2048) >> 7 & 0x7F)) #Thread target high bits
} > $DEVICE
sleep 0.2
Всё проходит нормально и все приводы держат стабильно. Почему так происходит - не знаю.
В идеале хочу получить управление 12-ю приводами (большего мне не надо) из одного файла и одной командой:
byte 0xAA #Start Byte
byte 0x0C #Device ID = 12
byte 0x1F #Command = Set Multiple Targets
byte 0x03 #Number of targets
byte 0x00 #First channel number
byte (4000 & 0x7F) #First target low bits <- First SERVO
byte ((4000) >> 7 & 0x7F) #First target high bits
byte (5000 & 0x7F) #Second target low bits <- Second SERVO
byte ((5000) >> 7 & 0x7F) #Second target high bits
byte (6000 & 0x7F)) #Thread target low bits <- Second SERVO
byte ((6000) >> 7 & 0x7F) #Thread target high bits
если сработает то ищите ошибку в коде.
P.S. У моего "Maestro 12-канальный" команда "Set Multiple Targets" так и не заработала правильно (срабатывала только один раз, а потом все сервы просто вырубались), а в "Maestro 24-канальный" было всё в порядке.
Тут появилась одна задумка. Может кто уже такое реализовывал? Хочу узнать результаты. Идея такая. Имеется восемь ног по три привода в ноге и плату управления Pololu на 24 выхода.
При подключении используем разводку с одного провода на четыре согласно рисунку.
Делим все ноги на две части по четыре ноги - получается 12 приводов в одной части. Будет использовано всего 6 каналов из 24-х.
Интересно, будет ли такая система работать? Питание ведь так и осталось одним на все приводы.
Что скажите? Не будет ли торможение в скорости обработки каждым приводом одинаковой команды?
И второй вопрос. На контроллере Pololu все выводы работают как ШИМ (могут передавать широтно-импульсный сигнал)? Если да, то какая максимальная частота? Можно ли выводы использовать для управления бесколлекторными двигателями (естесственно через специальный драйвер) по каналу ШИМ?
Собираю конструкцию общим весом около 2.4 кг (приблизительно) на цифровых сервоприводах в кол-ве 18 штук (шестиног). Проблема в корректировке плеч. Если предположить вес каждого сервопривода в 50 грамм и вес всех составляющих ног в 250 грамм, а так же вес платформы без полезной нагрузки в 250 грамм, то вес всей платформы без полезной нагрузки будет 1400 грамм. Полезную нагрузку примем за 1000 грамм.
Тогда вопрос. Какие сервоприводы с какой нагрузкой могут подойти?
Если делать первое и второе плечо в 6 см, то как считать? По идее отсчёт исходит из полезной нагрузки, а не из общей? Если так, то нам надо вести отсчёт от 1600 грамм на 6 см, или от усилия 1600 х 6 = 9600 грамм. Тогда оптимальные приводы должны быть с усилием от 10 кг/см.
По размерам сервоприводы должны быть чем меньше по весу - тем лучше, но с требуемой тягой.
Почти всё верно. ( 2,4кг / 6шт ) * 2 = 0,8кг на одну ногу (с двойным запасом). 0,8кг * 6см = 4,8кг*см минимальная тяга сервопривода для вашего робота. Значит подбирать сервы с тягой от 4,8 * 2 = 9,6кг*см.
На двойку мы умножаем не от хорошей жизни, а для учета всех погрешностей и завышенных характеристик сервов.
Цитата
Максим Фиронов пишет: По идее отсчёт исходит из полезной нагрузки, а не из общей?
Всегда считать из общей.
Цитата
Максим Фиронов пишет: По размерам сервоприводы должны быть чем меньше по весу - тем лучше, но с требуемой тягой.
Тогда убедитесь что в них установлены безынерционные двигатели (Coreless).