Програмируеми mindcub3r, робот берач на Рубик куб, част 1 от 2

  • 28.06.15 02:01 •
  • haqreu •
  • • # 261299
  • • Habrahabr
  • 3 •
  • 11411

- като Forbes, само по-добре.

Програмируеми mindcub3r, робот берач на Рубик куб, част 1 от 2

Реших да повторите този робот, имах нужда да получите най-сглобени куба и максимално задачата - е да се създаде робот имах нужда конфигурация (не е задължително да сглобява кубче) и да го кача на физическото куба. Това ми позволява да се получи някаква спасяване игра, когато ще се съберат на куба на ръка, и мога да се върнете към него по всяко време (можете да се сетите, че аз не искам да гледам готови алгоритми строят, аз съм се интересуват да научат как да се съберат?) В момента пиша всички ходове на хартията, за да бъдат в състояние да се връщам, а аз по-скоро уморени.

Така че аз се събраха hardvarnogo част на робота, монтажни чертежи са страхотни. Изтеглили софтуер, изтеглен, с трепет постави куб върху платформата и жестоко отрязани. Оказва се, че роботът изисква официалният куба на Рубик, и си купих един, който се използва за spidkubinga. Той е изправен пред други цветове (например, няма бели) и роботът се скъса, тя не е в състояние да сканира. Е, аз казах, надраскани върху долната част на цевта, намери официалните заровете, обаче, на възраст под двадесет години. Със своя zatortymi и извратен от чужди влияния стикери робот също не искат да работят.

Програмируеми mindcub3r, робот берач на Рубик куб, част 1 от 2
Програмируеми mindcub3r, робот берач на Рубик куб, част 1 от 2

метод, използван

В света на огромен брой алгоритми, може би най-правилното е да се програмира този. Но е необходимо да се мисли, да се измисли за A * евристичен повтарящ Задълбочаване, а аз съм мързелив. Освен това, необходимо е да се мисли как да го използвате, за да получите желаната конфигурация, а аз съм мързелив. Ето защо, аз ще използва най-тъп и пряк метод: с помощта на запис Cube Explorer цялата последователност на завои, които събират
  • долната предния ръб
  • долния десен преден ъгъл
  • пред десния край
  • горния десен преден ъгъл
  • горната предния ръб

тогава код ще изглежда така:


В тази статия, ще опиша самостоятелна програма, която събира куб от командния ред. Както обикновено, всички код публикувам на githabe. могат да бъдат взети Примери за случайни конфигурации на куба тук. има и валидатор на нашите решения.

структура на данните

Cube Фасети ще наричаме стандарт: F - отпред, R - дясна ръка, B - обратно, L - наляво, U - горна, D - по-ниско. Ето стандартната ротация:

Програмируеми mindcub3r, робот берач на Рубик куб, част 1 от 2

Всеки край има две съседни страни, всеки ъгъл има три съседни лица. За да представлява куб, че се използват две редици от дванадесет (Броят на ръбовете) и осем (в зависимост от броя на ъглите) числа. Така че, тук е набор от показатели:

Програмируеми mindcub3r, робот берач на Рубик куб, част 1 от 2

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

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

Програмируеми mindcub3r, робот берач на Рубик куб, част 1 от 2

Събрани куб да бъде представляван от един чифт на масиви, и то ръбове и ъгли, съответно. Например, броят на ребро 4 в масива трябва да имат ориентация 8.

Тук е представителството на куб:

ръбове и ъгли - са масиви, където се съхраняват данните, how_edges_move how_corners_move и описват индекс трансформация масиви ръбове и ъгли да се върти около всяка от шест лица, но atomic_rotation () функция фактически осъществява въртенето на едно от лицата.

Твърди жични алгоритми

Най-трудната част е свършила, сега скучен част на местността като се започне, отворете Cube Explorer и ръка пишат редица алгоритми за събранието.

Не забравяйте, че първото нещо, което ще събере на долната предния ръб? Напълно смесен куба може да се намира на всяка от 24 възможни места, така alg_DF_edge спектър дава 24 различни последователности, които ще поставят реброто на място. Имената на други масиви са ясни. apply_sequence () функция разделя низа в атомната работа и причинява atomic_rotation ().

директно колектор

Директно колектор изглежда директен трансфер псевдо код дава в началото, в ++ езика C:

Имайте предвид, че rotate_entire_cube () се нарича всеки път, четири пъти, така че между циклите на куба е винаги ориентирани както трябва, но в рамките на цикъла, ние трябва да знаем как точно е насочена към коригиране на изхода на решението на екрана.

Да вземем за пример в разглобен куб тук и стартирайте програмата:


Копирайте изхода на уеб валидатора и да получите:


Така че, ние имаме решаване, следващия път ще се контролира пряко от робот.

Kosiemby алгоритъм, между другото, показва лошо, ако аз ще трябва да се намали броя на ходове, аз ще го програмирате. Кой не го направи, защото да го програмирате, е малко по-трудно, но имам време не прекалено много.

haqreu готино, благодаря за поста. Въпреки това, по време на 91 това е твърде много, дори и за автоматизирано сглобяване. Просто се работи по подобен проект: wiswin.nl/FAC%20system%20Rubik%20cube%20solver.htm. Ние имаме малко по-сложно от гледна точка на механиката, и всичко управлява в момента с Raspberry Pi. Първо замислена Arduino, но поради сложността на алгоритъм ход на Raspberri.

Използвам, за да се реши по-горе алгоритъм Kosiemby, който работи само магически: средно 17-18 разтвор ходове. Въпреки това, аз не можах да намеря нормална реализация, освен оригинала на Java, така че трябваше да направи всичко сам. Връзката са два варианта, един в чиста Python, вторият в чиста В. А Python версия е бавен (на десктопа няколко минути, но raspberri под PyPy работи до една минута) и sishnaya - мухи.

Смешни се случи, че аз съм на работа по подобен проект, а след това такава позиция се очертава - сродна душа :) Ще трябва да завърши също да хукне статия)