Анализ и сравнение алгоритмов маршрутизации для домашних роботов

Заказать уникальную дипломную работу
Тип работы: Дипломная работа
Предмет: Программирование
  • 8282 страницы
  • 20 + 20 источников
  • Добавлена 23.06.2017
3 000 руб.
  • Содержание
  • Часть работы
  • Список литературы
  • Вопросы/Ответы
Оглавление
ВВЕДЕНИЕ 3
1. ОБЗОР ПРЕДМЕТНОЙ ОБЛАСТИ 5
1.1. РОБОТОТЕХНИКА 5
1.2. СИСТЕМЫ УПРАВЛЕНИЯ 9
1.3. БЫТОВЫЕ РОБОТЫ 10
1.4. РОБОТЫ ПЫЛЕСОСЫ 17
ВЫВОД ПО ГЛАВЕ 24
2. РЕАЛИЗАЦИЯ АЛГОРИТМОВ 25
2.1. АЛГОРИТМЫ ДВИЖЕНИЯ 25
2.2. ОБХОД ПРЕГРАД 26
2.3. РАСПОЗНАВАНИЕ КАСАНИЙ 27
2.4. СРЕДСТВА РАЗРАБОТКИ 27
2.5. МЕТОДИКА СРАВНЕНИЯ АЛГОРИТМОВ 28
2.5.1. ДВИЖЕНИЕ ЗИГЗАГОМ 33
2.5.2. ДВИЖЕНИЕ ПО СПИРАЛИ 38
2.5.3. СЛУЧАЙНОЕ ДВИЖЕНИЕ 43
ВЫВОД ПО ГЛАВЕ 47
3. ИССЛЕДОВАНИЕ 48
3.1. АНАЛИЗ ПОЛУЧЕННЫХ РЕЗУЛЬТАТОВ 48
ВЫВОД ПО ГЛАВЕ 59
ЗАКЛЮЧЕНИЕ 61
СПИСОК ЛИТЕРАТУРЫ 63
ПРИЛОЖЕНИЕ. ИСХОДНЫЙ КОД. 65

Фрагмент для ознакомления

