roboforum.ru

Технический форум по робототехнике.
Текущее время: 16 мар 2025, 18:05

Часовой пояс: UTC + 4 часа




Начать новую тему Ответить на тему  [ Сообщений: 1911 ]  На страницу Пред.  1 ... 58, 59, 60, 61, 62, 63, 64 ... 128  След.
Автор Сообщение
 Заголовок сообщения: Re: Вопросы новичка.
СообщениеДобавлено: 07 июл 2018, 16:37 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
посмотрел функцию Servo. Там есть Servo.writeMicroseconds(). Вот ей и надо пользоваться. Все стандартно для серв и PPM:
Цитата:
1000 максимальный поворот против часовой стрелки, 2000 максимальный поворот по часовой стрелке, 1500 посередине.

Думаю управлять одновременно всеми сервами получится. Попробуй написать тестовую прогу: зациклить: запись значений в 3 сервы, инкремент всех значений, задержка 5 мс. И посмотреть как все двигается.
На синусы и косинусы забить, не ардуинское это, хотя можно и вложиться в ресурсы. Все буквы сделать таблицей точек. Брать примерно по 50 точек на букву. Для хранения большой таблицы перейти на PGM. Гуглить "avr/pgmspace.h". Между точками вести линии усреднением. Придется написать свой маленький интерпретатор команд из таблицы. Например: Таблица из байт. Значение "0" - опустить карандаш. Значение "254" - поднять карандаш. Значение 255 "конец буквы". Оставшиеся значения от 1 до 253 равномерно размазать на значение сервы от 1000 до 2000 мкс. Будет 2 таблицы: одна сами буквы по 50 точек на 3 сервы, вторая - индексы букв (начало таблицы нужной буквы). Если останется дофига памяти, то можно потом увеличить колич. точек в букве.
Йа все :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы новичка.
СообщениеДобавлено: 07 июл 2018, 17:15 
Не в сети
Аватара пользователя

Зарегистрирован: 30 сен 2008, 18:49
Сообщения: 2683
Откуда: Где-то в Латинской Америке
Servo.writeMicroseconds() позволяет точнее выставить угол. Задавать огромные таблицы точек не рационально и трудоемко. Мы же знаем формулу прямой. Вычислить следующую точку не составляет проблем. Каждая точка задается углами положения серв (реально м.б. 2 комбинации для каждой точки, но одной достаточно) дальше все легко вычисляется. Чем большим количеством точек мы зададим отрезок, тем он будет прямее. Двигаясь от точки к точке одновременно 2-мя сервами что-нибудь получится.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы новичка.
СообщениеДобавлено: 07 июл 2018, 17:18 
Не в сети
Аватара пользователя

Зарегистрирован: 03 янв 2013, 16:27
Сообщения: 1386
Буду думать, попробовал синус, косинус ни холодно, ни жарко пока


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы новичка.
СообщениеДобавлено: 07 июл 2018, 19:13 
Не в сети
Аватара пользователя

Зарегистрирован: 30 сен 2008, 18:49
Сообщения: 2683
Откуда: Где-то в Латинской Америке
dimamichev писал(а):
две и более одновременно никогда поворачиваться не будут в Servo

dimamichev писал(а):
Библиотека Servo одновременно позволяет двигать 12 сервами

Код:
/////////////////функция рисования отрезков в разных направлениях по заданным параметрам
  void drawing_line()
  {
  byte K1=0;
  while (K1<p1)
  {A=A+p2;B=B+p3;K1=K1+p4;servo2.write(B);servo1.write(A);delay(n);}
  }

В этом варианте сервы двигаются вполне себе одновременно. Другое дело, программа зациклена только на рисовании. Остановить процесс внешней командой невозможно. SerialEvent() не поможет, т.к. он проверяет СОМ порт только между циклами loop(), а не во время delay(). Я в таких случаях предпочитаю использовать счетчики, крутя drawing_line() в цикле loop() вместе с другими нужными функциями


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы новичка.
СообщениеДобавлено: 07 июл 2018, 19:22 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
Scorpio писал(а):
Задавать огромные таблицы точек не рационально и трудоемко.


Проверил свою osd графику для роботов, на базе minimosd-ng. Там табличка "мама не горюй" в 16000 значений :)

