Два варианта объезда препятствий

avex
Offline
Зарегистрирован: 11.03.2017

Всем здрасьте!

Есть объект, который движется на плоскости в органиченном пространстве (50х50см). Ардуино передает ему управляющие сигналы. Там же расставлены препятствия-перегородки, как в либаринте.

Есть два способа научить объект не сталкиваться с перегородками и стенками:

1. Физический - навесить на него разные датчики, которые просигнализируют о столкновении, в результате объект свернет с неправильного пути. (От этого пособа не отказались, он пока основной. Но нужно проанализировать, насколько сложен и объёмен второй способ).

2. Программный - так как местонахождение и площадь основания перегородок известны, заранее ввести в объект данные о них. 

В программном способе при ближайшем рассмотрении оказывается еще одно ветвление с двумя вариантами:

1. Заложить информацию о местоположении препятствий. При приближении сигналы позволят объекту вырулить от них. 

2. Ввести данные об оптимальной траектории между препятствиями. Съезд с нее чреват, а, значит, Ардуино своевременно даст команду скорректировать курс.

Вопрос знатокам: Какой из программных вариантов предпочтителен, т.е., более точен, занимает меньше объема, меньше загружает ресурсы МК?

Как реализовать выбранный вариант?

Где-то в сети объясняли, что можно отразить в коде подобную схему:

1 1 1 1 1 1 1 1

1 0 0 0 0 0 0 1

1 0 0 1 1 0 0 1

1 0 0 0 0 0 0 1

1 1 1 1 1 1 1 1

где две единички по краям - стенки, а в центре - препятствие. Но как это будет представлено в коде, и что с этим кодом делать - не очень понятно.

Буду благодарен за советы, ссылки на материалы, если таковые были по этой теме.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

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

Погрешности имеют обыкновение накапливаться. Т.е. по мере движения расстояние между реальным местоположением и вычисленным увеличивается.

Если Вы хотите идти по второму пути, Вам в первую очередь надо продумать способы преодоления указанной проблемы.

avex
Offline
Зарегистрирован: 11.03.2017

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

sadman41
Offline
Зарегистрирован: 19.10.2016

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

Затем сравниваете количество мозгов у ардуины и у человека. Хотя бы по весу для начала.

 

avex
Offline
Зарегистрирован: 11.03.2017

sadman41 пишет:

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

Затем сравниваете количество мозгов у ардуины и у человека. Хотя бы по весу для начала.

Я изначально представлял себе это немного по-другому. Разбить поле на квадраты, скажем, со стороной 5 см. Получится 100 квадратов. Так как вопрос с позиционированием объекта решен (это условие задачи, да так и есть на практике) и известны заранее места препятствий, даем указание объекту идти в нужном направлении. Всего из одного квадрата возможно 8 выходов:

1. Вверх и налево, 2. Вверх и направо, 3. Направо и вверх, 4. Направо и вниз, 5. Вниз и нарево, 6 Вниз и направо, 7. Влево и вверх. 8 Влево и вниз.

Можно записать 8 функций-выходов, и запомнить, в каком из квадратов будет исполняться одна функция. Если на практике происходит отклонение от этой функции, Ардуино даст сигнал органам управления. 

Какие минусы у такого подхода, и как выразить его в коде?

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Я думаю тут легко применим волновой алгоритм. Смотрите википедию. С ним вы не только сможете объезжать препятствия, но и находить кратчайший путь. 

avex
Offline
Зарегистрирован: 11.03.2017

brokly пишет:

Я думаю тут легко применим волновой алгоритм. Смотрите википедию. С ним вы не только сможете объезжать препятствия, но и находить кратчайший путь. 

Спасибо, уже читаю.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Так какая задача стоит - не сталкиваться с препятствиями, или просто их объезжать, двигаясь из одной точки в другую? Если второе - есть старый алгоритм А* - пмсм, он тут вполне применим.

avex
Offline
Зарегистрирован: 11.03.2017

DIYMan пишет:

Так какая задача стоит - не сталкиваться с препятствиями, или просто их объезжать, двигаясь из одной точки в другую? Если второе - есть старый алгоритм А* - пмсм, он тут вполне применим.

Если совсем точно - ездить по маршруту, не сталкиваясь с препятствиями. При езде допускается следовать в некотором коридоре - плюс-минус 1-2 см, но ни в коем случае не сталкиваться с препятствиями. Задача Ардуино "видеть" их и сигнализировать объекту.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

avex пишет:

DIYMan пишет:

Так какая задача стоит - не сталкиваться с препятствиями, или просто их объезжать, двигаясь из одной точки в другую? Если второе - есть старый алгоритм А* - пмсм, он тут вполне применим.

Если совсем точно - ездить по маршруту, не сталкиваясь с препятствиями. При езде допускается следовать в некотором коридоре - плюс-минус 1-2 см, но ни в коем случае не сталкиваться с препятствиями. Задача Ардуино "видеть" их и сигнализировать объекту.

Если задача - ездить по маршруту (т.е. из вводных следует, что маршрут известен - начальная, конечная, необязательные промежуточные точки) - то алгоритм А* вполне применим. Критерием того, что следующая клетка, на которую надо переместиться, свободна - могут являться показания датчиков. Если что - А* используется во многих казуальных 2D-играх, типа Plants vs. Zombies, когда надо дойти из точки А в точку В, динамически обходя препятствия. Сам лично его использовал на практике, тоже в казуалке.

avex
Offline
Зарегистрирован: 11.03.2017

DIYMan пишет:

Критерием того, что следующая клетка, на которую надо переместиться, свободна - могут являться показания датчиков. 

Не так, здесь требуется завести места с препятствиями в программу и при приближении к ним сигнализировать объекту. Вариант с датчиками, как я писал ранее раза 3-4, в данном топике не рассматривается. Предвосхищу следующий вопрос - проблема с точным позиционированием объекта тоже решена. Это вводные данные, их решать здесь не следует.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

avex пишет:

DIYMan пишет:

Критерием того, что следующая клетка, на которую надо переместиться, свободна - могут являться показания датчиков. 

Не так, здесь требуется завести места с препятствиями в программу и при приближении к ним сигнализировать объекту. Вариант с датчиками, как я писал ранее раза 3-4, в данном топике не рассматривается. 

Суть от этого не меняется: каким-то образом понимая, что на прокладываемом пути - препятствие, алгоритм А* успешно решает проблему нахождения следующей путевой точки. Вы уже почитаете про него? Не буду настаивать, впрочем.

avex
Offline
Зарегистрирован: 11.03.2017

Читаю на хабре, интересно, даже отложил чтение алгоритма ЛИ ;) 

avex
Offline
Зарегистрирован: 11.03.2017

Нет, алгоритм А*, прекрасный для видеоигр, здесь не подходит. Он рыщет по кругу, обнаруживает препятствия, намечает маршрут. У нас препятствия уже есть в программе, зачем их искать? Это не вопрос личных предпочтений. Зачем тратить ресурсы МК на то, что известно?

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

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

avex пишет:

Нет, алгоритм А*, прекрасный для видеоигр, здесь не подходит. Он рыщет по кругу, обнаруживает препятствия, намечает маршрут. У нас препятствия уже есть в программе, зачем их искать? Это не вопрос личных предпочтений. Зачем тратить ресурсы МК на то, что известно?

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

Видимо, вы ничего не поняли. Тот граф, что у вас УЖЕ есть - это и есть карта местности, грубо говоря. Находясь в ЛЮБОЙ точке на этой карте, при помощи А* можно найти кратчайший путь к любой другой точке на этой карте. Т.е. проложить путь между препятствиями, понимаете?

А* рыщет, да. Но - по ИЗВЕСТНОМУ графу, ключевое - вы не уловили. И видеоигры тут - совершенно не при чём, алгоритм применим не только к ним.

avex
Offline
Зарегистрирован: 11.03.2017