title("Robot testing")#Menum = Menu(root)root.config(menu=m)cm = Menu(m)m.add_cascade(label="Файл",menu=cm)cm.add_command(label="Выход",command=exit)startXY = 150#координаты x, y начала поляn = 20#поле NxMm = 20#mas1 = [[0] * m for i in range(n)]#массив для поляmas2 = [[0] * mforiinrange(n)]#массив для запоминания очищенных клетокsizeR = 20#размер клеток поля#функция задает параметры для отрисовки стенки периметра комнатыdef initWall():global mglobal mas1for i in range(len(mas1)):for j in range(len(mas1[i])):mas1[i][j] = 0#полеmas2[i][j] = 0#подсчет столкновенийfor i in range(len(mas1)):mas1[i][0] = 1mas1[0][i] = 1mas1[i][m-1] = 1mas1[m-1][i] = 1hasMap = False #имеется ли отрисованная карта#функция задает параметры для отрисовки карты №1def loadMap1():global mas1global hasMaphasMap = Truemas1[5][7] = 1mas1[6][7] = 1mas1[5][8] = 1mas1[6][8] = 1mas1[5][10] = 1mas1[6][10] = 1mas1[5][11] = 1mas1[6][11] = 1mas1[11][7] = 1mas1[12][7] = 1mas1[11][8] = 1mas1[12][8] = 1mas1[11][10] = 1mas1[12][10] = 1mas1[11][11] = 1mas1[12][11] = 1for y in range(6, 13):for x in range(7, 11):mas1[x][y] = 1#функция задает параметры для отрисовки карты №2def loadMap2():global mglobal mas1global hasMaphasMap = True#for i in range(len(mas1)):#mas1[m-2][i] = 1for y in range(5, 12):for x in range(17, 19):mas1[x][y] = 1for y in range(12, 19):for x in range(1, 3):mas1[x][y] = 1mas1[3][17] = 1mas1[4][17] = 1mas1[3][18] = 1mas1[4][18] = 1#функция задает параметры для отрисовки карты №3def loadMap3():global mglobal mas1global hasMaphasMap = Truemas1[5][6] = 1mas1[6][6] = 1mas1[5][7] = 1mas1[6][7] = 1mas1[5][9] = 1mas1[6][9] = 1mas1[5][10] = 1mas1[6][10] = 1mas1[11][6] = 1mas1[12][6] = 1mas1[11][7] = 1mas1[12][7] = 1mas1[11][9] = 1mas1[12][9] = 1mas1[11][10] = 1mas1[12][10] = 1for y in range(5, 12):for x in range(7, 11):mas1[x][y] = 1for y in range(5, 12):for x in range(17, 19):mas1[x][y] = 1for y in range(12, 19):for x in range(1, 3):mas1[x][y] = 1mas1[3][17] = 1mas1[4][17] = 1mas1[3][18] = 1mas1[4][18] = 1#emptyMap#функция задает параметры для отрисовки карты №4def loadMap4():global hasMaphasMap = True#функция задает параметры для отрисовки карты №5def loadMap5():global mas1global hasMaphasMap = Truemas1[5][7] = 1mas1[6][7] = 1mas1[5][8] = 1mas1[6][8] = 1mas1[5][10] = 1mas1[6][10] = 1mas1[5][11] = 1mas1[6][11] = 1mas1[11][7] = 1mas1[12][7] = 1mas1[11][8] = 1mas1[12][8] = 1for y in range(6, 13):for x in range(7, 11):mas1[x][y] = 1#функция задает параметры для отрисовки карты №6def loadMap6():global mglobal mas1global hasMaphasMap = True#for i in range(len(mas1)):#mas1[m-2][i] = 1for y in range(5, 12):for x in range(17, 19):mas1[x][y] = 1for y in range(12, 19):for x in range(1, 3):mas1[x][y] = 1mas1[3][17] = 1mas1[4][17] = 1mas1[3][18] = 1mas1[4][18] = 1for y in range(10, 17):for x in range(11, 15):mas1[x][y] = 1#функция задает параметры для отрисовки карты №7def loadMap7():global mglobal mas1global hasMaphasMap = Truemas1[5][6] = 1mas1[6][6] = 1mas1[5][7] = 1mas1[6][7] = 1mas1[5][9] = 1mas1[6][9] = 1mas1[5][10] = 1mas1[6][10] = 1mas1[11][6] = 1mas1[12][6] = 1mas1[11][7] = 1mas1[12][7] = 1mas1[11][9] = 1mas1[12][9] = 1mas1[11][10] = 1mas1[12][10] = 1for y in range(5, 12):for x in range(17, 19):mas1[x][y] = 1for y in range(12, 19):for x in range(1, 3):mas1[x][y] = 1mas1[3][17] = 1mas1[4][17] = 1mas1[3][18] = 1mas1[4][18] = 1#функция задает параметры для отрисовки карты №8def loadMap8():global mglobal mas1global hasMaphasMap = Truemas1[5][6] = 1mas1[6][6] = 1mas1[5][7] = 1mas1[6][7] = 1mas1[5][9] = 1mas1[6][9] = 1mas1[5][10] = 1mas1[6][10] = 1mas1[11][6] = 1mas1[12][6] = 1mas1[11][7] = 1mas1[12][7] = 1mas1[11][9] = 1mas1[12][9] = 1mas1[11][10] = 1mas1[12][10] = 1for y in range(5, 12):for x in range(7, 11):mas1[x][y] = 1for y in range(5, 12):for x in range(17, 19):mas1[x][y] = 1for y in range(12, 19):for x in range(1, 3):mas1[x][y] = 1for y in range(3, 10):for x in range(1, 3):mas1[x][y] = 1#Обновление канвасаdef updateCanvace():canv.delete("all")canv.create_rectangle(0,0,w,h,outline='blue',width=10)timeExp = 0 #время эксперимента#загрузка картыdefloadMap(numMap):global timeRobotif numMap == 1:loadMap1()if numMap == 2:loadMap2()if numMap == 3:loadMap3()if numMap == 4:loadMap4()if numMap == 5:loadMap5()if numMap == 6:loadMap6()if numMap == 7:loadMap7()if numMap == 8:loadMap8()#tkMessageBox.showinfo("Say", timeExp)numberMap = 1#номер карты#Функция обрабатывает событие клика мышкой по кнопке Карта1def loadM1(event):global alreadyRunglobal numberMapnumberMap = 1if alreadyRun == False:updateCanvace()initWall()loadMap(numberMap)createField()#Функция обрабатывает событие клика мышкой по кнопке Карта2def loadM2(event):global alreadyRunglobal numberMapnumberMap = 2if alreadyRun == False:updateCanvace()initWall()loadMap(numberMap)createField()#Функция обрабатывает событие клика мышкой по кнопке Карта3def loadM3(event):global alreadyRunglobal numberMapnumberMap = 3if alreadyRun == False:updateCanvace()initWall()loadMap(numberMap)createField()#Функция обрабатывает событие клика мышкой по кнопке Карта4def loadM4(event):global alreadyRunglobal numberMapnumberMap = 4if alreadyRun == False:updateCanvace()initWall()loadMap(numberMap)createField()#Функция обрабатывает событие клика мышкой по кнопке Карта5def loadM5(event):global alreadyRunglobal numberMapnumberMap = 5if alreadyRun == False:updateCanvace()initWall()loadMap(numberMap)createField()#Функция обрабатывает событие клика мышкой по кнопке Карта6def loadM6(event):global alreadyRunglobal numberMapnumberMap = 6if alreadyRun == False:updateCanvace()initWall()loadMap(numberMap)createField()#Функция обрабатывает событие клика мышкой по кнопке Карта7def loadM7(event):global alreadyRunglobal numberMapnumberMap = 7if alreadyRun == False:updateCanvace()initWall()loadMap(numberMap)createField()#Функция обрабатывает событие клика мышкой по кнопке Карта8def loadM8(event):global alreadyRunglobal numberMapnumberMap = 8if alreadyRun == False:updateCanvace()initWall()loadMap(numberMap)createField()#Функция рисует полеdef createField():global mas1global startXYglobal sizeRx = startXYy = startXYfor i in range(len(mas1)):for j in range(len(mas1[i])):if mas1[i][j] == 1:canv.create_rectangle(x,y,x+sizeR,y+sizeR,fill="black",outline="blue")else:canv.create_rectangle(x,y,x+sizeR,y+sizeR,fill="gray",outline="blue")y = y + sizeRx = x + sizeRy = startXYii = 0jj = 0#Функция задает начальные значения роботуdef initRobot(startRobotX=2, startRobotY=4):global iiglobal jjglobal startXYglobal sizeRii=startRobotXjj=startRobotYclearTest()canv.create_oval(startXY+startRobotX*sizeR,startXY+startRobotY*sizeR,(startXY+startRobotX*sizeR)+sizeR,(startXY+startRobotY*sizeR)+sizeR,fill="green", outline='green')Collision = 0 #столкновенияalreadyRun = False #проверка не запущен ли уже алгоритмfuncFront = 1 #направление движенияstopRobot = True #остановить роботаscoreRobot = 100 #скоростьtest1_3 = False #проверка было ли столкновения по пути 1_3test3_1 = False #проверка было ли столкновения по пути 3_1test4_2 = False #проверка было ли столкновения по пути 4_2test2_4 = False #проверка было ли столкновения по пути 2_4#=================ZigZag=====================def start1():global test3_1global test1_3global test4_2global test2_4global mas1global stopRobotglobal iiglobal jjglobal funcFrontglobal Collisionglobal timeRobotglobal timeExpif timeRobot >= timeExp:stop_Robot()else:timeRobot = timeRobot + 1if stopRobot==False:if (ii= timeExp:stop_Robot()else:timeRobot = timeRobot + 1if stopRobot==False:countLenthRandom = countLenthRandom - 1if countLenthRandom == 0:getRandom()countLenthRandom = countLenthRandomStartwhile ii2==0 and jj2 == 0:getRandom()if mas1[ii+ii2][jj+jj2]==0:Step(10)else:Collision = Collision +1getRandom()countLenthRandom = countLenthRandomStartroot.after(scoreRobot,start2)#=================Спираль=====================countLenthSpStart = 1 #начальный шагcountLenthSp = countLenthSpStartdef start3():global countLenthSpStartglobal countLenthSpglobal mas1global stopRobotglobal iiglobal jjglobal funcFrontglobal Collisionglobal timeRobotglobal timeExpif timeRobot >= timeExp:stop_Robot()else:timeRobot = timeRobot + 1if stopRobot==False:#print funcFrontif funcFront == 1:#print funcFrontif countLenthSp > 0:countLenthSp = countLenthSp - 1if mas1[ii+1][jj]==0:Step(1)elif mas1[ii][jj-1]==0:Collision = Collision +1Step(4)else:funcFront = 2countLenthSp = countLenthSpStartelif funcFront == 2:if countLenthSp > 0:countLenthSp = countLenthSp - 1if mas1[ii][jj+1]==0:Step(2)elif mas1[ii+1][jj]==0:Collision = Collision +1Step(1)else:funcFront = 3countLenthSpStart = countLenthSpStart + 1countLenthSp = countLenthSpStartelif funcFront == 3:if countLenthSp > 0:countLenthSp = countLenthSp - 1if mas1[ii-1][jj]==0:Step(3)elif mas1[ii][jj+1]==0:Collision = Collision +1Step(2)else:funcFront = 4countLenthSp = countLenthSpStartelif funcFront == 4:if countLenthSp > 0:countLenthSp = countLenthSp - 1if mas1[ii][jj-1]==0:Step(4)elif mas1[ii-1][jj]==0:Collision = Collision +1Step(3)else:funcFront = 1countLenthSpStart = countLenthSpStart + 1countLenthSp = countLenthSpStartroot.after(scoreRobot,start3)#очистка сообщений о столкновенииdefclearTest():global test3_1global test1_3global test4_2global test2_4test1_3 = Falsetest3_1 = Falsetest4_2 = Falsetest2_4 = False#шаг в направлении stdef Step(st):global sizeRglobal iiglobal jjglobal ii2global jj2global mas2#if (ii+1",runRobot1)bs1.place(relx=.24, rely=relyButtonStart, anchor="c")bs2 = Button(root,text="Старт. Рандом.")bs2.bind("",runRobot2)bs2.place(relx=.4, rely=relyButtonStart, anchor="c")bs3 = Button(root,text="Старт. Спираль.")bs3.bind("",runRobot3)bs3.place(relx=.57, rely=relyButtonStart, anchor="c")bstop = Button(root,text="Стоп")bstop .bind("",stopR)bstop .place(relx=.2, rely=relyButton, anchor="c")bM1 = Button(root,text="Карта1")bM1.bind("",loadM1)bM1.place(relx=.3, rely=relyButton, anchor="c")bM2 = Button(root,text="Карта2")bM2.bind("",loadM2)bM2.place(relx=.4, rely=relyButton, anchor="c")bM3 = Button(root,text="Карта3")bM3.bind("",loadM3)bM3.place(relx=.5, rely=relyButton, anchor="c")bM4 = Button(root,text="Карта4")bM4.bind("",loadM4)bM4.place(relx=.6, rely=relyButton, anchor="c")relyButton = relyButton + .07bM5 = Button(root,text="Карта5")bM5.bind("",loadM5)bM5.place(relx=.3, rely=relyButton, anchor="c")bM6 = Button(root,text="Карта6")bM6.bind("",loadM6)bM6.place(relx=.4, rely=relyButton, anchor="c")bM7 = Button(root,text="Карта7")bM7.bind("",loadM7)bM7.place(relx=.5, rely=relyButton, anchor="c")bM8 = Button(root,text="Карта8")bM8.bind("",loadM8)bM8.place(relx=.6, rely=relyButton, anchor="c")lblTime = Label(root, text="Время = ",width=10)lblTime.place(relx=.80, rely=relyButton-0.05, anchor="c")text1=Text(root,height=1,width=7,font='Arial 14',wrap=WORD)text1.place(relx=.90, rely=relyButton-0.05, anchor="c")lbl1 = Label(root, text="Количество столкновений = ",width=30)lbl1.place(relx=.84, rely=relyButton+0.2, anchor="c")lbl2 = Label(root, text="Количество очищенных клеток = ",width=30)lbl2.place(relx=.84, rely=relyButton+0.3, anchor="c")lbl3 = Label(root, text="Затраченное время = ",width=30)lbl3.place(relx=.84, rely=relyButton+0.4, anchor="c")lbl4 = Label(root, text="Очищенная площадь = ",width=30)lbl4.place(relx=.84, rely=relyButton+0.5, anchor="c")var = IntVar()R1 = Radiobutton(root, text="Нормальная скорость", variable=var, value=1, command=sel1)R1.select()R1.place(relx=.84, rely=relyButton, anchor="c")R2 = Radiobutton(root, text="Высокая скорость ", variable=var, value=2, command=sel2)R2.place(relx=.84, rely=relyButton+0.08, anchor="c")#------настройка местоположения кнопок и лейблов--------canv.pack()root.mainloop()