Код:
#include <avr/pgmspace.h>
const unsigned char mydata[16384] PROGMEM =
{
   0b01010101,
   0b01010101,
   0b01010101,
   0b01010101,
   0b01010101,
   ...


Расход, все очень пристойно для atmega328p, озу вообще не затронуто :)

Код:
Program:   21260 bytes (64.9% Full)
(.text + .data + .bootloader)

Data:         49 bytes (2.4% Full)
(.data + .bss + .noinit)


Пытаюсь вспомнить, где нагенерил такой эпичный массив букв, не понмю :)
И не знаю, как извращаться с pgm в ардуино, у меня код на чистом gcc. Но не думаю, что в ардуино иде будет пичалька...

Добавлено спустя 5 минут 31 секунду:
Вот какие-то 2 ссылки нашел в проекте:
https://www.1001freefonts.com/bitmap-pixel-fonts.php
http://ukpyr.narod.ru/ind_lcd.htm?lang=eng

Первая ссылка - шикардос :)

Вложение:
2018-07-07-182119_1280x1024_scrot.png
2018-07-07-182119_1280x1024_scrot.png [ 238.5 КиБ | Просмотров: 1573 ]


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы новичка.
СообщениеДобавлено: 07 июл 2018, 19:59 
Не в сети
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы новичка.
СообщениеДобавлено: 07 июл 2018, 20:04 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
Почему не будет масштабироваться? Задаешь больше отрезок между точками и вперед. Длина отрезка между точками будет задавать размер букв. Единственное что плохо, буквы все равно будут направлены от центра основания лапы. А если использовать 16к таблицу, как у меня в osd, то это получается 500 точек на 32 буквы. Там вообще интерполяция между точками не понадобится :)

Добавлено спустя 21 секунду:
Ну смотрите, как знаете :oops:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы новичка.
СообщениеДобавлено: 07 июл 2018, 20:09 
Не в сети
Аватара пользователя

Зарегистрирован: 03 янв 2013, 16:27
Сообщения: 1386
Вот для расстановок точек над "и" задал поточечно с шагом 1 градус на 2 и правее 1*1. В разных частях по разному точки. Удивительно что хоть так - если аккуратно пошевелить стержень фломастера "в люфтах шестерёнок серв", амплитуда колебаний сравнима с дистанцией между соседними точками.


