roboforum.ru

Технический форум по робототехнике.

Вопросы новичка.

Как собрать и запрограммировать робота на Arduino(Freeduino, Roboduino, Seeduino ...). Используем Wiring и Processing.

Re: Вопросы новичка.

Сообщение Madf » 20 июл 2018, 13:50

dimamichev писал(а):Да, нет

Стояло отвернуться и сдался. :D Люди 3Д печать делают на BLDC, а ты сервы побороть не можешь. :P

Да и дальше тему тоже забросишь, ибо одной механики для "хватания" шашек недостаточно, нужно делать распознавание фишек на поле. :pardon:
Madf
 
Сообщения: 3298
Зарегистрирован: 03 янв 2012, 12:55
Откуда: Москва
прог. языки: VB6, BASCOM, ASM...

Re: Вопросы новичка.

Сообщение dimamichev » 20 июл 2018, 14:08

Про людей не знаю, но по характеру комментариев сомневаюсь, Madf что вы и так сделаете на sg90, а распознавание или обратная связь для коррекции поведения конечно нужна. Может предложите что нибудь элементарное Ватсон?
Постарался (айся) не быть злым.
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

Re: Вопросы новичка.

Сообщение Angel71 » 20 июл 2018, 14:58

при чём тут какие-то фитангенсы, когда даже не пытался нормально выяснить, какой шаг и точность позиционирования? хз, что там за проблемы напридумывал с этими фитангенсами, но если с ними совсем не можешь сделать, ну так такие вычисления и не обязательны. калибруешь сервы, допустим у первой получается диапазон 750..2250 на 160 градусов. 2250-750=1500, т.е. 1500 на 160градуса. это 9,375 на градус или 0,1066(6) гадуса на одну попугаину длительности импульса. изучаешь, с какой точностью длительность с этой библиотой задавать можно и пересчитываешь попугаи. для вычислений максимум обычное умножение или деление.
с остальным так же - не хвататься сразу буковки и зазигулины рисовать, а сначала изучить, что чего позволяет и потренироваться нужные базовые вещи делать. скоростью вращения вала сервы как управляешь? :pardon: никак, т.е. задать разные скорости вращения сервам не можешь. сервы не шаговики, небольшие провороты могут отрабатывать очень плохо и что бы рисовать загигулины может понадобиться рисовать некоторые участки непрерывно, не подымая ручки. а для этого вместо одновременного задания дёрганий из точки в точку, да хоть с разными скоростями, может оказаться лучше использование таймлайнов для каждой сервы. хотя да, плохая шутка, если даже пропустил изучения самого языка и забил на решение всяких задачек и алгоритмов, которых можно легко и много найти.
Аватара пользователя
Angel71
 
Сообщения: 10668
Зарегистрирован: 18 апр 2009, 22:18
Предупреждения: -1

Re: Вопросы новичка.

Сообщение dimamichev » 20 июл 2018, 16:51

Скорость вращения сервы зависит от длительности пауз между последовательными командами на поворот до определённого угла. Вроде иного в Servo нет. С калибровкой пробовал, менял, думал счас сеточка точек поплывёт... нет точка в точку и порядок прохождения сетки тоже менял и шаг...рисунок сетки остаётся одинаковым с изъянами одинаковыми в одних и тех же местах. Вот экземпляры серв не менял. Конечно надо думать, пробовать, искать лучшие результаты у других на таких манипуляторах.
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

Re: Вопросы новичка.

Сообщение Dmitry__ » 20 июл 2018, 17:44

dimamichev писал(а):Скорость вращения сервы зависит от длительности пауз между последовательными командами на поворот до определённого угла.

Чего? :shock:
Скорость сервы зависит только от напряжения питания. Можно симулировать разную скорость очень маленькими шагами (и как ты сказал, паузами между этими шагами), но между этими шагами скорость будет одинаковая максимальная при данном напр. питания.

И тут выходит мой давний вопрос, для чего это надо? И не жалко свое время? :)
И так пока все у тебя. А это звиздец для коэффициента: что сделал / сколько жил :)
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: Вопросы новичка.

Сообщение dimamichev » 20 июл 2018, 17:53

Значит и не жил и не дышал... Надеюсь слушал. Спорить не хочу, хватит.Менять напряжения питания шажками :D тоже.
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

Re: Вопросы новичка.

Сообщение Dmitry__ » 20 июл 2018, 18:00

:)
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

Re: Вопросы новичка.

Сообщение dimamichev » 20 июл 2018, 18:06

Перечитал сообщение своё, не совсем понятно я выразился . Это слова из песни - надеюсь ты её слушал. Буду искать трактаты о правильном управлении серв напряжением...
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

Re: Вопросы новичка.

Сообщение Scorpio » 20 июл 2018, 22:19

Прежде всего забыл сказать, что скорость СОМ порта 57600.
Код ячейки пересчитываю в индекс положения так:
Код: Выделить всёРазвернуть
int CalcIndex(byte cell,bool PosBajo)
{
byte y=cell/10;
byte x=cell-(cell/10)*10;
return (y-1)*100+(x-1)*10+PosBajo*5;
}

Но у меня там 5 серв, все в одном массиве + нижнее/верхнее положение. Сообрази как будет у тебя. Не хочу тебя лишать удовольствия от творчества :)
dimamichev писал(а):я правильно понимаю прописывание переменной для функции применительно к приложению ? Функция работает (пришлось добавить массив для перенумерации клеток). Не понимаю что сюда аргументом передавать? - SimpleMov(cmd.substring(3));

Все, как описано в протоколе: для SimpleMov передается "46:57", в остальных функциях только номер ячейки