DIYMan пишет:

Видимо, вы ничего не поняли. Тот граф, что у вас УЖЕ есть - это и есть карта местности, грубо говоря. Находясь в ЛЮБОЙ точке на этой карте, при помощи А* можно найти кратчайший путь к любой другой точке на этой карте. Т.е. проложить путь между препятствиями, понимаете?

А* рыщет, да. Но - по ИЗВЕСТНОМУ графу, ключевое - вы не уловили. И видеоигры тут - совершенно не при чём, алгоритм применим не только к ним.

В задаче не было про поиск: а) какого-либо пути и б) расстояния до препятятствия. Лишь сверка местоположения объекта с имеющимися данными о препятствиях и сигнализация о них.

avex
Offline
Зарегистрирован: 11.03.2017

Похоже и волновой алгоритм здесь не сгодится по той же причине: нам нужно не направлять объект, а лишь сигнализировать ему о препятствиях.

Попробую объяснить с помощью образа. Представьте, что по обочинам дороги расставлены столбики с колокольчиками. Водитель, даже если он слепой, поймет по их звону, что свернул на обочину. Тогда он вырулит снова на дорогу. Если не вырулит - съедет в кювет. Кювет - это наши препятствия, функцию колокольчиков высполняет Ардуино. 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

avex пишет:

DIYMan пишет:

Видимо, вы ничего не поняли. Тот граф, что у вас УЖЕ есть - это и есть карта местности, грубо говоря. Находясь в ЛЮБОЙ точке на этой карте, при помощи А* можно найти кратчайший путь к любой другой точке на этой карте. Т.е. проложить путь между препятствиями, понимаете?

А* рыщет, да. Но - по ИЗВЕСТНОМУ графу, ключевое - вы не уловили. И видеоигры тут - совершенно не при чём, алгоритм применим не только к ним.

В задаче не было про поиск: а) какого-либо пути и б) расстояния до препятятствия. Лишь сверка местоположения объекта с имеющимися данными о препятствиях и сигнализация о них.

С чем тоже прекрасно справляется алгоритм Дейкстры, разновидностью которого является А*. Вижу, вы не хотите анализировать, от слова "совсем".

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

avex пишет:

Похоже и волновой алгоритм здесь не сгодится по той же причине: нам нужно не направлять объект, а лишь сигнализировать ему о препятствиях.

Попробую объяснить с помощью образа. Представьте, что по обочинам дороги расставлены столбики с колокольчиками. Водитель, даже если он слепой, поймет по их звону, что свернул на обочину. Тогда он вырулит снова на дорогу. Если не вырулит - съедет в кювет. Кювет - это наши препятствия, функцию колокольчиков высполняет Ардуино. 

Ответ я вам дал - для этих целей подходит алгоритм Дейкстры. Точка.

DetSimen
DetSimen аватар
Онлайн
Зарегистрирован: 25.01.2017

Судя по всему, для ТС Дейкстра - существо глубоко мифическое

stepan_sotnikov
Offline
Зарегистрирован: 06.04.2019

Я бы собрал координаты всех препятсвий в массив х,y зная свое положение X0,Y0 сортировал/или не сортиовал этот массив по расстоянию. Зная положение из этого массива забирал х,y и смотрел бы расстояние dx=X0-x; dy=Y0-y ->  sqrt(dx*dx+dy*dy) и если растояние не допустимое пищал бы... но это то как я понял Т.З. Если вам не нужно думать куда направляться, вам же главне не столкнуться?

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

stepan_sotnikov пишет:

Я бы собрал координаты всех препятсвий в массив х,y зная свое положение X0,Y0 сортировал/или не сортиовал этот массив по расстоянию. Зная положение из этого массива забирал х,y и смотрел бы расстояние dx=X0-x; dy=Y0-y ->  sqrt(dx*dx+dy*dy) и если растояние не допустимое пищал бы... но это то как я понял Т.З. Если вам не нужно думать куда направляться, вам же главне не столкнуться?

