разгрузка

Постов: 2 Рейтинг: 7653
6185

Робот Апельсин Разгрузка

Развернуть

После разгрузки он как будто оценивает нормально ли получилось

В одном из калифорнийских аквапарков тестируют электронную новинку — робота-дельфина, который выглядит совершенно как настоящий.

Его длина почти два с половиной метра, кожа из медицинского силикона, он движется и реагирует на раздражители так же, как настоящее животное.

Специалисты надеются, что в будущем для развлечения посетителей живых дельфинов заменят роботы.

Отсюда: https://t.me/ofigenno/5258

Начнём с того, что на тот момент мне было 12-13 лет. Года два назад дело было. Весна, мне скучно. Младшему брату подарили на новый год р/у танки, а просто так играть наскучило. Сначала прикрутил к танку светодиод, чтобы в ночи веселиться, а потом уже и FPV. После этого танк стал похож на декорации к "Охотникам за приведениями". Такой вот пепелац:

Робот Апельсин Разгрузка

Было весело, но хотелось большего. В итоге раздербанил башню, утилизировал всю электронику, оставив только механическую часть. Поставил мозг APM c прошивкой APM rover, тк прогать не умел. Управлял сием творением с помощью стандартного FS-i6. Камеру установил на серву, чтобы ворочалась. С гордой надписью на боку работа "импровизируй, адаптируйся, преодолевай", я пошёл думать дальше

Робот Апельсин Разгрузка

К тому моменту меня начали посещать мысли, что эту штуку можно пристроить как проект. А до этого я ещё ездил на робофест, где вдохновился зрелищностью соревнований кубка РТК (если кратко, то это соревнования экстремальной робототехники). Так как база от игрушечного танка особой проходимостью не обладала, то я её переделал на 3д печатную

Робот Апельсин Разгрузка

Спойлер: оно отвратительно ехало. Нулевая надёжность, прочность, проходимость на уровне домашнего ежа. Но я был горд тем, что сделал что-то сам. И добавил простенький манипулятор, он был нужен для соревнований.
На первом же конкурсе проектов меня вежливо и конструктивно направили в нужное русло, намекнули, что механика - фигня, + от моторов шли дичайшие помехи на сервы манипулятора. Набрался вдохновения и стал делать раму из алюминиевого профиля и полос

Робот Апельсин Разгрузка
Робот Апельсин Разгрузка
Робот Апельсин Разгрузка
Робот Апельсин Разгрузка
Робот Апельсин Разгрузка

Рама ничем особо не примечательна, кроме дырок в полу и понтовой ручки, подвеска на балансирных тележках. Катки пластиковые, с нормальными подшипиниками. По 6 штук катков на сторону. Ещё сделал механизм, поднимающий весь манипулятор путем наклона того на 45 градусов. (штука крайне ненадёжная).
В таком виде робот поехал на региональный этап кубка РТК, где из 8 мест я занял пятое

А уже потом меня поперло на аморты (видимо, пересмотрел выпуски GMBN про подвеску). Делались они на основе пружинок из-под ручек. В средние тележки засовывал по одной пружине в передние и задние - по 2-3

Робот Апельсин Разгрузка

Средний аморт

Робот Апельсин Разгрузка

И попытка сделать длинноходный амортизатор в порядке бреда

Робот Апельсин Разгрузка

Вид сбоку.
Ходовая с амортами ехала мягко, ровно, проходимость хорошая. Но жёсткости нет. Что катки люфтят, что аморты, что сами тележки. + вся система слишком сильно отдаляет вал редуктора от центра гусеницы. Ещё, как видно на фото, я переделал манипулятор. Дешёвые сервы за 200 рублей плохо справлялись с нагрузками, поэтому позже были заменены. В таком виде я зарегистрировал робота на соревнования, которые не случились. Заявка висит, а робот уже другой.

Проблемы с жестокостью и расстоянием до центра решил переработкой ходовой. Теперь это не полноценная подвеска, а виброгаситель, хоть и имеющий приличный ход

Робот Апельсин Разгрузка
Робот Апельсин Разгрузка

Катки посадил на 2 подшипника, которые впрессовывал. Они стали больше, прочнее, жесче. Надёжность выросла, как и моя самооценка после реализации сией конструкции

Робот Апельсин Разгрузка
Робот Апельсин Разгрузка
Робот Апельсин Разгрузка

Чутка подредактировал манипулятор, заменил сервы, поставил вторую камеру, и теперь оно выглядит так. За кадром осталась ещё куча мелких и не очень доработок, но основу я показал. Смешное название я 2,5 года назад придумать не смог, так что пепелац зовётся гордо: Первопроходец 1,4
А сейчас мне 15, жду соревнований, товарищи

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

Серийный vs параллельный робот:

Модульные дельта-роботы:

Motion-платформа с 6 степенями свободы:

4-осевой дельта-робот:

Отсюда - https://redd.it/isneta

Два года разработки с 0, вот прям с чистого чертежа в КОМПАС 3Д. Всю электронику, прошивку, программу управления, механику, математику и дизайн - всё сам и всё с нуля. Наконец-то я сделал это - проект достиг версии 1.00. Не буду голословным, результат работы показан на видео. Надеюсь всем понравится :)

Вот тут можно узнать о ходе разработки подробнее. Там есть ссылки на различные этапы разработки.

https://habr.com/ru/post/493304/

Я – инженер из Новосибирска, за время карантина разработал робота-платформу для прикладных задач. Зовут его «ТанкоЖук «Иннокенний». И я прошу посильной помощи в реализации проекта.

Иннокентий – относительно доступная мощная полноприводная платформа с электроприводом и встроенным подъемником. Она рассчитана на работу с грузом до 100кг, хотя на тестах перевозила и поднимала больше двухсот. Скорость невелика – немногим более 5км/ч. Запас мощности позволяет перевозить достаточно тяжелые для человека грузы и расширять функционал навесным оборудованием, например, газонокосилкой, снегоотбрасывателем, щетками для уборки улиц.

Управляется робот смартфоном по блютус. Если один смартфон закрепить на нем, то вторым можно управлять через интернет, используя видеосвязь. Это гипотетически позволит Иннокентию работать доставщиком или уборщиком, будучи управляемым удаленно, в том числе инвалидами.

Уже ведутся работы над функцией автоматического следования за хозяином и следующим этапом – движение по заранее заданной траектории.

Планируемая розничная стоимость – не более 120т.р.

Кто может – поддержите, пожалуйста, разработку.


Сбор средств ведется на BoomStarter

https://vk.com/beetletank

Сразу скажу что все подсмотрено из интернетов. Это мой первый опыт. Делал из того что было под руками. Хочу услышать в коментариях советы или ваше мнение по поводу проекта. Когда начался карантин я решил сделать какой нибудь интересный проект. Выбор пал на руку манипулятор. Решено было поставить руку на движущуюся платформу и управлять все с помощью пульта. Далее расскажу про само создание:


1) Рука

Нашел в интернетах схему  каркаса которая мне наиболее понравилась, распечатал детали 1 к 1 и вырезал их. Далее я их наклеил на картон и вырезал уже готовые детали.

Робот Апельсин Разгрузка

Для большей прочности я пропитал детали супер клеем и еще подкрасил для красоты.  Для руки я использовал самые дешевые сервоприводы (SG90). В качестве соединений я просто использовал кусочки гвоздей склеенных супер клеем. В итоге получилось такая конструкция.

Робот Апельсин Разгрузка

2) Пульт

Для пульта я использовал ардуино нано, радиомодуль NRF24L01, 3 джойстика и выключатель. Питается пульт от кроны и я еще в конце добавил диод. Корпус я сделал пвх пластика. Выпилил 2 части и склеил их горячими соплями. Соединил все навесным монтажом. Схему приводить не буду, тут вроде и нечего смотреть. Кому интересно то скину в комментариях.

Робот Апельсин Разгрузка
Робот Апельсин Разгрузка

3) Движущуюся платформа

Платформу я вырезал также из пвх пластика. На нее поставил 2 мотор редуктора и драйвер который ими управляет (L298N), такой же радиомодуль NRF24L01 и ардуино уно ( в схеме нано но у меня в наличии лишней не было). В эту же схему подключается 4 серво из которых состоит рука манипулятор. Хотел сделать что то на подобии гусеничной платформы но не закончил. Схему набросал в протеусе.

Робот Апельсин Разгрузка
Робот Апельсин Разгрузка

Программы тоже простенькие. Передатчик считывает значение  с 3 джойстиков и  непрерывно передает массив из 6 элементов (это x и y  каждого джойстика) по радиоканалу в приёмник. 2 джойстика управляют серво и 1 джойстик моторами. Значение одного джойстика я перевел из 1024 в 510 через функцию map ( для управления скоростью моторов). Приёмник непрерывно получает  массив и с помощью операторов  If оперирует ими. Я много пробовал программ и путем проб и ошибок выбрал наиболее как по мне работающие части кода и соединил их.

Вот программа передатчика:

#include <SPI.h> // библиотека для работы с шиной SPI

#include "nRF24L01.h" // библиотека радиомодуля

#include "RF24.h" // ещё библиотека радиомодуля

RF24 radio(9, 10);

byte address[][6] = {"1Node", "2Node", "3Node", "4Node", "5Node", "6Node"}; //возможные номера каналов

int transmit_data[6];

int xPin = A0; //1 джойстик

int yPin = A1; //1 джойстик

