Комментарии 19
А зачем нужно UNO, если ESP8266/ESP32 — уже сами по себе достаточно мощные МК? Есть, например, плата WEMOS D1 mini, которая при стоимости в ~400р позволит сделать все вышеперечисленное, также интегринуется с arduino IDE, да еще и гораздо меньше места занимает.
0
ESP32 бесспорно замечательная вещь, но в дело пошло то, что было в арсенале. На текущий момент для передвижения хватает и этого. Если «повешать» на робота камеру, то скорее всего UNО не потянет передачу картинки в хорошем качестве и будет причина использовать более мощный процессор. Но код, который работал под UNO, без проблем заработает и на его более мощных «соплеменниках».
0
Ардуино с видео не вариант, пробовал. Забив память получается снять изображение с камеры (ov7670), но вот передавать или обрабатывать нереально.
Я тоже как-то построил паука с небольшими серво-приводами на ардуино. К сожалению, моторам не хватило мощности чтобы он нормально двигался.
Я тоже как-то построил паука с небольшими серво-приводами на ардуино. К сожалению, моторам не хватило мощности чтобы он нормально двигался.
0
Приобрел точно такую же камеру, но пока только познакомился с ней в теории. Судя по мануалам и обзорам коллег она требовательна к скорости процессора. А вы на какой ардуине пробовали работать с камерой?
0
Ардуино мега 2560. У меня была камера без буфера: мега успевала снять изображение путём работы с портами напрямую, но способа передать изображение быстро я не нашёл. Скорее всего, у процессора не хватит времени хватать кадры и передавать их для более-менее качественного видео.
0
MEGA в отличие от UNO обладает большим объемом оперативной памяти(8 Кб против 2 Кб), но рабочая частота одинаковая: 16 мГц. На такой скорости, судя по сторонним источникам, невозможно без смазывания передать информацию. ESP32 работает на частоте 160 или 240 мГц (разные варианты процессора) и имеет на борту 520 Кб оперативной памяти.
0
Думаю этого вполне хватит для передачи изображения, если хватает выводов для подключения к камере. У меня вроде даже остался код где я с помощью bit bang настраивал камеру.
0
Можно использовать камеру с аппаратным FIFO, куда быстро сохраняется кадр с камеры, а затем считывается медленной ардуиной. Это наверное единственный вариант получить картинку в движении и без смазывания.
Еще можно уменьшить разрешение картинки, тогда и FPS подрастет. У меня выходило где-то 10 FPS при разрешении 300х400, но там все упиралось в пропускную способность UARTa (1 MBod/s).
0
у вас уже есть есп8266 в качестве шилда, и от этого прекрасного мощного мк вы используете только его коммуникационные возможности. Зачем еще к этому — уно? у вас никакой особой математики нет, все прекрасно бы пошло на самом есп.
0
Интересно насколько это все шустро работает. Есть ли какое-нибудь видео?
0
Добрый день. Очень рад что у Вас пошла работа в этом направлении и есть положительные результаты!
Движения как планируете реализовывать в плане математики, на вход будет подаваться вектор или команды «повернись», «вперед» и тд. Я сейчас работаю над мат. частью с вектором, но пока идет туго. Возможно вместе мы осилим это :)
Движения как планируете реализовывать в плане математики, на вход будет подаваться вектор или команды «повернись», «вперед» и тд. Я сейчас работаю над мат. частью с вектором, но пока идет туго. Возможно вместе мы осилим это :)
0
Здравствуйте, Алексей! Для реализации движения в проекте определено два класса:
Оба класса в конструкторе принимает начальное положение лап робота и вектор скорости определяющий направление движения. Только для прямолинейного движения — это вектор линейной скорости, а для поворота — вектор угловой скорости.
Описание этих классов и исходный код самого ПО постараюсь изложить в следующей статье.
class LinearMotion
class LinearMotion: public Motion {
Vector3D m_Pose0[FOOTS_COUNT]; // положение конечности в начале (и конце) шага
Vector3D m_Offset; // вектор перемещения в результате шага
int m_Heigth; // высота подъема конечностей
public:
LinearMotion(int heigth, Vector3D pose0[FOOTS_COUNT], Vector3D speed, long maxTime, long totalTime = -1, Motion* pNext = NULL);
int getPose(long time, Vector3D points[FOOTS_COUNT]);
};
class RotateMotion
class RotateMotion: public Motion {
Vector3D m_Pose0[FOOTS_COUNT]; // положение конечности в начале (и конце) шага
Vector3D m_Angles; // углы поворота в результате шага
int m_Heigth; // высота подъема конечностей
public:
RotateMotion(int heigth, Vector3D pose0[FOOTS_COUNT], Vector3D rotor, long maxTime, long totalTime = -1, Motion* pNext = NULL);
int getPose(long time, Vector3D points[FOOTS_COUNT]);
};
Оба класса в конструкторе принимает начальное положение лап робота и вектор скорости определяющий направление движения. Только для прямолинейного движения — это вектор линейной скорости, а для поворота — вектор угловой скорости.
Описание этих классов и исходный код самого ПО постараюсь изложить в следующей статье.
0
Только для прямолинейного движения — это вектор линейной скорости, а для поворота — вектор угловой скорости.Я правильно понимаю что эти векторы задаются относительно центра туловища гексапода?
Описание этих классов и исходный код самого ПО постараюсь изложить в следующей статье.Да, было бы очень классно почитать. Особенно клёво будет если подробно опишите математику :)
0
У вашего гексапода есть имя? Видео движения?
0
Имя есть — Гекса. Видео будет в следующей статье.
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Оживляем гексапода. Часть первая