roboforum.ru

Технический форум по робототехнике.
Текущее время: 23 ноя 2024, 11:06

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




Начать новую тему Ответить на тему  [ Сообщений: 147 ]  На страницу Пред.  1 ... 4, 5, 6, 7, 8, 9, 10  След.
Автор Сообщение
 Заголовок сообщения: Re: Простая аниматроника на Ардуино
СообщениеДобавлено: 31 мар 2020, 21:09 
Не в сети
Аватара пользователя

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

Ты уже перерос такие игрушки. Надо замахиваться на большой проект!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Простая аниматроника на Ардуино
СообщениеДобавлено: 01 апр 2020, 13:55 
Не в сети
Аватара пользователя

Зарегистрирован: 03 янв 2013, 16:27
Сообщения: 1386
Гексапод на 18 сервоприводах?:)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Простая аниматроника на Ардуино
СообщениеДобавлено: 01 апр 2020, 17:15 
Не в сети
Аватара пользователя

Зарегистрирован: 30 сен 2008, 18:49
Сообщения: 2681
Откуда: Где-то в Латинской Америке
+ ИИ на борту!


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Простая аниматроника на Ардуино
СообщениеДобавлено: 01 апр 2020, 17:38 
Не в сети
Аватара пользователя

Зарегистрирован: 03 янв 2013, 16:27
Сообщения: 1386
Как принципиально отделить ИИ гексапода от реакции написанной заранее программы на совокупность показаний датчиков? Если бы датчики могли редактировать скетч и перезаписывать в МК, а не переводить исполнение от одного предписанного фрагмента кода к другому.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Простая аниматроника на Ардуино
СообщениеДобавлено: 01 апр 2020, 23:02 
Не в сети
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Простая аниматроника на Ардуино
СообщениеДобавлено: 02 апр 2020, 11:01 
Не в сети
Аватара пользователя

Зарегистрирован: 03 янв 2013, 16:27
Сообщения: 1386
Обоснованный выбор варианта из двух на основе опыта - это ИИ?..
Если да, то такой вариант скетча можно сваять попробовать:два сценария отхода-обхода от препятствий, робот пробует оба за одинаковый промежуток времени, фиксирует суммарное время сработки датчика препятствия и сравнив результаты - выбирает из двух оптимальный для данного полигона...
Только получается это 3 уровень, выбор сценария из имеющихся.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Простая аниматроника на Ардуино
СообщениеДобавлено: 02 апр 2020, 18:01 
Не в сети
Аватара пользователя

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

Не, выбор - это скучно. Твое создание должно генерировать новые действия и умения, которые, ты в него не закладывал. В примере с пауком, он будет генерировать позы (случайное сочетание положений серв с некоторыми ограничениями), когда на него кто-нибудь смотрит (датчик движения). Какая то поза тебе понравится и ты похвалишь паука (сообщишь ему об этом голосом через смартфон). Следующую позу, паук будет строить, уже на основе понравившейся, чтобы довести до совершенства. В результате - процесс самообучения, который вполне можно отнести к интеллектуальным функциям.
Обратимся к всезнающей википедии:
Области робототехники и искусственного интеллекта тесно связаны друг с другом. Интегрирование этих двух наук, создание интеллектуальных роботов составляют ещё одно направление ИИ. Интеллектуальность требуется роботам, чтобы манипулировать объектами, выполнять навигацию с проблемами локализации (определять местонахождение, изучать ближайшие области) и планировать движение (как добраться до цели). Примером интеллектуальной робототехники могут служить игрушки-роботы Pleo, AIBO, QRIO.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Простая аниматроника на Ардуино
СообщениеДобавлено: 02 апр 2020, 20:16 
Не в сети
Аватара пользователя

Зарегистрирован: 03 янв 2013, 16:27
Сообщения: 1386
Scorpio писал(а):
Не, выбор - это скучно. Твое создание должно генерировать новые действия и умения, которые, ты в него не закладывал. В примере с пауком, он будет генерировать позы (случайное сочетание положений серв с некоторыми ограничениями)

Заманчиво конечно стереть в мк все функции хождения и выставив "кулак перед носом" (датчик препятствия)им помахивать (хозяин доволен или нет) ждать пока он сгенерит прямохождение сам...какие тут подсказки можно закладывать в скетч и как не доподсказываться до имитации самостоятельности?

Добавлено спустя 31 минуту 46 секунд:

Вот 2 уровень-одиночный сценарий поведения.
Код:
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Arduino UNO,Pro mini
//
////////////////////////
//ПАУК (ГЕКСАПОД) 3 СЕРВОПРИВОДА с датчиком
//
#include <Servo.h>
byte dd=10;//амплитуда ходьбы
byte n=5;// постоянная временного интервала
byte i=0;//счётчик
byte j=0;//счётчик
byte a=90;//угол "серединный"
byte b=90;//угол "серединный"
byte c=95;//угол "серединный"

boolean fl_A=false;//флаг состояний
long Y=0;//переменная хранения моментов времени

////////////////////////////
Servo servo_a;
Servo servo_b;
Servo servo_c;

void setup()
{
  servo_a.attach(5);//вывод управления сервоприводом ПРАВАЯ ПАРА
  servo_a.write(a+dd);// установка начального значения
 
  servo_b.attach(6);//вывод управления сервоприводом ЛЕВАЯ ПАРА
  servo_b.write(b+dd);// установка начального значения
 
  servo_c.attach(7);//вывод управления сервоприводом ЦЕНТРАЛЬНАЯ ПАРА
  servo_c.write(c-dd);// установка начального значения
 
  pinMode (8,INPUT );//подключение датчика препятствий
}
/////////////////////////////////////////////////////////////////////////////////////////
void loop()
{
  //////////// СЦЕНАРИЙ ПОВЕДЕНИЯ ГЕКСАПОДА //////////////////////
  if(fl_A==true){vpered(2);vilanie_2(10);nazad(7);if(random(0,2)==1){levo(5);}else{pravo(5);}}//если на пути преграда пытаемся сдвинуть-пройти,отходим,разворачиваемся
  if(fl_A==false){vpered(1);}//если преграды нет идём прямо
}
/////////////////////////////////////////////////////////////////////////////////////////
void vpered(byte k){
   for(j=0;j<k;j++){
  ///////////// ВПЕРЁД  /////////////
  servo_c.write(c-dd);// установка начального значения
  servo_a.write(a+dd);// установка начального значения
  servo_b.write(b+dd);// установка начального значения
 
  /////////// такт 1 ///////////
  for(i=0;i<2*dd;i++)
  {
  servo_a.write(servo_a.read()-1);
  servo_b.write(servo_b.read()-1);
  delay_(n);
  }
  /////////// такт 2 ///////////
  for(i=0;i<2*dd;i++)
  {
  servo_c.write(servo_c.read()+1);
  delay_(n);
  }
/////////// такт 3 ///////////
  for(i=0;i<2*dd;i++)
  {
  servo_a.write(servo_a.read()+1);
  servo_b.write(servo_b.read()+1);
  delay_(n);
  }
   /////////// такт 4 ///////////
  for(i=0;i<2*dd;i++)
  {
  servo_c.write(servo_c.read()-1);
  delay_(n);
  }
}
}
///////////////////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////////////////////
void levo(byte k){
   for(j=0;j<k;j++){
  ///////////// ВЛЕВО /////////////
  servo_c.write(c-dd);// установка начального значения
  servo_a.write(a+dd);// установка начального значения
  servo_b.write(b-dd);// установка начального значения
 
  /////////// такт 1 ///////////
  for(i=0;i<2*dd;i++)
  {
  servo_a.write(servo_a.read()-1);
  servo_b.write(servo_b.read()+1);
  delay_(n);
  }
  /////////// такт 2 ///////////
  for(i=0;i<2*dd;i++)
  {
  servo_c.write(servo_c.read()+1);
  delay_(n);
  }
/////////// такт 3 ///////////
  for(i=0;i<2*dd;i++)
  {
  servo_a.write(servo_a.read()+1);
  servo_b.write(servo_b.read()-1);
  delay_(n);
  }
   /////////// такт 4 ///////////
  for(i=0;i<2*dd;i++)
  {
  servo_c.write(servo_c.read()-1);
  delay_(n);
  }
}
}
///////////////////////////////////////////////////////////////////////////////////////////
void pravo(byte k){
   for(j=0;j<k;j++){
  ///////////// ВПРАВО /////////////
  servo_c.write(c-dd);// установка начального значения
  servo_a.write(a-dd);// установка начального значения
  servo_b.write(b+dd);// установка начального значения
 
  /////////// такт 1 ///////////
  for(i=0;i<2*dd;i++)
  {
  servo_a.write(servo_a.read()+1);
  servo_b.write(servo_b.read()-1);
  delay_(n);
  }
  /////////// такт 2 ///////////
  for(i=0;i<2*dd;i++)
  {
  servo_c.write(servo_c.read()+1);
  delay_(n);
  }
/////////// такт 3 ///////////
  for(i=0;i<2*dd;i++)
  {
  servo_a.write(servo_a.read()-1);
  servo_b.write(servo_b.read()+1);
  delay_(n);
  }
   /////////// такт 4 ///////////
  for(i=0;i<2*dd;i++)
  {
  servo_c.write(servo_c.read()-1);
  delay_(n);
  }
}
}
///////////////////////////////////////////////////////////////////////////////////////////
void na_meste(byte k){
   for(j=0;j<k;j++){
  ///////////// ТОПТАНИЕ НА МЕСТЕ /////////////
  servo_c.write(c-dd);// установка начального значения
 
  /////////// такт 1 ///////////
  for(i=0;i<2*dd;i++)
  {
  servo_c.write(servo_c.read()+1);
  delay_(2*n);
  }

   /////////// такт 2 ///////////
  for(i=0;i<2*dd;i++)
  {
  servo_c.write(servo_c.read()-1);
  delay_(2*n);
  }
}
}
///////////////////////////////////////////////////////////////////////////////////////////