int x1Pin = A2;//2 джойстик

int y1Pin = A3; //2 джойстик

int x2Pin = A4;//3 джойстик

int y2Pin = A5; //3 джойстик

int D2 = 2; //светодиод

void setup() {

radio.begin(); //активировать модуль

radio.setAutoAck(0); //режим подтверждения приёма, 1 вкл 0 выкл

radio.setRetries(0, 0); //время между попыткой достучаться, число попыток

radio.enableAckPayload(); //разрешить отсылку данных в ответ на входящий сигнал

radio.setPayloadSize(32); //размер пакета, в байтах

radio.openWritingPipe(address[0]); //мы нулевой канал, открываем канал для передачи данных

radio.setChannel(0x60); //выбираем канал

radio.setPALevel (RF24_PA_MAX); //уровень мощности передатчика

radio.setDataRate (RF24_1MBPS); //скорость обмена. Скорость должна быть одинакова на приёмнике и передатчике

radio.powerUp(); //начать работу

radio.stopListening(); //не слушаем радиоэфир, мы передатчик

pinMode(xPin, INPUT);

pinMode(yPin, INPUT);

pinMode(x1Pin, INPUT);

pinMode(y1Pin, INPUT);

pinMode(x2Pin, INPUT);

pinMode(y2Pin, INPUT);

pinMode(D2, OUTPUT);

}

void loop() {

digitalWrite(D2, HIGH);

transmit_data[0] = map(analogRead(xPin), 0, 1035, 0, 510); // изменяем значение из 1024 в 510 для управления движения (ШИМ)

transmit_data[1] = map(analogRead(yPin), 0, 1023, 0, 510);

transmit_data[2] = analogRead (x1Pin);

transmit_data[3] = analogRead (y1Pin);

transmit_data[4] = analogRead (x2Pin);

transmit_data[5] = analogRead (y2Pin);

radio.write(&transmit_data, sizeof(transmit_data)); //отправляем получившийся массив

}

А вот приемника:


#include <SPI.h>

#include "nRF24L01.h"

#include "RF24.h"

#include <Servo.h>

Servo servo1, servo2, servo3, servo4;

RF24 radio(9,10);

byte address[][6] = {"1Node","2Node","3Node","4Node","5Node","6Node"}; //возможные номера каналов

int recieved_data[6];

int ENA = 5;

int in1 = 7;

int in2 = 4;

int ENB = 6;

int degree1 = 0; // DEL SERVO 1 DEGREES

int degree2 = 0; // DEL SERVO 2 DEGREES

int degree3 = 0; // DEL SERVO 1 DEGREES

int degree4 = 0; // DEL SERVO 2 DEGREES

void setup(){

pinMode(ENA, OUTPUT);

pinMode(ENB, OUTPUT);

pinMode(in1, OUTPUT);

pinMode(in2, OUTPUT);

servo1.attach (8);

servo2.attach (3);

servo3.attach (2);

servo4.attach (A5);

radio.begin(); //активировать модуль

radio.setAutoAck(0); //режим подтверждения приёма, 1 вкл 0 выкл

radio.setRetries(0,15); //(время между попыткой достучаться, число попыток)

radio.enableAckPayload(); //разрешить отсылку данных в ответ на входящий сигнал

radio.setPayloadSize(32); //размер пакета, в байтах

radio.openReadingPipe(1,address[0]); //хотим слушать нулевой канал

radio.setChannel(0x60); //выбираем канал

radio.setPALevel (RF24_PA_MAX); //уровень мощности передатчика.

radio.setDataRate (RF24_1MBPS); //скорость обмена

radio.powerUp(); //начать работу

radio.startListening(); //начинаем слушать эфир, мы приёмный модуль

}