Хотите заново изобрести алгоритм Дейкстры? Похвально - но не стоит ;)

stepan_sotnikov
Offline
Зарегистрирован: 06.04.2019

нет =))) Это святое. 
Протсто на основании непонятно сформулированного Т.З. Я вообще не понимаю, если есть заранее карта, почему просто не сделать движение по заранее заданным точкам. И как там вообще с позиционированием дела. 
Просто человеку не стал в мозги делать... а намекнул в каком направлении думать... Я так понимаю, что там вообще проблемма не в выборе пути... 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

stepan_sotnikov пишет:

Я так понимаю, что там вообще проблемма не в выборе пути... 

Проблема там - в непонимании того, что такое графы, как минимум. Граф у ТС - есть, на графе есть рёбра и вершины, некоторые вершины - помечены как препятствия. Алгоритмом Дейкстры из любой вершины графа в любом направлении по рёбрам графа находятся вершины, помеченные как препятствия, на любом требуемом удалении от исходной вершины, расстояние здесь, если грубо - кол-во вершин от исходной до искомой.

Статья https://habr.com/ru/post/331192/ на Хабре - имеет, помимо великолепных иллюстраций, также великолепные демонстрационные видео, в тексте статьи - для анализа указано всё, в том числе - возможность прервать поиск, когда нужно.

Вот, собственно, и все обоснования применимости алгоритма Дейкстры к конкретной задаче: граф - есть, признаки вершин - есть, произвольно выбранная вершина на графе - есть. Так чего же тебе надо, хороняка? (с) "Иван Васильевич..." :))

stepan_sotnikov
Offline
Зарегистрирован: 06.04.2019

Может, ему по душе все же волновой алгоритм? Тем более он нарисовал планарную матрицу... 

Logik
Offline
Зарегистрирован: 05.08.2014

Разслабтесь. ТС сам нифига не понимает, рано ему дейкстру применять. Он чисто пофилософствовать привалил, завтра надоест и забудет. А вы уже возбудились:) Вы прочтите внимательно стартовый топик, тож бред нуба.

avex
Offline
Зарегистрирован: 11.03.2017

Это немного странно, когда твои слова не имеют значения, а более важно то, КАК и ЧТО понял собеседник, ЧТО он предложил, исходя из своего опыта, и ЧЕМУ ты непременно должен следовать в своем проекте. Конечно, святое дело оттоптаться всем коллекивом на вновь пришедшем, это понять тоже можно - меняются поколения, у каждого свои демоны в голове.

Но, друзья, все, что важно для проекта, написано ПО-РУССКИ в моем первом посте и в уточнениях для тех, кто его не понял. Других смыслов и значений искать не следует. Не нужно управлять объектом, этим Ардуино заниматься не будет в данном проекте никогда! Отсюда следует, что искать любые пути не нужно, а, значит, и предложенные алгоритмы - трата ресурсов. Любой инженер скажет, что в проекте не должно быть ни одного зря потраченного ватта (грамма, байта, секунды, т.е., всего, кроме, конечно, литров). Зачем искать пути, если в общем-то они известны, как известны и препятствия? Что нам даст "найденный" путь? Нам всего лишь нужно научить Ардуино пищать (моргать, махать, взлетать, брызгать, булькать), когда объект приблизится на опасную дистанцию до препятствия. ВСЁ. Ничего лишнего не требуется.

stepan_sotnikov, спасибо за то, что сформулировали предложение по делу (в данном контексте это очень ценно). 

 

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

avex пишет:

Нам всего лишь нужно научить Ардуино пищать (моргать, махать, взлетать, брызгать, булькать), когда объект приблизится на опасную дистанцию до препятствия. ВСЁ. Ничего лишнего не требуется.

Тваю ж! Так это и есть - ПОИСК ПУТИ в графе, от исходной вершины. Просто надо это понять, и всё. Впрочем, это, видимо, не по силам.

avex
Offline
Зарегистрирован: 11.03.2017