Вложения:
20180707_184825.jpg
20180707_184825.jpg [ 1.13 МиБ | Просмотров: 1576 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы новичка.
СообщениеДобавлено: 08 июл 2018, 01:25 
Не в сети
Аватара пользователя

Зарегистрирован: 30 сен 2008, 18:49
Сообщения: 2683
Откуда: Где-то в Латинской Америке
От механики конечно красивость тоже зависит.
Вложение:
ИА.jpg
ИА.jpg [ 57.64 КиБ | Просмотров: 1503 ]

Т.е. предлагаю представлять каждую букву в виде последовательности (в порядке рисования) векторов. Дуги оставим на потом.
Каждый вектор представляет собой пару:
- абсолютный угол, определяющий направление движения,
- длину в относительных единицах, которую можно умножать на масштаб при рисовании,
- флаг поднятия пера в конце отрезка (можно использовать старший бит длины).
Т.о. холостые перемещения пера тоже описываются.
Получив очередной вектор, вычисляем массив точек, уже абсолютных координат X,Y.
Зная X,Y, определим углы поворота для обоих серв для каждой точки.
Последовательно пройдем от точки к точке.
Как то так.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы новичка.
СообщениеДобавлено: 08 июл 2018, 20:34 
Не в сети
Аватара пользователя

Зарегистрирован: 03 янв 2013, 16:27
Сообщения: 1386
Распечатал коническую сетку с шагом 2 градуса на 4. Если в фломастер капнуть две капли спирта - точки становятся гораздо различимее и жирнее. Прямоугольной сетки никак не получается. Соответственно и XY пока не вырисовывается. Как же сосиску распрямить?

Может растр попробовать на цифрах 0-9? Или просто картинку точками нарисовать в массиве. Можно же "32 битную числу" написать 19 раз чтоб весь набор в массиве хранить?


Вложения:
DSCN0316.JPG
DSCN0316.JPG [ 233.46 КиБ | Просмотров: 1486 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы новичка.
СообщениеДобавлено: 08 июл 2018, 23:14 
Не в сети
Аватара пользователя

Зарегистрирован: 30 сен 2008, 18:49
Сообщения: 2683
Откуда: Где-то в Латинской Америке
dimamichev писал(а):
Прямоугольной сетки никак не получается.

Не верю! Если взяться за фломастер рукой, и попытаться провести вертикальную линию при отключенных сервах... Не получится что ли?
Эх, придется программный эмулятор твоей писалки делать, чтобы посмотреть, на что она способна...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы новичка.
СообщениеДобавлено: 08 июл 2018, 23:39 
Не в сети
Аватара пользователя

Зарегистрирован: 03 янв 2013, 16:27
Сообщения: 1386
Да, нет конечно получится - закономерность приращений углов найти не удастся... Смешно, задавал примерно шаг по дуге окружности 0,5 градуса с помощью "микросекондса" - рисунок искривлений сохраняется, получается он индивидуальный для данных серв в заданной компоновке.
Про эмулятор - это мне тёмный лес.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы новичка.
СообщениеДобавлено: 09 июл 2018, 01:23 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
dimamichev писал(а):
Прямоугольной сетки никак не получается. Соответственно и XY пока не вырисовывается. Как же сосиску распрямить?

Советую очень крепко задуматься, для чего все это нужно. Любой шаг вправо, шаг влево - куча работы в помойку. А так "распрямить сосиску" несложно. Надо кривизну сложить с обратной кривизной. Достроить мнимый радиус и рассчитывать точку для каждого угла. Красная дуга получается (физически) по формуле прямоугольного треугольника. Мнимые точки синей дуги находить по формуле, где R - расстояние до опоры лапы. x^2 + y^2 = R^2. Углы известны, R известен, катеты (координаты сетки x,y) считаются через синус и Пифагора. Расстояние до 2-го мнимого центра надо считать по катету сектора доступного окна...
Накассандрил, но нормально, чтоб отпугнуть делать :)

Вложение:
DSCN0316.JPG
DSCN0316.JPG [ 94.48 КиБ | Просмотров: 1410 ]


Это получится конус с выпрямленными дугами. Потом надо будет откорректировать сжатие (чем ближе к центру, тем больше сжатие). Но там, скорее всего, будут линейные формулы. Точнее не соображу. Но когда увижу картинку, подведу теорию под практику :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы новичка.
СообщениеДобавлено: 09 июл 2018, 04:13 
Не в сети
Аватара пользователя

Зарегистрирован: 30 сен 2008, 18:49
Сообщения: 2683
Откуда: Где-то в Латинской Америке
Dmitry__ писал(а):
Советую очень крепко задуматься

Димон плохого не посоветует. Меня самого так зовут 8)

Добавлено спустя 43 минуты 10 секунд:
dimamichev писал(а):
закономерность приращений углов найти не удастся...

Вложение:
servos.jpg
servos.jpg [ 38.5 КиБ | Просмотров: 1388 ]

Вот для кого я тут 2 страницы распинался!?
Чтобы попасть из X[0],Y[0] в X[1],Y[1], servo1 должна повернуться на 10° по ЧС, а servo2 на 17° против ЧС за одинаковое время. Если точки отстоят друг от друга далеко, то линия будет кривая из-за несогласованности движения серв. Но, у нас то они будут близко. Поэтому кривизна будет компенсироваться толщиной фломастера. Необходимые углы будем вычислять из координат точки.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Вопросы новичка.
СообщениеДобавлено: 09 июл 2018, 09:35 
Не в сети
Аватара пользователя

Зарегистрирован: 13 янв 2011, 15:25
Сообщения: 8033
Откуда: Санкт-Петербург
Scorpio писал(а):
Чтобы попасть из X[0],Y[0] в X[1],Y[1], servo1 должна повернуться на 10° по ЧС, а servo2 на 17° против ЧС за одинаковое время.

Но это для одного определенного места на поле. Какая зависимость для рисования вертикальной линии в другом секторе? Т.е. понятно, что это все инверсная кинематика, но хочется просто :)

Scorpio писал(а):
Димон плохого не посоветует. Меня самого так зовут

Ого, Димонов как собак нерезанных :) :friends:

Добавлено спустя 6 минут 12 секунд:
Вот статейка по теме, ничего так.
Инверсная кинематика в двухмерном пространстве

Ждем собачку :)

Изображение


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 1911 ]  На страницу Пред.  1 ... 58, 59, 60, 61, 62, 63, 64 ... 128  След.

Часовой пояс: UTC + 4 часа


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

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


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
phpBB SEO