void loop() {

byte pipeNo;

while( radio.available(&pipeNo)){ // слушаем эфир со всех каналов

radio.read( &recieved_data, sizeof(recieved_data) ); //читаем присланный массив

if (recieved_data[1] > 255){

analogWrite(ENA, recieved_data[1] - 255);

analogWrite(ENB, recieved_data[1] - 255);

digitalWrite(in1, HIGH);

digitalWrite(in2, LOW);

//digitalWrite(in3, HIGH);

//digitalWrite(in4, LOW);

} else if (recieved_data[1] < 255)

{ analogWrite(ENA, 255-recieved_data[1]);

analogWrite(ENB, 255-recieved_data[1]);

digitalWrite(in1, LOW);

digitalWrite(in2, HIGH);

}

else if (recieved_data[0] > 255){

analogWrite(ENB, recieved_data[0] - 255);

digitalWrite(in2, HIGH);

digitalWrite(in1, LOW);

}

else if (recieved_data[0] < 255){

analogWrite(ENA, 255 - recieved_data[0]);

digitalWrite(in2, LOW);

digitalWrite(in1, HIGH);

}

else if (recieved_data[0]==255 && recieved_data[1]==255){

digitalWrite(in2, LOW);

digitalWrite(in1, LOW);

delay(10);

}

// INCREASE MOTOR1 DEGREES

/////////////////////////////////////////////////////////////////////////////////////////////////////////////

if ( (recieved_data[2] > 550 ) && (recieved_data[2] <= 1023) ) // INCREASE DEGREES WHEN THE X-AXIS READING IS HIGHER THAN 550

{

degree1 = degree1 + 1;

}

// DECREASE MOTOR1 DEGREES

if ( (recieved_data[2] >= 0 ) && (recieved_data[2] < 480 )) // DECREASE DEGREES WHEN THE X-AXIS READING IS LOWER THAN 480

{

degree1 = degree1 - 1;

}

else // KEEP THE DEGREE VALUE STABLE MEANWHILE YOU ARE NOT USING THE JOYSTICK

{

degree1 = degree1;

}

// INCREASE MOTOR 2 DEGREES

if ( (recieved_data[3] > 550 ) && (recieved_data[3] <= 1023) ) // INCREASE THE DEGREES WHEN THE X-AXIS READING IS HIGHER THAN 550

{

degree2 = degree2 + 1;

}

// DECREASE MOTOR 2 DEGREES

if ( (recieved_data[3] >= 0 ) && (recieved_data[3] < 480) ) // DECREASE THE DEGREES WHEN THE X-AXIS READING IS LOWER THAN 480

{

degree2 = degree2 - 1;

}

else // KEEP THE DEGREE VALUE STABLE MEANWHILE YOU ARE NOT USING THE JOYSTICK

{

degree2 = degree2;

}

/////////////////////////////////////////////////////////////////////////////

if ( (recieved_data[4] > 550 ) && (recieved_data[4] <= 1023) ) // INCREASE DEGREES WHEN THE X-AXIS READING IS HIGHER THAN 550

{

degree3 = degree3 + 1;

}

// DECREASE MOTOR1 DEGREES

if ( (recieved_data[4] >= 0 ) && (recieved_data[4] < 480 )) // DECREASE DEGREES WHEN THE X-AXIS READING IS LOWER THAN 480

{

degree3 = degree3 - 1;

}

else // KEEP THE DEGREE VALUE STABLE MEANWHILE YOU ARE NOT USING THE JOYSTICK

{

degree3 = degree3;

}

// INCREASE MOTOR 2 DEGREES

if ( (recieved_data[5] > 550 ) && (recieved_data[5] <= 1023) ) // INCREASE THE DEGREES WHEN THE X-AXIS READING IS HIGHER THAN 550

{

degree4 = degree4 + 1;

}

// DECREASE MOTOR 2 DEGREES

if ( (recieved_data[5] >= 0 ) && (recieved_data[5] < 480) ) // DECREASE THE DEGREES WHEN THE X-AXIS READING IS LOWER THAN 480

{

degree4 = degree4 - 1;

}

else // KEEP THE DEGREE VALUE STABLE MEANWHILE YOU ARE NOT USING THE JOYSTICK

{

degree4 = degree4;

}

/////////////////////////////////////////////////////////////////////////////

servo1.write (degree1); // SEND THE DEGREES TO SERVO 1

servo2.write (degree2); // SEND THE DEGREES TO SERVO 2

servo3.write (degree3); // SEND THE DEGREES TO SERVO 1

servo4.write (degree4); // SEND THE DEGREES TO SERVO 2

delay (15);

}

}


Для экономии места я убрал все отступления. Заранее извиняюсь за код если кому будет глаза резать.

Теперь о проблемах с которыми я столкнулся:

Значение на джойстиках было никак не 0 - 1024. На каждом джойстике было разное. По этому с помощью функции map значение переводились не совсем корректно и достаточно плавного изменения скорости я не добился. Так же я не решил проблему с питанием. Запитал устройство от блока питания на 12 v через драйвер двигателя, с 12 вольт подключил так же Ардуино. Далее  с клеммы 5 v отдельно подключил  4 серво. Так же у меня не хватало пинов чтобы управлять серво. Насколько я понял что серво ими лучше управлять через пины в которых есть шим но большинство пинов было занято радиомодулем и драйвером. При таком подключении все работало и потом узнал что аналоговые пины тоже можно использовать как цифровые. Серво в итоге пульсировали хотя контакты я припаял напрямую к плате. Если подскажете в чем проблема то буду очень благодарен. Ну и в конце демонстрация того что получилось.

А меня другое убило, ягодки лежат одна к другой как патроны, неужели ручной труд ?

Скорее всего так аккуратно ягодки раскладывает "дельта робот" типа этого:

1468

Бестолковость

Развернуть
Бестолковость GIF