DIYMan пишет:

avex пишет:

Нам всего лишь нужно научить Ардуино пищать (моргать, махать, взлетать, брызгать, булькать), когда объект приблизится на опасную дистанцию до препятствия. ВСЁ. Ничего лишнего не требуется.

Тваю ж! Так это и есть - ПОИСК ПУТИ в графе, от исходной вершины. Просто надо это понять, и всё. Впрочем, это, видимо, не по силам.

Давайте убьем ваше предложение примером?! Объект находится в точке с координатами Х, У, нам это известно. Препятствие находится в точке с координатами Х1, У1, нам это известно заранее. Для чего нам ВЫЧИСЛЯТЬ кратчайшее расстояние от объекта до препятствия? Мы это можем сделать и сами, без волнового алгоритма и без А*, просто, как предложил Степан, найдя гипотенузу с катетами ДХ и ДУ (где Д - дельта).

stepan_sotnikov
Offline
Зарегистрирован: 06.04.2019

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

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Вот реально. Конкретезируй задачу на примере в соответствии с вопросом "Какого хрена нужно от Ардуино ?"  Путь - известен, карта местности - известна, где попорачивать и куда - понятно. ЧЕГО ТЫ ОТ НАС ХОЧЕШЬ ? Может тебе нужен алгоритм который повернул бы машинку в ту или иную сторону, он простой, крути туда направляющие колеса или колесо, если оно одно.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Вот-вот. avex, если есть маршрут и проблема позиционирования решена, то и вообще вся Ваша задача решена.

Чего Вы хотите от форума?

avex
Offline
Зарегистрирован: 11.03.2017

brokly пишет:

Вот реально. Конкретезируй задачу на примере в соответствии с вопросом "Какого хрена нужно от Ардуино ?"  Путь - известен, карта местности - известна, где попорачивать и куда - понятно. ЧЕГО ТЫ ОТ НАС ХОЧЕШЬ ? Может тебе нужен алгоритм который повернул бы машинку в ту или иную сторону, он простой, крути туда направляющие колеса или колесо, если оно одно.

Давайте попробуем еще раз. Поскольку объект не управляется Ардуиной, он управляется чем-то (кем-то) еще. Это что-то может сделать ошибки. МК должен предотвратить их. Данные о местоположении объекта передаются МК, тот должен сверять эти данные с имеющимися координатами препятствий, и подавать сигналы на объект. Всё.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

avex пишет:

Давайте попробуем еще раз. Поскольку объект не управляется Ардуиной, он управляется чем-то (кем-то) еще. Это что-то может сделать ошибки. МК должен предотвратить их. Данные о местоположении объекта передаются МК, тот должен сверять эти данные с имеющимися координатами препятствий, и подавать сигналы на объект. Всё.

Ну так проблема-то в чём? Сверяй, сигнализируй. Хоть по гипотенузе, хоть по катету, хоть раком, хоть боком. Будешь смеяться, но имея готовый граф (включающий вершины координаты препятствий) - алгоритмом Дейкстры очень быстро (в отличие от тупого перебора методом "в лоб") - находятся препятствия, располагающиеся на отдалении N или M, или Z условных единиц - это и есть поиск пути, вернее, его побочная часть, применимая к проекту. Путь искать - не надо, надо найти препятствия в РАДИУСЕ от объекта. Что и предоставляет алгоритм Дейкстры. Но нет - мы будем колоться, и продолжать клевать кактус. Просто скажи - мол, ну не понял я, как работать с графами, мне бы чо попроще да полошее - сразу поймём.

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

З.Ы. Представляю себе, как на поле размером 500х500 тупым перебором в лоб, начиная с произвольной точки координат объекта - проверить, есть ли в радиусе двух условных клеток препятствия. Оно, конечно, реализуемо достаточно легко, вот только уже есть путь - изящный, красивый, мощный и расширяемый - чего б не воспользоваться-то?

