roboforum.ru

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


Обсуждение алгоритмов движения пылесоса

Re: Обсуждение алгоритмов движения пылесоса

Сообщение =DeaD= » 19 июл 2011, 18:37

Vovan писал(а):Я пока не очень догадался какие это дает преимущества и дает ли ваще :oops: , но что-то в этом есть

Еще как даёт - это позволяет из тупика выезжать на раз-два. В отличие от любой другой конструкции, которая начинает тыркаться туда-сюда, не имея пространства для маневра.
Проект [[Open Robotics]] - Универсальные модули для построения роботов
Аватара пользователя
=DeaD=
 
Сообщения: 24218
Зарегистрирован: 06 окт 2004, 18:01
Откуда: Ебург
прог. языки: C++ / PHP / 1C
ФИО: Антон Ботов

Re: Обсуждение алгоритмов движения пылесоса

Сообщение Vovan » 19 июл 2011, 19:03

О! точно! :) спасибо =DeaD=
_________
Sincerely,
Vovan
Аватара пользователя
Vovan
 
Сообщения: 3340
Зарегистрирован: 05 окт 2005, 12:03
Откуда: Литва
прог. языки: asm

Re: Обсуждение алгоритмов движения пылесоса

Сообщение Kulverstukas » 17 окт 2014, 21:30

Читал я Вас Читал роебятки и не выдержал, сдделал свою железяку и зарегистрировался. Всё хорошо, но где же обсуждение алгоритмов в реальных с++-паскалях и т.д? Пока что с алгоритмом радиста не разобрался, распечатал его, читаю, думаю. Себе сделал пока ориентацию в пространстве по минимальным значениям с вращающегося датчика ультразвука (на серво). Моторы поставил шаговые редукторные, поэтому по шагам можно считать сколько проехал. именно эти моторы 28BYJ-48 с редуктором 1/64 очень медленный, но меня устраивает, абсолютно бесшумный. Для опытов идеально. Серву планирую заменить для опытов шаговиком с головки флопи (для тишины, чисто мои заморочки)
Тех характеристики таковы. Скорость максимальная которой можно добиться от этих моторов это 8 мм/сек при 6 см колесах (медленно, но меня устраивает) компенсируется весьма малым потреблением. Немного фото
T9bvjqrVDxU.jpg

чуть строчек кода логики (не целиком, если нужно выложу) для ардуино
Код: Выделить всёРазвернуть
  void vperiod () {m2++; m1++; shag2++; shag1++; move_1mot(); move_2mot();}
 
  void levo ()    {m1--; m2++; shag2++; shag1--; move_1mot(); move_2mot();}
 
  void pravo ()   {m1++; m2--; shag1++; shag2--; move_1mot(); move_2mot();} 
 
  void nazad () {m2--; m1--; shag2--; shag1--; move_1mot(); move_2mot();}
 

void move_1mot () {    здесь выставляю следующее положение левого шаговика
       }
void move_2mot () {   здесь выставляю следующее положение правого шаговика
       }
