roboforum.ru

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

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

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

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

Сообщение Scorpio » 06 июл 2018, 16:31

Это верно подмечено. Правильный подход - это описать кинематику манипулятора математической функцией, а дальше все пойдет как по маслу.
Аватара пользователя
Scorpio
 
Сообщения: 2683
Зарегистрирован: 30 сен 2008, 18:49
Откуда: Где-то в Латинской Америке

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

Сообщение dimamichev » 06 июл 2018, 16:49

Madf писал(а):Какой нафиг рисовать без отрыва, у него сервы не умеют двигаться одновременно, от сюда рваные полосы и нет прямых линий.)

Хотелось бы взглянуть на такой код в рамках библиотеки servo :D Функция наверное такая:servo1,2,3.write(A)(B)(C)
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

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

Сообщение Dmitry__ » 06 июл 2018, 17:46

Madf писал(а):Какой нафиг рисовать без отрыва, у него сервы не умеют двигаться одновременно

На видео много моментов, когда прямую можно дальше вести без отрыва, даже если поправить эти места, то уже будет значительно лучше.
dimamichev писал(а):Хотелось бы взглянуть на такой код в рамках библиотеки servo

Уходить от сторонних библиотек. Они в ардуино решают только одну задачу - научить/показать, что можно мигать светодиодом и двигать сервой. В твоем случае, ты попал в ловушку :) Вся концепция программы была построена вокруг "servo". Теперь надо: Пришел дворник, все подмел, поставил стол, стул, начал писать: Дорогие сервы, запятая, скобочка, точка... :)
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

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

Сообщение Scorpio » 06 июл 2018, 18:11

Библиотека servo выполняет важную функцию: аппаратное управление ножками pwm с помощью 16-разрядного таймера. Остальные задачи, такие как фоновый поворот сервы с определенной скоростью, прохождение участка пути за определенное время, динамические ускорение и торможение,приходится решать пользователю. В сети наверняка множество примеров. Но принцип понятен: не использовать delay при работе с сервой, а крутить функцию типа stepServo(Servo servo). Объект Servo лучше ререопределить, дополнить его свойствами: текущее положение, текущая скорость, счетчик временных интервалов и т.д.
Или,вместо крутежа в loop(), использовать прерывания по таймеру, с учетом того, что один таймер уже занят библиотекой servo.
Для начала можно поставить себе простую задачу: мигать светодиодом в процессе рисования. Уже будет понятно что к чему
Аватара пользователя
Scorpio
 
Сообщения: 2683
Зарегистрирован: 30 сен 2008, 18:49
Откуда: Где-то в Латинской Америке

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

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

"Жездь! из всего сказанного" Получается так: сделал очередную игрушку-рисовалку= выкинь (коническую координатную сетку , сегментное рисование, библиотеку servo, переключение серв с шагом в 1 градус, математику построения сегментов).
А сделай: 1 Узнай математику - как на таком манипуляторе рисовать отрезок (прямой) в "нормальных координатах".
2 Научись двигать несколько серв "одновременно" без использования библиотеки.
3 Опиши новый алгоритм работы "буквостроителя",рисующего букву без отрыва по индивидуальным данным, сделай скетч.
4 Ну и т.д.
Пупок развяжется в одно табло у меня :D
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

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

Сообщение Scorpio » 06 июл 2018, 18:24

Игрушка не самоцель. Наша цель самосовершенствование! А математика там на уровне геометрии древних египтян.
Даю задание нарисовать правильную окружность :wink:
Аватара пользователя
Scorpio
 
Сообщения: 2683
Зарегистрирован: 30 сен 2008, 18:49
Откуда: Где-то в Латинской Америке

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

Сообщение Dmitry__ » 06 июл 2018, 18:37

dimamichev писал(а):"Жездь! из всего сказанного" Получается так: сделал очередную игрушку-рисовалку= выкинь