З.З.Ы. Знаешь, что самое интересное в алгоритме Дейкстры? С его помощью можно совершенно бесплатно получить следующее: проверку, проедет ли объект размером N смежных вершин графа между двумя препятствиями, условным размером M и Z смежных вершин графа каждое. Это так, на расширение функционала, чистая математика.

avex
Offline
Зарегистрирован: 11.03.2017

 DIYMan, Ваши деды случайно не строили ДнепроГЭС, Магнитку? Упорные, видать, были люди, железные, никогда не сходили с выбранного пути. И гены стойкие передали потомкам. Это похвально!

А на Вашем месте я бы подумал: "Отчего не принимается мое предложение?". И перечитал бы сообщения ТС. А, если не понял бы что-то, задал уточняющий вопрос. Но, кажется, за крутыми алгоритмами Вам не видно деталей проекта. Иначе бы поняли, что искать то, что известно - не нужная трата времени и ресурсов.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

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

stepan_sotnikov
Offline
Зарегистрирован: 06.04.2019

Да отстань ты от него. это напомнило анегдот.
 

Учительница рисования спрашивает Вовочку:

- А что ты будешь рисовать?

Вовочка отвечает, показывая на белый листок:

- Ну здесь закрашу черным, здесь закрашу синим, а здесь зеленым еб...у!!!

Учительница падает в обморок…

Вызывают всех к директору по поводу ситуации на уроке.

Директор:

- Что произошло?

Вовочка:

- Меня спросили, что я буду рисовать, я ответил: ну здесь закрашу черным, здесь закрашу синим, а здесь зеленым еб..у!!!

Учительница опять падает в обморок…

Директор:

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

Так и ты с алгоритмами, парвильными и хорошими. Я думаю он к ним придет, но сейчас для него это "неподходит"

Вторая история из моей жизни. Учислся я в 5 классе. Мой отец решил, что бы я занялся програмированием. Он военный преподовал в академии связи. Ну он курсантов за жабры и домой учить меня паскалю.
Выдержал я только три-четыре занятия. потому, что как сейчас помню, после массивов и операторов сравнения мне дали задание придумать как остортировать массив. После того как я целую не делю не мог решить домашнее задание... Я не полюбил паскаль. Курсанты больше ко мне не приходили... 
Я сам сел за qBasic, и занимался уже сам по себе, окончательно изуродовав себе сознание. 
Мне это нравилось в детсве... но лучще бы, что бы курсанты давали задание соизмерим моим познаниям, и все же паскаль... 
Так и здесь. Пускай сделает для начало в лоб. И покажит, что получилось.

avex
Offline
Зарегистрирован: 11.03.2017

И мне вспомнился анекдот:

Военная часть… Курилка. Сидят 4 лейтенанта. Один предлагает идти к командиру части проситься в отпуск. Встали пошли. Заходит к командиру первый:
— Товарищи полковник, лейтенант Пупкин. Разрешите в отпуск.
— Да ты че! В отпуск, говоришь? Давай рацпредложение рационализаторское предложение) — пойдешь в отпуск!
— Легко! Вон у Вас под окном солдат траву косит. Че он косой в одну сторону машет? Давайте ему вторую косу привяжем, пусть косит налево и направо!
— Молодец! В отпуск!
Заходит второй:
— Давай рацпредложение…
— Легко! Вон у Вас под окном солдат траву косит. Че он косой туда-сюда машет? Давайте ему к косе привяжем вилы, пусть сразу в кучки складывает!
— Молодец! В отпуск!
Заходит третий:
…
— Давай рацпредложение…
— Легко! Вон у Вас под окном солдат траву косит. Че он косой туда-сюда машет, траву в кучки складывает? Давайте к нему привяжем тележку, пусть сразу и отвозит!
— Молодец! В отпуск!
Заходит четвертый:
…
— Давай рацпредложение…
— Не знаю.
— Ну-у-у-у… Так иди думай. Придумаешь приходи!
Выходит лейтенант на крыльцо, закуривает нервно, стоит «репу морщит».
И тут подходит к нему этот солдат. С этой хреновиной в руках с привязанной тележкой, весь потный, обессиленный. И злобно так, спрашивает у лейтенанта:
— Чё, товарищ лейтенант, в отпуск хотите?!
— Да-а…
— Б…ь, рацпредложение не можете придумать?!
— Да-а…
— Б…ь, ФАРУ МНЕ НА ЛОБ!!! ФАРУ!!! ЧТОБЫ НОЧЬЮ КОСИЛ!!!