Добавлено спустя 1 час 9 минут 10 секунд:
Кодировка полей у меня получилась такая из-за сенсорной доски, которая постоянно сканируется. Так было удобнее. Причем заданы положения манипулятора для всех 64х клеток+ 8 дополнительных. Предполагалось, что будут еще другие игры, кроме шашек.
dimamichev писал(а):Скорость вращения сервы зависит от длительности пауз между последовательными командами на поворот до определенного угла.

По моему вполне правильное утверждение. Напряжение питания стабилизировано - считай константа. А ширину импульса управления можно плавно менять. Надо учитывать динамику трогания и останова. Продаются недорогие контроллеры серв, в которых все это уже заложено. Но, для конструкции из 2х серв их использовать не очень рационально.

Добавлено спустя 19 минут 16 секунд:
Добавлю еще про процесс подключения к роботу:
Комп получает список всех доступных портов и в каждый посылает запрос "RBT?". Если в течении секунды не получен ответ "RBT!", комп будет ждать следующий порт. Причем, при открытии порта, формируется сигнал DTR, что должно привести к перезагрузке ардуинки. Это значит, что ардуина должна ответить компу, раньше, чем через секунду после перезагрузки, а уже потом заниматься сервами. Это надо учесть. Попробуй соединиться с программой для начала (на кнопочке connect должна появиться зеленая надпись с номером порта.
Аватара пользователя
Scorpio
 
Сообщения: 2681
Зарегистрирован: 30 сен 2008, 18:49
Откуда: Где-то в Латинской Америке

Re: Вопросы новичка.

Сообщение dimamichev » 20 июл 2018, 22:22

Да, была мысль разбивать число на единицы и десятки, но успокоился массивом. Ключевые функции написал, успел даже несколько функций прописать для "варианта прямого управления". Ролик выложу.
С утра пробовал в "дополнительную функцию мягкой установки в точку с координатами" добавить постановку через промежуточные точки с паузами времени, но пока замысел не сработал. А скорость поворота данных серв фиксирована и её значение в зависимости от питающего напряжения нигде не нашёл. Везде 60 градусов за 0,1 секунду (если не вру).
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

Re: Вопросы новичка.

Сообщение Angel71 » 20 июл 2018, 22:33

скорость зависит кроме напряжения ещё и от нагрузки, т.е. учёт мощности, инерции,... это явно не осилишь.
position = f(t), вот и всё. под position подразумевай угол поворота сервы или длительность импульса (скважность шима) или ещё что, но штука это элементарно вычисляется.
можно задержками, допустим примерно так:
Код: Выделить всёРазвернуть
position = 0;
while(1)
{
  position = ...;
  delay(50);
  servo.write(position);
ещё какой-то код
}

промежутки времени выдерживаются плохо, это не заметно когда код очень быстро выполнится. хз, скок там эти синусы выполняются и прочие умножения с делениями, которые возможно заюзаешь. ещё принтф слегка не быстрый.
Код: Выделить всёРазвернуть
next_time = millis() + 50;
...
while(1)
{
  current_time = millis();
  if(current_time > next_time)
  {
    next_time = current_time + 50;
    position = ...;
    srvo.write(position);
  }
}

можно ещё как, вариантов хватает.
ота не прямоугольная сеточка это по твоему тест? :) подумай ещё, может придумаешь, как лучше реализовать.
потенциометры подключить совсем не проблема, только оно тебе пока что почти ничего не даст.
Последний раз редактировалось Angel71 20 июл 2018, 22:38, всего редактировалось 1 раз.
Аватара пользователя
Angel71
 
Сообщения: 10668
Зарегистрирован: 18 апр 2009, 22:18
Предупреждения: -1

Re: Вопросы новичка.

Сообщение dimamichev » 20 июл 2018, 22:41


Пробовать пока нечего- функции не дописал, с присланным скетчем не соединил. Завтра добью функции и выложу на "проверку".

Добавлено спустя 4 минуты 1 секунду:

Да, надо думать над плавность переходов от точки к точке, хотя электромагнит держит шашку при скачках серв.
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

Re: Вопросы новичка.

Сообщение Angel71 » 20 июл 2018, 22:56

аха, надо думать, а сам то рисовалку пытаешься, то шашечки. молодец.
Аватара пользователя
Angel71
 
Сообщения: 10668
Зарегистрирован: 18 апр 2009, 22:18
Предупреждения: -1

Re: Вопросы новичка.

Сообщение dimamichev » 20 июл 2018, 23:06

Так всё одинаковое - плавное хождение от точки к точке, чем точнее тем лучше. В декартовых попробовали, в полярных тоже. Точка, отрезок, дуга есть. Пока разумно-читаемый размер буквы 15мм-17мм. Хотелось бы 7мм-10мм на таких сервах, но пока нет.
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

Re: Вопросы новичка.

Сообщение Scorpio » 20 июл 2018, 23:16

Нормально в поля попадает. Плавность ты уже делал. У тебя фломастер поднимается/опускается плавно. Такой же подход и к остальным сервам и все получится.
Код: Выделить всёРазвернуть
// выполнить простой ход "33:44"
void SimpleMov(String mov)
{
  int tmp=(mov.substring(0,2)).toInt();//преобразовали первые два знака строки в код поля "откуда"
  TakePiez((byte)tmp);//взяли шашку
  tmp=(mov.substring(3)).toInt();//преобразовали последние два знака строки в код поля "куда"
  MoveToCell((byte)tmp); //переместили
  PutPiez((byte)tmp,true);//опустили
}
Аватара пользователя
Scorpio
 
Сообщения: 2681
Зарегистрирован: 30 сен 2008, 18:49
Откуда: Где-то в Латинской Америке

Пред.След.

Вернуться в Arduino и другие Xduino

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5