Диссертационный проект или строим Hexapod своми руками

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

В то время я увлекался робототехникой. Имел опыт строительства дронов и роботов поменьше, которые то следовали за линией по полу, то решали лабиринт за короткий промежуток времени. К тому же, мотивация была приподнята недавней поездкой в Лос-Анджелес на ежегодный VEX Robotics World Championship, где, к слову, не удалось занять призового места, но удалось зарядиться позитивной энергией на весь последующий год. В общем, решил я построить Hexapod своими руками, включая механику, электронику и код.

image

Половину лета я провел в поисках музы, точнее, пытался пересмотреть все имплементации и выбрать лучшее решение для дизайна шасси. Особое восхищение вызывали работы: PhantomX, A-pod и Intel Hexapod. Было решено черпать вдохновение из проекта PhantomX — и вот, что из этого получилось. Забегая вперед, хочу предупредить, что это все, чего я смог добиться от своего робота на год. Но мне был важен сам процесс и хороший диссертационный бал.



По окончанию лета, перед третьим курсом, я начал потихоньку расшатываться и решать административные вопросы, связанные с проектом. Мой лектор по Встроенным Системам, Доктор Тони Вилкокс, с радостью согласился стать супервайзером на год и помочь в достижении поставленной задачи. Нужно было решить вопрос с финансированием, так как глаз пал на отличные цифровые серво-проводы, Dynamixel AX-12A, стоимостью £26 за штуку, а всего требовалось 18 штук для полного счастья. Доктор Тони пообещал решить этот вопрос. На следующий день он заказал три серво-привода и дал задание — сконструировать одну ногу и продемонстрировать её работоспособность. После бесснежного английского Нового Года я вернулся в лабораторию с широкой улыбкой, ведь к этому времени у меня был на руках рабочий прототип ноги.

image

Большая часть шасси была выполнена из черного термопластика и вырезана с помощью лазерного станка.

image

Cкобка, соединяющая Coxa & Femur, была напечатана на 3D-принтере.

image

Прототип платы.

image

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

image

Чарт с объяснением начинки:

image

Робот управляется с терминала через Bluetooth:

image

Буду рад ответить на любые вопросы, связанные с материалом.