Солдат - Ардуино, летёхи  - DIYMan, рацпредложения - попытка перегрузить МК работой. К тому же ненужной

stepan_sotnikov
Offline
Зарегистрирован: 06.04.2019

Вот тут ты совсем не прав... Предлогаемые методы тебе, весьма оптимально решают твою задачу. То о чем я тебе говорю, это решение в лоб нерационально, методом перебора... Давай рассуждать. У тебя область 50см на 50 см.
Выбираем дискретность пространства. допустим это 1см кв. Теперь мы начинаем формировать список препятсвий. Весь периметр это припятсвие. То есть у тебя уже 200 координат и массив из 400 значений. x,y
ну я полагаю, что и растояние желательно хранить в массиве, которое перодически будет сортировать массив и это тогда 600. И каждый раз хотя бы четверть ты будешь скармливать каждый раз функции проверки сближения это в случаи если ты периодически будешь формировать сортированный список. А если нет то ВСЕ. И это еще пока мы не раставили препятсвие. Именно в этом случаи МК будит делать дурную работу солдата... А если выбираем дискретность 1мм? это 1милион цыфер... Напиши и покажи хоть, что нибудь? Иначе все это болтовня... и DIYMan тебе еще раз скажит о А*, что ты упертый и мне еще достанится =)))

avex
Offline
Зарегистрирован: 11.03.2017

Степан, еще раз благодарю за попытки помочь по существу. 

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

qwone
qwone аватар
Offline
Зарегистрирован: 03.07.2016

Слава богу. А то ТЗ выходит такое. Есть квадракоптер . Надо научить его лететь по пачке Беломора.

avex
Offline
Зарегистрирован: 11.03.2017

qwone пишет:

Слава богу.

Согласен полностью. Впустую потраченное время.

brokly
brokly аватар
Offline
Зарегистрирован: 08.02.2014

Вот и пытайся помочь таким "кадрам". Которые не только сами не понимают чего хотят, но и не хотят понимать и слушать адекватные советы. Он то тратил время на себя, а я на него. Прям плюнуть в него хочется.

Logik
Offline
Зарегистрирован: 05.08.2014

)))

Так я же предупреждал!

avex
Offline
Зарегистрирован: 11.03.2017

Что можно выслушать от спецов в ответ на конкретный вопрос помимо поучений и навязывания собственной точки зрения? Вот что:

"ничего не поняли", "не уловили", "не хотите анализировать от слова "совсем"", "человеку не стал в мозги делать", "проблема там - в непонимании того, что такое графы", "ТС сам нифига не понимает, рано ему дейкстру применять", "он чисто пофилософствовать привалил, завтра надоест и забудет", "стартовый топик, тож бред нуба", "это, видимо, не по силам", "хоть раком, хоть боком", "скажи - мол, ну не понял я, как работать с графами, мне бы чо попроще да полошее", "потом расскажешь, почему Дейкстра - лох", "будучи в несознанке - вы этого не признаете, потому что - не понимаете сути", "иначе все это болтовня", "плюнуть в него хочется". 

К сожалению, это еще не финал деградации... 

Стыдно такое сыну-школьнику показывать, тоже хотел узнать, как взрослые программисты решат задачу. В итоге решили с ним сами (в основном - он), без "дейкстры" и прочих "уместных" предложений, пара-тройка исписанных и изрисованных листов, разбор задачи на составляющие. Спасибо ему и учительнице информатики!