void analiz () {
  if (range90>20 && range160>20 && range20>20) vperiod ();
  if (range90>20 && range160<20 && range20>20) levo();
  if (range90>20 && range160>20 && range20<20) pravo();
  if (range90>20 && range160<20 && range20<20) vperiod();
  if (range90<20 && range160>20 && range20>20)  levo();
  if (range90<20 && range160<20 && range20<20) { for (int i=0; i<80; i++) nazad (); servo_scan(); for (int i=0; i<80; i++) {levo();} servo_scan(); range90=range90-10;}
  if (range90<20 && range160>20 && range20<20)  pravo();
  if (range90<20 && range160<20 && range20>20)  levo();


void servo_scan () {
  if (ugol_servo==160) ugol=-5;
  if (ugol_servo==20) ugol=+5;
   
if (ugol_servo==20) range20=ultrasonic.Ranging(CM);
if (ugol_servo==90) range90=ultrasonic.Ranging(CM);
if (ugol_servo==160) range160=ultrasonic.Ranging(CM);
ugol_servo=ugol_servo+ugol;
motor.write(ugol_servo);   //устанавливаю серво в следующее положение

}

void loop() {

schet1++;
  analiz();

  if (schet1==25) {servo_scan(); schet1=0; } если так не сделать серва носится ненормально
По другому не понял как это отрегулировать.
   
}

По поводу кода. 0 угол слева от тележки, 180 угол справа от тележки. m1 левый мотор, m2 правый мотор
Последний раз редактировалось Kulverstukas 19 окт 2014, 00:50, всего редактировалось 2 раз(а).
кто со мной тот герой, кто без меня, тот... нереально крут потому что сам во всем разбирается.
Аватара пользователя
Kulverstukas
 
Сообщения: 53
Зарегистрирован: 17 окт 2014, 20:39
прог. языки: с++

Re: Обсуждение алгоритмов движения пылесоса

Сообщение Myp » 18 окт 2014, 12:01

фото надо загружать на форум в сообщение
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Re: Обсуждение алгоритмов движения пылесоса

Сообщение Kulverstukas » 19 окт 2014, 11:50

Сделал проверочную под программку для проверки ультразвукового датчика, есть интересные особенности. (В целом при работе тележки в условиях приближения к предметам не ближе 20 см глюков нет, из всех мест он выбирается. Но вот что удалось с отключенными моторами записать на монитор порта.
Условие: Сканируем пространство, спереди и справа это квадратные подушки дивана (55см, 84см соответственно до них), слева это кожаный вертикальный подлокотник (17см) (*то есть идеально перпендикулярные основанию поверхности) слева у нас 0 градусов, спереди 90 справа 180. сканируем от 15 до 165 градусов ступеньками по 15 градусов (зона обхвата датчика) В таблице идет угол-расстояние в см (углы 165-150-135-120-105-90-75-60-45-30-15)
165 94 150 91 135 94 120 3452 105 3744 90 3732 75 3146 60 72 45 3746 30 3737 15 16 30 17 45 17 60 3729 75 3740 90 1126 105 1022 120 57 135 3737 150 3723
165 94 150 91 135 94 120 3733 105 3747 90 2769 75 55 60 73 45 3744 30 3741 15 17 30 17 45 17 60 3742 75 3753 90 664 105 56 120 55 135 3741 150 3740
165 94 150 92 135 94 120 3736 105 3741 90 3739 75 3746 60 3736 45 3747 30 3732 15 16 30 16 45 16 60 2029 75 3746 90 3742 105 3752 120 3739 135 3728 150 3729
165 94 150 91 135 94 120 3737 105 3739 90 3740 75 3746 60 3735 45 3746 30 3739 15 16 30 16 45 16 60 3744 75 3746 90 3744 105 2259 120 57 135 3728 150 3739
165 95 150 91 135 94 120 451 105 3745 90 3741 75 3737 60 3738 45 3732 30 3739 15 16 30 16 45 16 60 3748 75 3736 90 3748 105 3734 120 3741 135 3733 150 3735

Кроме того что есть невразумительные цифры обращаю внимание что когда датчик идет в одну строну есть показания максимальной длинны 3700-3800 см то в обратную сторону этого может и не быть
Код: Выделить всёРазвернуть
void servo_scan () {
  if (ugol_servo==165) {ugol=-15; Serial.println();}
  if (ugol_servo==15) {ugol=+15; }
  if (ugol_count==10) count_range=-1;
  if (ugol_count==0) count_range=+1;
delay (200); 
range[ugol_count]=ultrasonic.Ranging(CM);
delay (100);
Serial.print(ugol_servo);
Serial.print("  ");
Serial.print(ultrasonic.Ranging(CM));
Serial.print("  ");
motor.write(ugol_servo);
delay (180);
ugol_servo+=ugol;
ugol_count+=count_range;
}

void loop() {
  for (int i=0; i<11; i++) servo_scan();
}


сетап и прочие настройки опустил....
Последний раз редактировалось Kulverstukas 20 окт 2014, 16:59, всего редактировалось 1 раз.
кто со мной тот герой, кто без меня, тот... нереально крут потому что сам во всем разбирается.
Аватара пользователя
Kulverstukas
 
Сообщения: 53
Зарегистрирован: 17 окт 2014, 20:39
прог. языки: с++

Re: Обсуждение алгоритмов движения пылесоса

Сообщение Kulverstukas » 20 окт 2014, 15:47

Сделал я вторую платформу без моторов для опыта, на 1 серве 2 датчика, ультразвуковой HC-SR04 и оптический sharp 2y0A02 (полное название GP2Y0A02YK0F) Сравнил их в "тепличных" условиях. 3 коробки из под материнских пла, расстояния слева 17 см спереди 21 справа 17 см (точность 1-1,5 см :D , смотря от чего мерять, учитывать ли внутренности головок и т.д.) В общем и целом выяснилась и так понятная "в догадках" теория. Для ультразвукового датчика камнем преткновения являются углы. при движущейся платформе, с первого раза, без мониторинга значений можно не понять ибо датчик успеет сделать несколько измерений прежде чем возникнет ситуация когда он (робот) сможет столкнуться и одно из значений точно будет верным. Что касается самого эксперимента. Таблицы здесь почему то всегда сбиваются, вставлю картинкой (УЗ-Ультразвуковой цифровой датчик ОПТ-оптический датчик шарп, аналоговый. Дистанция в сантиметрах, измерение "туда" это движение серво от 165 градусов (справа) до 15 градусов (слева) против часовой стрелки, так как конечные углы по 2 раза не сканируются то в этих местах нет значений.)
расстояния.gif
Таблица измерения расстояний

Как видно проблемы только в углах "П" образного препятствия и то только при движении в одном из направлений для серво. Это 120 градусов "туда" (при движении серво от 165 до 15 градусов, против часовой стрелки)
место опыта.gif
место
место опыта.gif (8.15 КиБ) Просмотров: 3516

Библиотека для оптического датчика отсюда http://robot-develop.org/archives/1043 пришлось чуть подправить (она как понял для 1.0 версии IDE)
Последний раз редактировалось Kulverstukas 20 окт 2014, 16:23, всего редактировалось 2 раз(а).
кто со мной тот герой, кто без меня, тот... нереально крут потому что сам во всем разбирается.
Аватара пользователя
Kulverstukas
 
Сообщения: 53
Зарегистрирован: 17 окт 2014, 20:39
прог. языки: с++

Re: Обсуждение алгоритмов движения пылесоса

Сообщение Myp » 20 окт 2014, 15:59

насколько быстро крутится датчик?
может проблема из за того что излучатель/приёмник несимметричные и поворот влево не тоже самое что поворот вправо?
а если попробовать поставить вертикально? чтоб излучатель и приёмник были на оси вращения?
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Re: Обсуждение алгоритмов движения пылесоса

Сообщение Kulverstukas » 20 окт 2014, 16:55

Я писал в предыдущем сообщении что менял задержку до 2000мс и ничего не поменялось, серво угол отбивает по заданию, что по часовой что против часовой стрелки 15 градусов один угол должен быть. Для чистоты эксперимента попробую то о чем вы говорите. датчики стоят точно на оси вращения,насколько это возможно (так прочнее) (Сделал фото)
УЗ датчик немного повернут вверх нарочно, чтобы не отражать горизонт (если установлю на бота).
Вложения
IMG_20141020_163500_cr.jpg
IMG_20141020_163613_cr.jpg
IMG_20141020_163613_cr.jpg (78.54 КиБ) Просмотров: 3486
кто со мной тот герой, кто без меня, тот... нереально крут потому что сам во всем разбирается.
Аватара пользователя
Kulverstukas
 
Сообщения: 53
Зарегистрирован: 17 окт 2014, 20:39
прог. языки: с++

Re: Обсуждение алгоритмов движения пылесоса

Сообщение Myp » 20 окт 2014, 17:28

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

имхо на таких маленьких дистанциях, когда расстояние между излучателем и приёмником сравнимо с базой датчика, получается некий параллакс.
<telepathmode>На вопросы отвечает Бригадир Телепатов!</telepathmode>
Всё уже придумано до нас!
Аватара пользователя
Myp
скрытый хозяин вселенной :)
 
Сообщения: 18018
Зарегистрирован: 18 сен 2006, 12:26
Откуда: Тверь по прозвищу Дверь
прог. языки: псевдокод =) сила в алгоритме!
ФИО: глубокоуважаемый Фёдор Анатольевич