void vilanie_2(byte k){
   for(j=0;j<k;j++){
  ///////////// ВИЛЯНИЕ ТУШКОЙ 2  /////////////
  servo_c.write(c-dd);// установка начального значения
  servo_a.write(a+dd);// установка начального значения
  servo_b.write(b+dd);// установка начального значения
 
  /////////// такт 1 ///////////
  for(i=0;i<2*dd;i++)
  {
  servo_a.write(servo_a.read()-1);
  delay(n);
  }
 
/////////// такт 2 ///////////
  for(i=0;i<2*dd;i++)
  {
  servo_a.write(servo_a.read()+1);
  delay(n);
  }
 
}
}
///////////////////////////////////////////////////////////////////////////////////////
void nazad(byte k){
   for(j=0;j<k;j++){
  ///////////// НАЗАД  /////////////
  servo_c.write(c+dd);// установка начального значения
  servo_a.write(a+dd);// установка начального значения
  servo_b.write(b+dd);// установка начального значения
 
  /////////// такт 1 ///////////
  for(i=0;i<2*dd;i++)
  {
  servo_a.write(servo_a.read()-1);
  servo_b.write(servo_b.read()-1);
  delay(n);
  }
  /////////// такт 2 ///////////
  for(i=0;i<2*dd;i++)
  {
  servo_c.write(servo_c.read()-1);
  delay(n);
  }
/////////// такт 3 ///////////
  for(i=0;i<2*dd;i++)
  {
  servo_a.write(servo_a.read()+1);
  servo_b.write(servo_b.read()+1);
  delay(n);
  }
  /////////// такт 4 ///////////
  for(i=0;i<2*dd;i++)
  {
  servo_c.write(servo_c.read()+1);
  delay(n);
  } 
}
}
/////////////////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////////////
////  ФУНКЦИИ ОПИСАНИЕ // вместо задержки времени через delay  ////////////////////////////////////////
void delay_(int T1)
{
Y=millis();
while(millis()-Y<T1)
  {
   if(digitalRead(8)==LOW){fl_A=true;}else{fl_A=false;}
   }
}
///////////////////////////////////////////////////////////////////////////////////////////////////////


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Простая аниматроника на Ардуино
СообщениеДобавлено: 02 апр 2020, 20:54 
Не в сети
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Простая аниматроника на Ардуино
СообщениеДобавлено: 04 апр 2020, 09:47 
Не в сети
Аватара пользователя

Зарегистрирован: 03 янв 2013, 16:27
Сообщения: 1386
Подумывая о самостоятельности робота при хаотичном шевелении качалками вдруг :) осознал: все качалки в любом ходуне просто качаются около центрального положения (чаще 90 градусов) с одинаковой амплитудой и частотой переключений. Прикинул графики углов отклонений от времени, поэкспериментировал с гексаподом на 3 сервы. Сдвиги графиков очень похожих на синусоиды относительно друг друга и даёт все вариации хождений. Неожиданная гипотеза. То есть комбинации прямохождений и поворотов в разных пропорциях, но при целостности походки. Сценарии скетчей теперь будут выглядеть по другому совсем. "Синусоиду любой формы" можно забивать в массив.
Код:
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//
// Arduino UNO,Pro mini
//
////////////////////////
//ПАУК (ГЕКСАПОД) 3 СЕРВОПРИВОДА ТЕСТ
//
#include <Servo.h>
byte dd=10;//амплитуда ходьбы
byte n=5;// постоянная временного интервала
byte i=0;//счётчик
byte j=0;//счётчик
byte a=90;//угол "серединный"
byte b=90;//угол "серединный"
byte c=98;//угол "серединный"


long Y=0;//переменная хранения моментов времени