СПИСОК ЛИТЕРАТУРЫ
1. Белоногов А. В. Анализ и выбор систем навигации робота для позиционирования в условиях замкнутого пространства [Текст] // Технические науки: проблемы и перспективы: материалы IV междунар. науч. конф. (г. Санкт-Петербург, июль 2016 г.). — СПб.: Свое издательство, 2016. — С. 40-42.
2. Шахинпур М. Курс робототехники: Пер. с англ. – М.; Мир, 1990.527 с., ил.
3. Попов Е.П., Письменный Г.В. Основы робототехники: Введение в специальность: Учеб. для вузов по спец. “Роботехнические системы и комплексы” – М.: Высш. шк., 1990. – 224 с., ил.
4. Кочтюк В.И., Гавриш А.П., Карлов А.Г. Промышленные роботы: Коеструирование, управление, эксплуатация: Вища. шк. Головне издательство, 1985.
5. Гансалес Ф., Лик К. Робототехника: Перевод с англ. – М. Мир; 1989. – 624., ил.
6. Бабич А.В., Баранов А.Г., Калабин И.В. и др. Промышленная робототехника: Под редакцией Шифрина Я.А. – М.: Машиностроение, 1982 – 415 с., ил.
7. В.А. Иванов, В.С. Медведев Математические основы теории оптимального и логического управления. М.: Изд-во МГТУ им. Н.Э. Баумана, 2011. – 600 с.
8. Д. Крейг Введене в робототехнику. Механика и управление. Изд-во Институт Компьютерных исследований, 2013. – 564 с.
9. Основы теории исполнительных механизмов шагающих роботов. Ковальчук А.К., Кулаков Д.Б., Кулаков Б.Б., [и др.] М.: Изд-во "Рудомино", 2010., 170 с.
10. Проектирование систем приводов шагающих роботов с древовидной кинематической системой: Учебное пособие для вузов / Каргинов Л.А., Ковальчук А.К., Кулаков Д.Б. [и др.] М.: МГТУ им. Н.Э. Баумана, 2013. 116 с.
11. И.И. Мачульский (ред.) Робототехнические системы и комплексы. М.: Транспорт, 1999. – 446
12. С.Л. Зенкевич, А.С. Ющенко Основы управления манипуляционными роботами: учебник для вузов. – 2-е изд., исправ. И доп. М.: Изд-во МГТУ им. Н.Э.Баумана, 2004. – 480 с
13. Ноф. Ш. (ред.) Справочник по промышленной робототехнике т.1. М.: Машиностроение, 1989. 480 с
14. С.Ф. Бурдаков, В.А. Дьяченко, А.Н. Тимофеев Проектирование манипуляторов промышленных роботов и роботизированных комплексов. М.: Высшая школа, 1986.–264с
15. М. Шахинпур Курс Робототехники: учебник для вузов /Под ред С.Л. Зенкевича: М.: Мир, 1990. – 527с
16. С.А. Воротников Информационные устройства робототехнических систем. М.:Изд-во МГТУ им. Н.Э. Баумана, 2005. – 384 с
17. К.А. Пупков, В.Г. Коньков, Интеллектуальные системы. М.: МГТУ им. Н.Э. Баумана, 2003
18. Математическое моделирование систем приводов роботов с древовидной кинематической структурой: Учебное пособие для вузов / Д.Б. Кулаков [и др.] М.: Изд-во «Рудомино», 2008. 64 с.
19. Князьков M. M., Башкиров С. А. Плоское передвижение многозвенного робота по поверхности с сухим трением // Мехатроника, автоматизация, управление. — 2004. — № 3. — С. 28—32.
20. Осадченко Н. В., Абдельрахман А. М. З. Компьютерное моделирование движения мобильного ползающего робота // Вестник МЭИ. — 2008. — № 5. — С. 131—136.

Вопрос-ответ:

Какие алгоритмы движения используются для домашних роботов?

В статье рассмотрены несколько алгоритмов движения для домашних роботов, включая dvizhenie zigzagom, dvizhenie po spirali и sluchainoe dvizhenie.

Какой метод используется для сравнения алгоритмов маршрутизации?

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

Какие задачи решают домашние роботы?

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

Какие средства разработки используются для реализации алгоритмов движения?

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

Какие алгоритмы движения считаются более эффективными?

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

Какие алгоритмы использовались для маршрутизации домашних роботов?

В статье рассмотрены алгоритмы движения зигзагом, движения по спирали и случайного движения.

Какие особенности реализации алгоритмов движения были описаны в статье?

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

Какие алгоритмы сравнивались в статье?

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

Какие средства разработки использовались при реализации алгоритмов?

В статье указано, что для реализации алгоритмов движения использовались определенные средства разработки. Однако, подробной информации о выбранных средствах не предоставлено.

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

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

Какие алгоритмы движения используются в домашних роботах?

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

Какие средства разработки используются для создания алгоритмов маршрутизации?

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