Я, каждый раз когда вижу твою новую игрушку, дико жалею твое потраченное время. Осознавая сколько тебе лет и как падает производительность человека от возраста (по себе сужу), мне становится очень грустно. То что ты сейчас делаешь, надо было начинать в 16 лет, тогда бы ты к 46 годам (своим) давал советы как я :)
Это без наездов :)
По "servo", можно еще помучиться со штатной библой. Надо ввести таймер (около 10мс), по которому будешь обновлять данные всех серв. Прямые линии рисовать просто без всякой математики: По таймеру инкрементируешь данные для одной сервы, а для 2-й делаешь приращение только при переполнении регистра, в который при каждом шаге таймера добавляешь константу. Константа определяет угол линии. При нуле будет горизонт. При значении константы равной размерности этого регистра (например 256 для byte) budet ugol 45 grad.

Добавлено спустя 2 минуты 33 секунды:
Зацени как в конце моего текста, после англ. "byte" я не переключил раскладку клавиатуры (случайно) :)
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

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

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

В общем мозг пока в раскоряку. Насчёт "делаев". Если их убрать - манипулятор станет паралитиком. Понимаю, что пока рисуется буква ничего с процессом (в таких вариантах скетча) сделать нельзя (а что там можно делать? хлопнуть в ладоши или сказать "Остановить моторику!" - интересный сериал кстати). Такое можно сделать, превратив "делай" в отдельную функцию, где "слушается микрофон" пока идёт задержка поворотов серв.

Добавлено спустя 3 минуты 41 секунду:
Дима, ядрён-батон, я год как в Ардуино, программирование (закрываем на школьный Бейсик глазки)для меня чёрная бездна. Ты сейчас предлагаешь совершенно иной подход о котором от тебя впервые и слышу.
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

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

Сообщение Dmitry__ » 06 июл 2018, 18:50

dimamichev писал(а):Дима, ядрён-батон, я год как в Ардуино

Я знаю. Что тебя смутило? Год в ардуино - ниачом. На работу берут со знанием язука не менее 3-х - 5-ти лет :)

А да, уточнение про "servo". Тебе нужна только "analogwrite" или как она там в дуино? Надо правильно настроить ШИМ для серв (может и не получиться из-за специфичности, там не ШИМ, а PPM). А дальше все делать по таймеру, как я описал выше. Ждешь флаг от time_out (10 мс), регенеришь данные для всех серв и опять уходишь в ожидание time_out. Просто твои delay в настоящих программах не используют. Это как копать яму лопатой, а когда надо скорректировать яму, дизайнер думает, а лопатчик копает рядом яму, а не спит :)
Аватара пользователя
Dmitry__
 
Сообщения: 8033
Зарегистрирован: 13 янв 2011, 15:25
Откуда: Санкт-Петербург

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

Сообщение Scorpio » 07 июл 2018, 02:55

А какая дуня с каким МК используется?

Добавлено спустя 32 минуты 6 секунд:
Советую попробовать библиотеку SlowMotionServo.
Вроде позволяет двигать сервы одновременно, и задавать скорость движения. Раз самому думать лень :)

Добавлено спустя 1 час 24 минуты 53 секунды:
Dmitry__ писал(а):Зацени как в конце моего текста, после англ. "byte" я не переключил раскладку клавиатуры (случайно) :)

Давно хотел спросить..а кто тебе буковки на кнопочках русские стирает, или ты пользуешься чисто буржуйской клавой без национализации?
Аватара пользователя
Scorpio
 
Сообщения: 2683
Зарегистрирован: 30 сен 2008, 18:49
Откуда: Где-то в Латинской Америке

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

Сообщение Dmitry__ » 07 июл 2018, 05:23

Scorpio писал(а):Давно хотел спросить..а кто тебе буковки на кнопочках русские стирает

:)
Я на русские буквы не обращаю внимание :). Для меня их нет, но от этого есть мелкие проблемы, часто в русском тексте "ы" меняю "у", а где на клаве "твердый знак", вообще хз, поэтому в моих текстах твердый знак всегда "ь" :)