int tabl[]={-4*dd/5,-3*dd/5,-2*dd/5,-dd/5,0,dd/5,2*dd/5,3*dd/5,4*dd/5,dd,dd,dd,dd,dd,dd,dd,dd,dd,dd,dd,
4*dd/5,3*dd/5,2*dd/5,dd/5,0,-dd/5,-2*dd/5,-3*dd/5,-4*dd/5,-dd,-dd,-dd,-dd,-dd,-dd,-dd,-dd,-dd,-dd,-dd};//массив последовательности приращений углов
int DL = sizeof(tabl) / sizeof(tabl[0]);//количество элементов массива
byte sm_1=DL/4;//смещение последовательности приращений углов ВПЕРЁД(sm_1=DL/4,sm_2=0);НАЗАД(sm_1=3*DL/4,sm_2=0)
byte sm_2=0;//смещение последовательности приращений углов ВПРАВО(sm_1=DL/4,sm_2=DL/2);ВЛЕВО(sm_1=3*DL/4,sm_2=DL/2)

////////////////////////////
Servo servo_a;
Servo servo_b;
Servo servo_c;

void setup()
{
  servo_a.attach(5);//вывод управления сервоприводом ПРАВАЯ ПАРА
  servo_a.write(a);// установка начального значения
 
  servo_b.attach(6);//вывод управления сервоприводом ЛЕВАЯ ПАРА
  servo_b.write(b);// установка начального значения
 
  servo_c.attach(7);//вывод управления сервоприводом ЦЕНТРАЛЬНАЯ ПАРА
  servo_c.write(c);// установка начального значения
}
/////////////////////////////////////////////////////////////////////////////////////////
void loop()
{
dvig();
}
/////////////////////////////////////////////////////////////////////////////////////////
void dvig(){
  for(i=0;i<DL;i++)
  {
  if(i+sm_2>=DL){servo_a.write(a+tabl[i+sm_2-DL]);}else{servo_a.write(a+tabl[i+sm_2]);}
  servo_b.write(b+tabl[i]);
  if(i+sm_1>=DL){servo_c.write(c+tabl[i+sm_1-DL]);}else{servo_c.write(c+tabl[i+sm_1]);}
  delay_(2*n);
  }

}
///////////////////////////////////////////////////////////////////////////////////////
////  ФУНКЦИИ ОПИСАНИЕ // вместо задержки времени через delay  ////////////////////////////////////////
void delay_(int T1)
{
Y=millis();
while(millis()-Y<T1)
  {
   ///////////
   }
}
////////////////////////////////////////////////////////////////////


Вложения:
графики.jpg
графики.jpg [ 61.6 КиБ | Просмотров: 2385 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Простая аниматроника на Ардуино
СообщениеДобавлено: 04 апр 2020, 15:24 
Не в сети
Аватара пользователя

Зарегистрирован: 03 янв 2013, 16:27
Сообщения: 1386
Из-за эпидемии больше ничего по форме в голову не идёт :( с гексаподом.


Вложения:
osnova.png
osnova.png [ 24.47 КиБ | Просмотров: 2348 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Простая аниматроника на Ардуино
СообщениеДобавлено: 04 апр 2020, 19:31 
Не в сети
Аватара пользователя

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Простая аниматроника на Ардуино
СообщениеДобавлено: 04 апр 2020, 20:53 
Не в сети
Аватара пользователя

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


Вложения:
osnova 2.png
osnova 2.png [ 29.72 КиБ | Просмотров: 2326 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Простая аниматроника на Ардуино
СообщениеДобавлено: 05 апр 2020, 10:17 
Не в сети
Аватара пользователя

Зарегистрирован: 03 янв 2013, 16:27
Сообщения: 1386
Такой вариант сборки, можно попробовать и квадро и гекса и трёхнога с опорой на брюхо:)


Вложения:
sborka1.png
sborka1.png [ 38.53 КиБ | Просмотров: 2287 ]
sborka2.png
sborka2.png [ 44.94 КиБ | Просмотров: 2283 ]
sborka3.png
sborka3.png [ 27.7 КиБ | Просмотров: 2288 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Простая аниматроника на Ардуино
СообщениеДобавлено: 06 апр 2020, 01:52 
Не в сети
Аватара пользователя

Зарегистрирован: 30 сен 2008, 18:49
Сообщения: 2681
Откуда: Где-то в Латинской Америке
С 12ю сервами красиво ходить не будет. 18 надо, однако.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 147 ]  На страницу Пред.  1 ... 4, 5, 6, 7, 8, 9, 10  След.

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


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

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


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

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