А вам скажу - вы в сети представляете не только себя, вы - часть большего: российской культуры, русскоязычного мира. Ответственность за то, каким станет (становится) этот родной всем нам мир, лежит и на каждом из вас. Каждым ответом, каждым словом вы вносите вклад в его изменение. Задумайтесь над этим.

Желаю вам всего наилучшего!

b707
Онлайн
Зарегистрирован: 26.05.2017

avex пишет:

Стыдно такое сыну-школьнику показывать, тоже хотел узнать, как взрослые программисты решат задачу. В итоге решили с ним сами (в основном - он), без "дейкстры" и прочих "уместных" предложений, пара-тройка исписанных и изрисованных листов, разбор задачи на составляющие. Спасибо ему и учительнице информатики!

очередной Архат? Та же 100% уверенность, что профессионалы закопались в теории, а он, практик. все решит быстро и без заумствований. И та же тема сына и беспокойство о российском интернете :)

b707
Онлайн
Зарегистрирован: 26.05.2017

Уважаемый avex! Я не собираюсь вас переубеждать. что вам надо было принять советы конфы. Я предлагаю вам взглянуть на ситуацию с другой стороны. Вот вы пришли на форум, переругались со всеми, потеряли два дня и в итоге, отвергли все и выбрали свое собственное решение.

А теперь взгляните назад - и спросите себя - зачем надо было раскручивать эту ситуацию в негатив? Наоборот, в этой ситуации налицо сплошной позитив - вместо того чтоб получить готовый ответ, который никак бы вас не обогатил - вы пошли своим путем и решили задачу с сыном самостоятельно. Конечно, еще лучше было бы, если б вы не тратили время и с самого начала не спрашивали - а сразу искали решение сами.  Благо интернет в россии пока открыт и форумы всего мира в вашем распоряжении.

И непонятно нафига было из-за этого на всех обижаться и поливать конфу грязью? Ну не подошли вам наши советы - что за беда? -просто идите своим путем да и только. Имейте смелость СНАЧАЛА искать решение самостоятельно(а не бежать на форумы) и учите этому сына, вместо причитаний на тему российского инета и обстановки на отечественных форумах.

avex
Offline
Зарегистрирован: 11.03.2017

b707, потрудитесь, пожалуйста, и поищите в обсуждении подтверждение своих слов о том, что я "переругался со всеми", "раскручивал ситуацию в негатив", "поливал конфу грязью". Если найдёте, приведите их. Если нет, подумайте, насколько соответствует действительности ваш анализ ситуации? 

Я скажу так - каждый человек, тем более автор проекта, имеет право на свое мнение, пусть оно и не профессионально. Несправедливо и некрасиво только за одно это писать в его адрес то, что приведено в моем посте выше. Форумы для того и созданы, чтобы обмениваться мнениями, а не руганью.

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

Ну а я не гордый, буду приходить сюда еще, если это потребуется. Здесь есть люди, которые помогают, и я им очень благодарен.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

avex, советую просто выдохнуть - и расслабиться ;) Решил пойти своим путём - никто не против.

sadman41
Offline
Зарегистрирован: 19.10.2016

А мне вот интересно посмотреть - чем были исписаны несколько листков и за что спасибо учительнице информатики.

Да и вообще, как утверждают психологи - человек, спрашивающий совета, ищет не новое решение, а одобрение своему.

stepan_sotnikov
Offline
Зарегистрирован: 06.04.2019

Блин, вот ты зря так. Вот у вас какая специалньность/професия? 
И представте, что у меня это было бы хобби... Жду ответа, что бы задать вам по вашей спецальности вопросы, и рассказть как рационально. И между прочем, вам пытались помоч... Коенчно не как учительница информатики, ибо она подготовленна работать с детьми... а тут нет. 
Вот даже я вродебы профисионал в свой области, и даже как бы близкой к этой теме... и то я на фоне некотрых сдесь выгляжу как ученик перед учителем информатики... И да, тут если спрашивать отвечают... да не предлагают готовые решения... подсказывают... советуют...