Re: Обсуждение алгоритмов движения пылесоса

Сообщение Kulverstukas » 22 окт 2014, 14:05

Сэр, я Вас понял с первого раза!(не имел введу что задача выполнена, говорил только о соосности. Вертикальная установка еще впереди. Благодарю тебя админ что не самому с собой приходится общаться!
Продолжим. Дальнейшие мысли (допустим с расстояниями все в порядке и точность есть) Строить координатную плоскость перед платформой с некоторой кратностью (не нагрузить ресурсы микро и упростить задачу) например сетка Х У с ячейками 10 см. Каждый замер расстояния по каждому углу заносим в массив и пересчитываем эти данные для координатной плоскости дабы потом по этим точкам ориентироваться. Для начала другими заморочками предлагаю не обременять сознание.
Промер.jpg

Нарисовал какое то воображаемое пространство, в нем промерял линейкой расстояния (как будто бы их померял датчик) масштаб клетка 5 см. и по данным дистанции и углам построил точки в пространстве. Потом сделал промер координат переместив воображаемую платформу на 10 см. Получилось неплохо. Некоторые точки повторились (что говорит о том что математика работает) точки указаны в 10-ках сантиметров. плоскость Х смещена на 10 чтобы небыло отрицательных значений. то есть начальная точка платформы 10,0 (Х,У)
Теперь мысли такие, записать этот алгоритм в программу и на бесколесной платформе сделать кнопку которая будет запускать следующий замер, таким образом вручную перемещать платформу по 10 см и производить замер в настоящем пространстве (конечно подобрав при этом максимально простую местность с перпендикулярными полу поверхностями, без стульев, ниш, и прочих малых препятствий)
кто со мной тот герой, кто без меня, тот... нереально крут потому что сам во всем разбирается.
Аватара пользователя
Kulverstukas
 
Сообщения: 53
Зарегистрирован: 17 окт 2014, 20:39
прог. языки: с++

Re: Обсуждение алгоритмов движения пылесоса

Сообщение Kulverstukas » 27 окт 2014, 10:30

Есть некоторые результаты которыми хотел бы поделиться, для "настоящего" робостроителя это конечно все детский сад наверно, но нам начинающим приходится все это пройти.
Построил множество графиков, и некоторые из них "повторили" форму пространства, прошу не сильно "ржать" :D Но как мне кажется что если бы да так все время (то есть каждое измерение) выглядело бы так пространство то уже было бы не плохо. на самом деле это одно из 15 замеров. Саму картинку (график построенный в Excel) портят некоторые значения выбивающиеся из графика.
дистанцию замерял сам робот, координаты замерял сам робот, в Excel я лишь пересчитал координаты Х У в сантиметры ибо я схитрил чтобы не делать расчетов с плавающей запятой значения косинуса и синуса я умножил на 128 и дистанцию перемножал именно на эти целые значения. Потом готовую дистанцию можно просто сместить на 3 байта, что быстрее деления, но я это сделал уже в Excel.
Пространство.jpg

немного похоже на то препятствие что я строил (пару моих сообщений вверх)
кто со мной тот герой, кто без меня, тот... нереально крут потому что сам во всем разбирается.
Аватара пользователя
Kulverstukas
 
Сообщения: 53
Зарегистрирован: 17 окт 2014, 20:39
прог. языки: с++

Re: Обсуждение алгоритмов движения пылесоса

Сообщение Kulverstukas » 31 окт 2014, 18:55

Нашел хорошую библиотеку в которой есть фильтрация данных с УЗ датчика HC-04SR (CyberMod с сайта cybr-place.ru). В ближайшее время закину картинки графиков с пояснениями и скетч. Скажу лишь что график стал ровнее некуда. В точности есть конечно ньюансы всё таки у датчика есть разница по разного качества поверхностям (глянец, шершавость) но ровная стенка это теперь, на графике который отрисован по координатам Х, У построенному в декартовой системе, ровная прямая!!! Вобщем большего желать пока не смею, начинаю строить платформу ориентирующуюся в пространстве по этому методу.
П.С. Есть недостаток (куда без него) датчик производит несколько измерений, в моем случае 5, а это время! ну например если поставить ограничение на 12000 микросекунд ожидания (это 206см) то только измерения на каждом из углов займут 12*5=60мс. Если тележка медленная как у меня то проблем особых нет, а если быстрая, нужно думать где оставить приоритет по замеру , какую задать скорость и так далее.
продолжаем.
Пространство+симиляр.jpg

Текст тесовой программы. срабатывает с нажатия кнопки повешенной на пин8 и измеряет все вокруг с 15 градусов серво до 165, делает это начиная с 90 градусов и поэтому получается 2 прохода.
Код: Выделить всёРазвернуть
 #include <CyberLib.h>
#include <SoftwareSerial.h>
#include <Servo.h>


#define size_buff 5 //размер массива sensor
uint16_t sensor[size_buff]; //массив для хранения замеров дальномера


//**********Переменные*****************************
byte  ugol=15;
byte  ugol_servo=90, count_range=1, ugol_count=5, but1; /* кнопка запуска измерений but1 1 bit new state 2-bit old stste*/
int   shag1=1, shag2=1, range[11], x, y, schet1=1;
   //    градусы  165  150  135 120 105 90 75  60   45   30   15     //Для расчета координат по Х
  int sinus[11]={-124,-111,-91,-64,-33, 0 , 33, 64, 91, 111, 124}; //Значения синуса и косинуса умноженные на 128 чтобы без запятых и можно потом Х и У
     //    градусы  165 150  135  120  105  90  75   60   45   30   15
  byte cosinus[11]={33, 64,  91,  111, 124,128, 124, 111, 91,  64,  33}; //для расчета координат по У

//****Функция рачета расстояния с сортировкой неверных значений из CyberLib**********
uint16_t GetDistance()
{
uint16_t dist;
for (uint8_t i = 0; i < size_buff; ++i) //производим несколько замеров
  {
    D2_High; delay_us(10);  D2_Low;  //запустить измерение
   dist = pulseIn(3, HIGH, 12000); //считываем длительность времени прохождения эха, ограничить время ожидания
   if(dist==0) dist=12000;  // 12000 микросекунд = 206 сантиметрам
   sensor[i]=dist;  //сохранить в массиве
   delay_ms(40); //задержка между посылками

  }
  dist=(find_similar(sensor, size_buff, 58))/58; //фильтруем показания датчика и переводим в см
  return dist;
}

Servo motor; // инициализируем серво мотор (добавляем его в программу)

void setup() {
  Serial.begin(9600);  //скорость серийного порта, для сброса значений на экран компьютера
  motor.attach(12);   //серво вешаем на 12 ногу
  delay(200);
   motor.write(ugol_servo); //задано в переменных изначальный угол = 90 градусов
  delay (200);
    D2_Out; D2_Low; //пин trig ультразвукового сонара
   D3_In; //пин echo  ультразвукового сонара
  pinMode(8,INPUT);  // прикрепляем кнопку запуска измерений
  delay (2000);
}

void XY_range () {
  x=10000+range[ugol_count]*sinus[ugol_count]; // здесь координата хранится в раз 128 больше
// 10000 добавил чтоб координата была положительной... можно не ставить..... эта задача только в зародыше
  Serial.print(x);
  Serial.print(" ");
  y=range[ugol_count]*cosinus[ugol_count];  // здесь координата хранится в раз 128 больше
  Serial.print(y);
  Serial.print(" ");
  Serial.println();
  delay (1);
}

void servo_scan_all () {
  for (int i=0; i<20; i++) servo_scan();
} // запускаем серву на измерение 90 105 120 и так до 165 потом назад до 15 градусов и снова до 90

void servo_scan () {
  if (ugol_servo==165) {ugol=-15; } // если серво дошла до конца то разворачиваем назад
  if (ugol_servo==15) {ugol=+15; }  // если серво дошла до 15 то разворачиваем назад
  if (ugol_count==10) count_range=-1;   //здесь храним порядковый номер угла 0-15 1-30 2-45......10-165
  if (ugol_count==0) count_range=+1;
  /******************проводим 5 измерений подряд чтобы увидеть погрешности измерений***********/
  uint16_t dist=GetDistance(); //производим замер дистанции
range[ugol_count]=dist;
delay (3);
Serial.print(ugol_servo);
Serial.print(" ");
Serial.print(dist);
Serial.print(" ");
XY_range();

motor.write(ugol_servo);
delay (50);
ugol_servo+=ugol;
ugol_count+=count_range;
}

void loop() {

  but1=bitWrite(but1, 1, digitalRead(8));  //записвываем в первый бит состояние кнопки
    if (bitRead(but1,1) && bitRead(but1, 2)) {  servo_scan_all();}   //проверяем второй бит и сравниваем его с первым
  but1=bitWrite(but1, 2, bitRead(but1, 1));   //записываем во второй бит состояние первого, таким образом если кнопка уже нажата, то второй раз измерение не запустится. (хотя читал это здесь и анализировал, где то есть косяк.. но работает!
}

Чуть код покоментировал.
кто со мной тот герой, кто без меня, тот... нереально крут потому что сам во всем разбирается.
Аватара пользователя
Kulverstukas
 
Сообщения: 53
Зарегистрирован: 17 окт 2014, 20:39
прог. языки: с++

Re: Обсуждение алгоритмов движения пылесоса

Сообщение Kulverstukas » 02 ноя 2014, 03:55

Просто идеально о том как я представляю себе ориентирование на местности! 10 лет назад уже кем то опубликовано. (думаю придумано гораздо раньше, но не об этом сейчас) http://robo.com.ua/projects/robotai/r_ai_2_5.html
Почитав еще немного нашел решение этих задач. Это теория графов и куча примеров ( не для ардуино конечно иначе яб уже запрыгал от счастья). Буду писать код..... :D http://habrahabr.ru/post/200074/
http://habrahabr.ru/post/200560/
https://ru.wikipedia.org/wiki/%D0%9F%D0 ... 1%82%D0%B8
кто со мной тот герой, кто без меня, тот... нереально крут потому что сам во всем разбирается.
Аватара пользователя
Kulverstukas
 
Сообщения: 53
Зарегистрирован: 17 окт 2014, 20:39
прог. языки: с++

Re: Обсуждение алгоритмов движения пылесоса

Сообщение Kulverstukas » 10 ноя 2014, 00:27

До того как начал сам что либо делать, думал что робосообщество это бурно кишащее идеями место. как же я ошибался... :lol:
Обмусоливаю одну идею работы робота на "середине площади" то есть когда нужно её заполнение по максимуму. Идея такова. Есть некая площадь которая разбивается на квадраты (допустим 50х50 см) на это хватит памяти. например массив из 16 integer (int) чисел. единичка в каждом из этих чисел побитно будет указывать что квадрат заполнен "убран". внутри квадрата есть свои переменные следящие за заполнением самого квадрата. на рисунке написано куб, но имел я введу конечно квадрат (торопился)
кубы.jpg

Сегодня сам алгоритм у меня получился. У робота есть кнопка выбора режимов, он сигнализирует повороты (правый, левый) разными тонами (нужно было для настройки) и он чередует квадраты левые с правыми.
Теперь буду заниматься алгоритмом переезда робота из одного квадрата в другой (например из первого в пятый потом из пятого во второй). Для уборки важность этой задачи в том чтобы стать в нужное положение начала заполнения ячейки, не убирать там где уже убрано.
П.С. Дистанцию к алгоритму не подключил пока (то есть езда по квадратам в открытом пространстве без сканирования), и так с алгоритмом возился долго.
кто со мной тот герой, кто без меня, тот... нереально крут потому что сам во всем разбирается.
Аватара пользователя
Kulverstukas
 
Сообщения: 53
Зарегистрирован: 17 окт 2014, 20:39
прог. языки: с++

Re: Обсуждение алгоритмов движения пылесоса

Сообщение Kulverstukas » 02 ноя 2015, 00:55

Волновой алгоритм находит, в частности, применение в САПР печатных плат и интегральных схем при решении задачи трассировки. Иная сфера применения волнового алгоритма – это игровые приложения.
Путь может быть двух видов: ортогональный и ортогонально-диагональный. Путь первого вида состоит из отрезков, параллельных сторонам ДРП. Путь второго вида может вдобавок содержать диагональные отрезки (угол между таким отрезком и стороной ДРП равен 45 или 135 градусов).
http://www.100byte.ru/100btwrks/wv/wv.html
кто со мной тот герой, кто без меня, тот... нереально крут потому что сам во всем разбирается.
Аватара пользователя
Kulverstukas
 
Сообщения: 53
Зарегистрирован: 17 окт 2014, 20:39
прог. языки: с++

Пред.След.

Вернуться в Роботы-пылесосы

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

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