P.S.
В Англии курсовую работу на бакалавра называют диссертацией.
Если есть интерес можно покопаться в коде на github.
Электронные схемы на google drive.
Могу также выложить в открытый доступ CAD файлы, отпишитесь в комментариях если вам это интересно.
Share post
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 59

    0
    На каком языке написана прошивка?
    Как я понял, никаних датчиков и обратных связей нет, все жестко завязано на время?
      +2
      Писал на C под Microchip PIC18. Всю информацию получал прямиком с серво-приводов, благо набор индикаторов довольно богатый: угол, скорость, крутящий момент, вольтаж, температура и т.д. Дополнительных датчиков нет, хотя платы предусматривают расширение системы. Я оставил выходы к аналоговым/цифровым портам в виде pinhead'ов. Если память не изменяет, там около 10 свободный портов на каждую ногу, включая I2C.
        0
        А как закон движения у вас реализован? Учитываются ли в нем показания датчиков в приводах?
        Какие реализованы защиты? Что будет например, если нога застрянет?
          +2
          Все движение прописано в готовых gait'ах. Движется робот по модели alternating tripod — три ноги упираются в пол при движении. Задается точка в 3D пространстве для позиции кончика ноги, функция проверяет может ли нога дотянутся до заданной точки, если да, то высчитывает полярные углы для каждого из 3-х серво-приводов. Используются данные о стартовой позиции и скорости + постоянно проверятся закончила ли нога свое движение. Вся защита сводится к лимитированию углов поворота. К тому же, мотор просто отключится если напряжение превысит максимально допустимое, что может произойти в случае блокировки ноги. Все очень топорно, AI элементы отсутствуют.
            0
            > мотор просто отключится если напряжение превысит максимально допустимое

            Думаю, напряжение никогда не превысит то, которое подается на питание. Может, имеется в виду ток (который таки может сильно возрастать, если двигатель заблокирован)?
              0
              Обучение на английском дает о себе знать. Имел в виду electric current — электрический ток.
                +1
                Пользуясь случаем, хотел поблагодарить вас за вашу статью о создании гексапода. Очень круто и информативно. Признаюсь, что использовал ваш материал при написание собственного софта.
                  +2
                  Спасибо, очень приятно узнать, что моя писанина кому-то как-то помогла. У вашего гекса перспективы побольше в плане мощности, а значит и носимого оборудования. Так что буду ждать развития .) У моего таскать камеру на себе — предел, и то недолговечный:

        +5
        Что нового в этом проекте? Диссертация подразумевает научную новизну и оригинальность. Гексаподов же куча. Может, Вы, сделали какой-то новый закон движения? Может, Вы, корпус и ноги сделали из нового композитного материала? Может, Вы, переосмыслили принцип работы гексаподов? Нужно больше конкретики. Если просто взять готовый продукт и перестроить его, то это больше смахивает на курсовой, чем на диссертацию.
          +5
          Да вы правы, это курсовая. В Англии они это диссертацией называют, странные они.
            +1
            В Англии это называют thesis. И хотя каждая диссертация — это thesis, не каждый thesis — это диссертация (иногда, например, thesis — школьное сочинение).
            Не злоупотребляйте термином, это обесценивает действительно научные работы.
              0
              Я тоже запутался, но вики вносит хоть какую-то ясность. Почитать можно тут. В моем случае — это диссертация на Bachelor of Engineering (BEng).
                0
                Действительно, необычно.
                Тем не менее, вряд ли уместно использовать перевод-кальку вместо устоявшегося русского термина «дипломная/бакалаврская работа». Особенно, если калька сильно искажает смысл (как видно по комментариям, многие решили, что речь о кандидатской/PhD работе)
                  0
                  Буду аккуратней в будущем.
            +1
            Эта магисторская диссера, сейчас к ней такие запросы.
            –1
            Я не очень понял зачем все эти контроллеры?
            Dynamixel AX-12 позволяют объединить в одну «сеть» до 254 сервомашинок. Остается сделать только конвертор из «сети Dynamixel» в что то более осмысленное и понятное PC и вперед с песней пиши на чем хочешь.

              +1
              Верно, задумка состоит в том, что все вычисления производятся на каждой ноге отдельно, а центральный контролер только отдает команды. Некое подобие нейро сети.
                +2
                Нейросеть тут как-то совсем не к месту, в ней узлы очень просты, с таким размахом и интернет можно нейросетью обозвать.
                Получилась распределенная сеть контроллеров, та самая CAN.
                  +1
                  Планировалось создать из этого нейросеть с дополнительными датчиками и заняться адаптационным движением, рефлексами и нейронным обучением.
                    0
                    Вопрос с подковыркой.
                    Назовите мне хоть один высший живой организм с распределенной нервной системой?
                      +2
                      Человек?
                        0
                        Да вот в том то и проблема что нет таких существ на планете земля.
                          +3
                          А как же позвоночные, у которых часть рефлексов обрабатываются спинным мозгом в обход мозга головного?
                            0
                            Ну я лично могу без проблем блокировать подобные рефлексы «верхнем утолщением спинного мозга».
                            IMHO вы просто перезагоняетесь.
                            Делая кучу низкоуровневых систем с обратными связями вы получаете крайне не устойчивую и плохо управляемую систему.
                            У вас подсистемы с ОС внутри другой под системы с ОС. А возможность наблюдаемости внутренних состояний еще только запутывает. У вас же вышестоящие циклы теоретически могут видеть что творится ниже.
                            Просто попробуйте смоделировать вашу систему правления и посмотрите не будет ли биений как будут затухать возмущения.
                            А так на одну серву: управляющие воздействия- направление, длительность ШИМ, входные: текущее положение (угол), ток потребляемый двигателем. Такой объем команд и датчиков умноженный на 18, с частой дискретизации 1000 Гц. Легко решается на одном контроллере.
                              0
                              Реализация приоритета в обработке сигналов — неотъемлемое свойство ЦНС, и используется в диагностике ее поражений, популярный пример — Рефлекс Бабинского — позволяет установить наличие поражений центрального двигательного нейрона. У взрослого здорового человека головной мозг подавляет реакцию спинного, у новорожденного и у человека с поврежденным двигательным нейроном такого подавления не возникает.

                              Что касается распределенной сети контроллеров — это очень правильное архитектурное решение, так как оно позволяет разгрузить центральный контроллер и существенно упростить его программу. Вместо команд «дать ток на двигатель 3 ноги 8» и постоянных запросов угла и тока, достаточно дать команду «ноге 8 встать на углы a1,a2,a3 к 1789 кадру синхронизации».
                                0
                                Вы привели отличный пример про «ток » и «кадр синхронизации». Пытаясь решить задачу перемещения по ровной поверхности шестиногой твари. Но
                                1 Задача имеет более простое решение -> колесо
                                2 Задач превращается в безумный механизм обработки асинхронных событий при движении по пересеченной местности.
                                Я это уже проходил. Что будет если нога застрянет? Или если нога провалится?
                                Приходится на верхнем уровне сразу принимать решения, на уровне ноги эти задачи не решишь. Уровень ноги это как уже говорил 2 команды и 2 датчика, еще можно добавить датчик касания.
                                Просто попробуйте описать представить ситуацию «Нога зацепилась и продолжает двигать тело машин, другие ноги видят что их пытаются дестабилизировать» все это охвачено как ваш ем случаям тройным контуром обратной связи и вот тут поверьте такая веселуха начинается. Даже когда в системе один контру обратной связи из-за разбросов параметров серв и механики такие чудеса лезут.
                                В случая централизованного контроля за движением централизовано как только один из показателей выходит за рамки планируемого движения. Текущий план движении сразу отбрасывается и начинает строится новый. И опять же централизованно.
                                А к вопрос разгрузить ЦП от задач первичного сбора и обработки данных за вас эту разгрузку уже делают мозги сервы.
                                И поверьте если вы сделает асинхронные сообщения от контроллеров серв вы просто умрете писать алгоритмы синхронизации там где они не нужны.
                                  0
                                  В целом, мы попали в аналог известного спора о микроядре и макроядре.

                                  Что касается использования кучи жестких обратных связей — я думаю, стоит подумать о применении более совершенных регуляторов, основанных на более развитых, более сложных вариационных принципах.
                                    0
                                    По русски это называет «Вам шашечки или ехать».
                            +3
                            Плохо Вы знаете себя самого :)
                            Человек, по сути, управляется именно распределённой нервной системой. Даже кишечник имеет свою «нейронную сеть».
                              0
                              Осьминоги вас устроят?
                            +3
                            Человек, определённо.

                            Типичные здоровые человеки оборудованы, как минимум:
                            1. Центральным процессором, с разными физически функционально выделенными элементами, а также с поддержкой многозадачности. Кстати, тот софт, который мы считаем главным, не имеет там рутовских привелегий.
                            2. Спецпроцессором модели «medulla spinalis» по работе с периферией. Большей частью он представляет собой быстродействующую шину данных, но изрядная часть этих данных там тоже обрабатывается.
                            3. Спецпроцессором по перевариванию пищи — т.н. рептильный мозг. Связан со спинным и ЦП специализированной шиной данных «Вагус».
                            4. Системами сжатия данных, удаления артефактов и улучшения качества изображения в системах видеонаблюдения.
                            5. Автономной аварийной системой обработки сокращений в главном кровяном насосе.
                            0
                            Было бы интересно увидеть продолжение.
                              0
                              Жаль, но робот остался в университете, а я с головой ушел в автомобильную инженерию с ее эргономикой. Не судьба, видать, стать создателем Skynet'а.
                      +1
                      [зануда моде он]
                      Нужно — 18 движков
                      Др. Тони — 3 движка
                      Университет — 12 движков
                      18 != 3+12
                      Были еще участники проекта?
                      [зануда моде офф]
                        +1
                        Тоже заметил несостыковку после отправки статьи в песочницу. По началу он взял шесть. Спустя четыре месяца докупил недостающие.
                          0
                          Забыл уточнить, что над проектом работал самостоятельно.
                          0
                          Пожалуй воснользуюсь модом предыдущего комментатора (BoxaShu), как наиболее подходящим.
                          [зануда моде он]
                          Это все интересно, но в диссертацинной работе должна быть научная и техническая новизна, а так же практическая значимость. Другими словами — зачем все это делалось? К слову говоря ни научной ни технической новизны я тоже не заметил.
                          [зануда моде офф]
                            0
                            Пожалуй воснользуюсь модом предыдущего комментатора (BoxaShu), как наиболее подходящим.
                            [зануда моде он]
                            Это все интересно, но в диссертацинной работе должна быть научная и техническая новизна, а так же практическая значимость. Другими словами — зачем все это делалось? К слову говоря ни научной ни технической новизны я тоже не заметил.
                            [зануда моде офф]

                            Забыли [нечитатель моде офф] :)
                            habrahabr.ru/post/241620/#comment_8092380
                              +1
                              Тезис/Диссертация на Доктора, Магистра требует все то о чем вы упомянули. На бакалавра этих требований нет.
                                +1
                                Тезис/Диссертация на … Магистра … бакалавра
                                По-русски это называется «дипломная работа» или «дипломный проект» (в зависимости от наличия практической части). Хотя… ниже пишут, что для магистров уже «диссертация», странно…
                              +1
                              > На третьем курсе бакалавра электронной инженерии мне требовалось выбрать диссертационный проект

                              Так и надо было в заголовке писать: «бакалаврская работа» (пусть даже «дипломная», хоть дипломная — это для полноценного высшего). А то я уж грешным делом подумал, что на такой элементарщине ныне в к.т.н. выезжают…
                                +1
                                Вот видите как, у вас бакалавр не полноценное высшее, а у нас вполне себе полноценное. Более того, в Англии на докторскую можно идти прямиком после бакалавра.
                                  +3
                                  Россия тоже участвует в Болонском процессе, у нас степень бакалавра — полноценное высшее образование

                                  // Если не изменяет память «диплом» бакалавра назывался «выпускная квалификационная работа бакалавра», у магов же «магистерская диссертация»
                                    0
                                    Добавил пояснение в конце статьи.
                                +2
                                А о чем статья? Где тех подробности? Вы хотели построить, построили и приложили пару фото.
                                  0
                                  Взгляните на это с перспективы вступительной статьи. Если есть желание, могу продемонстрировать тех. подробности в развернутом виде в следующей статье.
                                  –1
                                  И всё равно остаётся неясным, почему с динамикселями обращаются столь грубо — подключают через тройную винтовую колодку когда есть специализированный разъем? Слаба богу «обычное» каскадирование друг за другом (серва в серву, а последняя — в контролер) хоть реализовали.
                                  И зачем использовать PIC, если даже производитель всё собирает на ATMega'х ?
                                  В общем, как курсовик — волне себе, но как выпускная работа — явно «не дотягивает».

                                  Не в качестве пиара, а чтобы стала ясна неголословность утверждения, вот пример того как наши студенты первого-второго курса с гексаподами возятся. Да и со всем остальным подобным добром.
                                    0
                                    ошибка доступа
                                      +1
                                      Это и есть специализированный разъем. Тут должно быть видно:

                                      image

                                      PIC использовался, так как университет преподает используя именно эти микроконтроллеры, и это был один из критериев финансирования.
                                      Буду рад почитать статью о ваших наработках, вконтакте не пускает, ошибка доступа.
                                        0
                                        Насчет разъема я имел ввиду другую сторону — драйвера. Там тройные винтовые разъемы на платах. Но теперь присмотрелся — вроде есть у Вас и «нормальные» для Динамикселей гнезда. Потому прошу прощения.
                                        А PIC — «плохо» в данном конкретном случае, поскольку их основная ниша — управление периферией, то есть в качестве «мозга» они не подходят (концептуально — так сами Microchip позиционируются). А Вам ведь именно в этом направлении нужно развивать проект — в интеллектуальном управлении.

                                        Материалы студентов «ВКонтакте» не мои, наверное, они закрыли публичный доступ. Исправимся.
                                          0
                                          Развивать, действительно, планировалось в этом направлении и использовать ARM в дальнейшем. Изначально хотелось на ARM выполнить проект, но еще раз повторюсь, был двухлетний опыт на PIC'ах и абсолютно никакого опыта с AVR & ARM. Причина выбора микроконтроллера диктовалась именно этим фактором.
                                        0
                                        И зачем использовать PIC


                                        Вы говорите «PIC» так, как будто это что-то плохое.
                                          0
                                          PIC от Microchip — очень хорошие, но не подходящие в качестве SoC для задач управления роботами. Пики — для обработки ввода-вывода периферии. Нужен как минимум ещё один процессор «общего плана» для проведения расчётов и принятия решений.
                                          Просто преподаватель, наверное, не хочет развивать в себе «новые навыки» — изучать другие типы процессорных архитектур, вот и даёт такие задачи (у нас такой был, кстати, уволили).
                                            +2
                                            Так тут 18 серия, производительности хватит для всех.
                                              +2
                                              Я тоже так думаю. К тому же, на внутренних 64 MHz.
                                        0
                                        Спасибо, что поделились опытом!

                                        Для меня лично важно наличие в статье — «диссертационный проект», «робототехника», «своми руками» (надеюсь и у нас будет продвигаться это направление). Файлы проекта (если они открытые) можете выкладывать на github — думаю для людей будут интересны технические детали.
                                          +1
                                          Всегда рад поделиться наработками, добавил в конце статьи ссылку на github.
                                            +1
                                            Покопался. Такую вещь нашел:

                                            Eusart1Mode(0);
                                            Tx1Byte(rand()%255);	//Send random Byte
                                            while(!TX1_STATUS);	
                                            

                                            Мелочевка конечно, но байт будет несовсем случайным — числа 255 как раз не будет (остаток от деления всегда меньше делителя).
                                            То есть правильно было бы делить на 256.
                                            А тут вторая интересность — если бы берем остаток от деления по модулю, который является степенью основания системы счисления, мы можем этот остаток получить, просто убрав из числа лишние цифры.
                                            Так что если мы хотим сэкономить десяток-другой тактов (и размера кода, подпрограмму подсчета остатка нужно же поместить в прошивку), стоит сделать
                                            Tx1Byte(rand()&0xFF);
                                            

                                            Нашелся фрагмент в «китайском стиле»
                                            LegWriteStepBegin(5, 1);	//Send step begin command to a leg
                                            LegWriteStepBegin(4, 0);	//Send step begin command to a leg
                                            LegWriteStepBegin(3, 1);	//Send step begin command to a leg
                                            LegWriteStepBegin(2, 0);	//Send step begin command to a leg
                                            LegWriteStepBegin(1, 1);	//Send step begin command to a leg
                                            LegWriteStepBegin(0, 0);	//Send step begin command to a leg
                                            

                                            Что наводит на крамольные мысли о лимитировании минимального числа строк в исходниках, или о незнании того, что четность числа определяется младшим битом:
                                            LegWriteStepBegin(i, i&0x1);	//Send step begin command to a leg
                                            


                                            Но в целом, на исходники приятно смотреть.
                                              +2
                                              Спасибо, за обзор кода. Замечание о «китайском стиле» очень к стати, и вызвано простейшим незнанием приведенного вами решения. Обязательно буду использовать в будущих работах.

                                        Only users with full accounts can post comments. Log in, please.