Добавлено спустя 1 минуту 38 секунд:
Во:
со знанием язука

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

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

Сообщение dimamichev » 07 июл 2018, 07:49

Использую Ардуино УНО (с чего начал изучение - на Атмега 328), если конструкция остаётся, не идёт в лом - переписываю на про мини.
Библиотека Servo одновременно позволяет двигать 12 сервами, переход на новую в моём случае :D , вряд ли улучшит расклад.
Замена delay на millis (с подмигиванием светодиодом между движениями серв) мне по силам.
С прямой линией не ясно хоть стреляйте. Если двигать одну серву и приращать в шаге другую - не будет прямой. По моим не египетским теоретическим расчётам величина приращения зависит от значений текущих углов поворота серв. А там комбинации синусов, косинусов и самих углов. Как это всё "округлить" по аналогии с конической системой хрен знает.
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

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

Сообщение ALS » 07 июл 2018, 10:42

Тогда поступай так же, как и 100500 других, не начинающих, а уже продвинутых ардуинщиков : они просто берут еще одну ардуину (или две, три... в общем, насколько совести хватит) и распараллеливают задачу.
Аватара пользователя
ALS
 
Сообщения: 803
Зарегистрирован: 24 окт 2011, 23:32
Откуда: Севастополь
прог. языки: асм

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

Сообщение Madf » 07 июл 2018, 11:42

ALS писал(а):они просто берут еще одну ардуину (или две, три... в общем, насколько совести хватит) и распараллеливают задачу.

Ему это не поможет, всё так же обе дуни будут дергаться. :D Можно предложить многоканальные чипы с программируемым PWM...

Я в своё время, ещё в школе поражался, как это на ZX-Spectrum-е ухитрялись рисовать много точек и они все двигались одновременно, при том, что если использовать простые инструменты бэйсика такое не получалось. Поразмыслив у меня начало это получаться на бэйсике (при том, что ЦПУ всего лишь около 4МГц (3,5) и каждая команда минимум 4 такта, т.е. по существу 1МГц проц), затем поняв принцип, начал уходить на ассемблер и уже через время мог одного цаета на знакоместа получать 8 линий/точек и т.д... Это я всё к чему, надо набраться опыта и понимания правильного построения процессов, а потом уже можно "творить чудеса".
Madf
 
Сообщения: 3298
Зарегистрирован: 03 янв 2012, 12:55
Откуда: Москва
прог. языки: VB6, BASCOM, ASM...

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

Сообщение dimamichev » 07 июл 2018, 12:49

Оформил сделанное,отбросил предрассудки - не надо ничего лишнего, Дмитрий прав, двигаем одну серву маленькими шажочками (две и более одновременно никогда поворачиваться не будут в Servo) и на каждом шаге проверяем условие прямолинейности в рамках указанных нами же погрешностей. Если условие нарушено, двигаем вторую, вновь до нарушения и так поочерёдно в цикле...
Нарисую "тертёж" попробую объяснить ход своих мыслей.

Добавлено спустя 48 минут 35 секунд:
Прямая, параллельная оси х. Идея новая такая (поправьте если ошибаюсь)поворачиваем серву А на например на 1 градус, проверяем истинность условия (красным) в границах плюс минус заданного допуска - вышли "за",поворачиваем серву В, вновь проверяем условие и так до границ значений "углов конца отрезка". Система координат привязана к центру вала сервы-подъёмника, плечо l=65mm. Для моего манипулятора k в границах 1,2-2. Допуск сколько? 0,1*k, 0,01*k.
Теперь такой момент- градусы не прокатят, нужны радианы с одной стороны в вычислениях. С другой servo.writeMicroseconds(); в исполнении. Тут затык.
Вложения
прямая .jpg
Аватара пользователя
dimamichev
 
Сообщения: 1386
Зарегистрирован: 03 янв 2013, 16:27

Пред.След.

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

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

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