Оглавление:

Создайте своего робота-черепаху !: 7 шагов
Создайте своего робота-черепаху !: 7 шагов

Видео: Создайте своего робота-черепаху !: 7 шагов

Видео: Создайте своего робота-черепаху !: 7 шагов
Видео: Программирование робота-черепахи Keyestudio (продолжение) 2024, Ноябрь
Anonim
Создайте своего собственного робота-черепаху!
Создайте своего собственного робота-черепаху!
Создайте своего собственного робота-черепаху!
Создайте своего собственного робота-черепаху!
Создайте своего собственного робота-черепаху!
Создайте своего собственного робота-черепаху!

РЕДАКТИРОВАТЬ:

Дополнительная информация о программном обеспечении и управлении доступна по этой ссылке:

hackaday.io/project/167074-build-your-own-turtlebot-3-backbone

Прямая ссылка на код:

github.com/MattMgn/foxbot_core

Почему именно этот проект?

Turtlebot 3 - идеальная платформа для изучения электроники, робототехники и даже искусственного интеллекта! Я предлагаю вам поэтапно создать своего собственного turtlebot с доступными компонентами, не жертвуя функциями и производительностью. Помня об одном: сохранить лучшее от первоначального робота, его модульность, простоту и огромное количество пакетов для автономной навигации и искусственного интеллекта от сообщества разработчиков ПО с открытым исходным кодом.

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

Что вы откроете для себя в этом проекте?

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

Будет подробно описан весь процесс сборки: от 3D-печати деталей, сборки и нескольких компонентов, пайки и интеграции электроники до компиляции кода на Arduino. Это руководство завершится примером «привет, мир», чтобы познакомить вас с ROS. Если что-то кажется непонятным, не стесняйтесь задавать вопрос!

Запасы

Электроника:

1 одноплатный компьютер для запуска ROS, например Raspberry Pi или Jetson Nano

1 x Arduino DUE, вы также можете использовать UNO или MEGA

1 x Протоплата, которая подходит для распиновки Arduino DUE, доступна здесь

2 двигателя постоянного тока 12 В с энкодерами (опция 100 об / мин)

1 драйвер двигателя L298N

Регулятор 2 x 5 В

1 аккумулятор (например, 3S / 4S LiPo аккумулятор)

2 переключателя ВКЛ / ВЫКЛ

2 х светодиода

2 резистора по 470 кОм

Разъемы 3 x 4 контакта JST

1 x USB-кабель (по крайней мере, один между SBC и Arduino)

Датчики:

1 х датчик тока (опционально)

1 x 9 степеней свободы IMU (опционально)

1 x LIDAR (опционально)

Шасси:

16 модульных пластин Turtlebot (которые также можно напечатать на 3D-принтере)

2 колеса диаметром 65 мм (опция шириной 6 мм)

4 нейлоновых прокладки 30 мм (опционально)

20 пластин M3 (опционально)

Другие:

Провода

Винты и вставки M2,5 и M3

3D-принтер или кто-то, кто может распечатать детали для вас

Ручная дрель с набором таких сверл

Шаг 1: Описание

Описание
Описание
Описание
Описание

Этот робот представляет собой простой дифференциальный привод, который использует 2 колеса, непосредственно установленные на их двигателе, и роликовый ролик, который размещается сзади, чтобы предотвратить падение робота. Робот разделен на два слоя:

Нижний уровень: с силовой установкой (аккумулятор, контроллер двигателя и двигатели) и электроникой «низкого уровня»: микроконтроллер Arduino, регулятор напряжения, переключатели…

Верхний уровень: с электроникой «высокого уровня», а именно с одноплатным компьютером и лидаром

Эти слои связаны с печатными деталями и винтами, чтобы обеспечить прочность конструкции.

Электронная схема

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

Ионно-полимерный аккумулятор 3S Litihum емкостью 3000 мАч питает первую цепь, он питает как плату контроллера двигателя (L298N), так и первый регулятор 5 В для энкодеров двигателя и Arduino. Эта схема включается переключателем со светодиодом, который указывает ее состояние ВКЛ / ВЫКЛ.

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

Дополнительные датчики, такие как LIDAR или камера, могут быть добавлены непосредственно на Raspberry Pi через USB или порт CSI.

Механический дизайн

Каркас робота состоит из 16 идентичных частей, которые образуют 2 квадратных слоя (ширина 28 см). Множество отверстий позволяют устанавливать дополнительные детали там, где это необходимо, и предлагают полную модульную конструкцию. Для этого проекта я решил взять оригинальные пластины TurtleBot3, но вы также можете распечатать их на 3D-принтере, поскольку их дизайн открыт.

Шаг 2: Сборка блока двигателя

Блок двигателя в сборе
Блок двигателя в сборе
Блок двигателя в сборе
Блок двигателя в сборе
Блок двигателя в сборе
Блок двигателя в сборе

Моторная подготовка

Первый шаг - обернуть вокруг каждого мотора поролоновую ленту толщиной 1 мм, чтобы предотвратить вибрацию и шум при вращении мотора.

Печатные части

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

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

Настройки 3D-принтера: все детали печатаются со следующими параметрами

  • Сопло диаметром 0,4 мм
  • 15% заполнение материала
  • Слой высотой 0,2 мм

Колесо

Выбранные колеса покрыты резиной для максимального сцепления и обеспечения свободного качения. Зажимной винт удерживает колесо, установленное на валу двигателя. Диаметр колеса должен быть достаточно большим, чтобы преодолевать небольшие ступеньки и неровности грунта (эти колеса имеют диаметр 65 мм).

Фиксация

Когда вы закончите с одним моторным блоком, повторите предыдущие операции, а затем просто закрепите их в слое винтами M3.

Шаг 3: Переключатели и подготовка кабеля

Переключатели и подготовка кабеля
Переключатели и подготовка кабеля
Переключатели и подготовка кабеля
Переключатели и подготовка кабеля
Переключатели и подготовка кабеля
Переключатели и подготовка кабеля

Подготовка кабеля двигателя

Обычно мотор-энкодер поставляется с кабелем, включающим с одной стороны 6-контактный разъем, который соединяет заднюю часть печатной платы энкодера, и оголенные провода с другой стороны.

У вас есть возможность напрямую припаять их к вашей прототипной плате или даже к Arduino, но я рекомендую вам вместо этого использовать гнездовые штыревые разъемы и разъемы JST-XH. Таким образом, вы можете подключать / отключать их на своей прототипной плате и упростить сборку.

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

Переключатель и светодиод

Для включения двух силовых цепей подготовьте 2 кабеля для светодиодов и переключателей: сначала припаяйте резистор 470 кОм к одному из контактов светодиода, затем припаяйте светодиод к одному из контактов переключателя. Здесь также вы можете использовать кусок термоусадочной трубки, чтобы спрятать резистор внутри. Будьте осторожны, чтобы припаять светодиод в правильном направлении! Повторите эту операцию, чтобы получить два кабеля переключателя / светодиода.

сборка

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

Шаг 4: Подключение электронных плат

Электропроводка электронных плат
Электропроводка электронных плат
Электропроводка электронных плат
Электропроводка электронных плат
Электропроводка электронных плат
Электропроводка электронных плат

Макет плат

Протоплата, соответствующая разводке платы Arduino, используется для уменьшения количества проводов. В верхней части прототипной платы L298N уложен с женским заголовком Dupont (заголовки Dupont похожи на Arduino).

L298N подготовка

Изначально плата L298N не поставляется с соответствующим штекером Dupont, вам нужно добавить 9-контактный ряд под платой. Вам необходимо проделать 9 отверстий с помощью сверла диаметром 1 мм параллельно существующим отверстиям, как вы можете видеть на картинке. Затем соедините соответствующие контакты 2-х рядов с помощью паяльных материалов и коротких проводов.

Распиновка L298N

L298N состоит из 2 каналов, позволяющих управлять скоростью и направлением:

направление через 2 цифровых выхода, называемых IN1, IN2 для первого канала и IN3 и IN4 для второго

скорость через 1 цифровой выход, называемый ENA для первого канала и ENB для второго

Я выбрал следующую распиновку для Arduino:

левый двигатель: IN1 на контакте 3, IN2 на контакте 4, ENA на контакте 2

правый двигатель: IN3 на контакте 5, IN4 на контакте 6, ENB на контакте 7

Регулятор 5В

Даже если l298N обычно может обеспечивать 5 В, я все же добавляю небольшой регулятор. Он питает Arduino через порт VIN и 2 энкодера на двигателях. Вы можете пропустить этот шаг, напрямую используя встроенный регулятор 5V L298N.

Разъемы JST и распиновка энкодера

Используйте адаптеры разъема JST-XH с 4 контактами, каждый разъем затем подключается к:

  • 5В от регулятора
  • земля
  • два цифровых входных порта (например: 34 и 38 для правого энкодера и 26 и 30 для левого)

Дополнительный I2C

Как вы могли заметить, на прототипной плате есть дополнительный 4-контактный разъем JST. Он используется для подключения устройства I2C, такого как IMU, вы можете сделать то же самое и даже добавить свой собственный порт.

Шаг 5: Motor Group и Arduino на нижнем уровне

Motor Group и Arduino на нижнем уровне
Motor Group и Arduino на нижнем уровне
Motor Group и Arduino на нижнем уровне
Motor Group и Arduino на нижнем уровне
Motor Group и Arduino на нижнем уровне
Motor Group и Arduino на нижнем уровне

Крепление мотоблоков

После того, как нижний слой будет собран с пластинами 8 Turtlebot, просто вставьте 4 винта M3 непосредственно во вставки для обслуживания моторных блоков. Затем вы можете подключить провода питания двигателя к выходам L298N, а ранее сделанные кабели - к разъемам JST на макетной плате.

Распределение мощности

Распределение мощности просто реализуется с помощью клеммной колодки с барьером. С одной стороны шлагбаума прикручен кабель с розеткой XT60 для подключения к LiPo батарее. С другой стороны прикручены два ранее припаянных кабеля для светодиодов / переключателей. Таким образом, каждая схема (двигатель и Arduino) может быть включена с помощью своего переключателя и соответствующего зеленого светодиода.

Кабельный менеджмент

Вам быстро придется разобраться с большим количеством кабелей! Чтобы уменьшить беспорядок, вы можете использовать «стол», ранее напечатанный на 3D-принтере. На столе зафиксируйте электронные платы двусторонним скотчем, а под столом пусть провода свободно протекают.

Аккумуляторная батарея

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

Ролики

Не совсем роликовые ролики, а простая полусфера, закрепленная 4 винтами на нижнем слое. Этого достаточно для обеспечения устойчивости робота.

Шаг 6: Одноплатный компьютер и датчики на верхнем уровне

Одноплатный компьютер и датчики на верхнем слое
Одноплатный компьютер и датчики на верхнем слое
Одноплатный компьютер и датчики на верхнем слое
Одноплатный компьютер и датчики на верхнем слое
Одноплатный компьютер и датчики на верхнем слое
Одноплатный компьютер и датчики на верхнем слое

Какой одноплатный компьютер выбрать?

Мне не нужно представлять вам знаменитый Raspberry Pi, количество его вариантов использования значительно превышает область робототехники. Но у Raspberry Pi есть гораздо более мощный соперник, которого вы можете проигнорировать. Действительно, в Jetson Nano от Nvidia помимо процессора встроена мощная 128-ядерная графическая карта. Эта конкретная графическая карта была разработана для ускорения вычислительных дорогостоящих задач, таких как обработка изображений или логический вывод нейронной сети.

Для этого проекта я выбрал Jetson Nano, и вы можете найти соответствующую 3D-часть среди прикрепленных файлов, но если вы хотите использовать Raspberry Pi, здесь есть много вариантов для печати.

Регулятор 5V

Какую бы плату вы ни решили взять с собой на свой робот, вам понадобится стабилизатор на 5 В. Последнему Raspberry Pi 4 требуется максимум 1,25 А, но Jetson Nano требует до 3 А при нагрузке, поэтому я выбрал Pololu 5V 6A, чтобы иметь запас мощности для будущих компонентов (датчики, фонари, шаговые двигатели …), но подойдут любые дешевые 5V 2A. работа. В Jetson используется цилиндр постоянного тока диаметром 5,5 мм, а в Pi - микро-USB, возьмите соответствующий кабель и припаяйте его к выходу регулятора.

Макет LIDAR

Используемый здесь LIDAR - это LDS-01, существуют различные другие 2D-лидары, которые можно использовать, например, RPLidar A1 / A2 / A3, YDLidar X4 / G4 или даже лидары Hokuyo. Единственное требование - он должен быть подключен через USB и размещен по центру над конструкцией. Действительно, если LIDAR плохо отцентрирован, карта, созданная алгоритмом SLAM, может сместить предполагаемое положение стен и препятствий от их реального положения. Также, если какие-либо препятствия от робота пересекают лазерный луч, это уменьшит дальность и поле зрения.

Монтаж лидара

ЛИДАР монтируется на 3D-печатной детали, которая повторяет его форму, сама деталь удерживается на прямоугольной пластине (на самом деле на картинке из фанеры, но также может быть напечатана 3D-печать). Затем переходная часть позволяет закрепить ансамбль на верхней пластине черепахи с помощью нейлоновых прокладок.

Камера как дополнительный сенсор или замена лидара

Если вы не хотите тратить слишком много денег на лидар (который стоит около 100 долларов), выберите камеру: также существуют алгоритмы SLAM, которые работают только с монокулярной камерой с RGB-подсветкой. Оба SBC принимают камеру USB или CSI.

Более того, камера позволит запускать скрипты компьютерного зрения и обнаружения объектов!

сборка

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

  • соответствующий кабель от регулятора 5V к SBC
  • USB-кабель от порта программирования Arduino DUE (ближайшего к корпусу постоянного тока) к USB-порту вашего SBC

Затем закрепите верхнюю пластину с помощью дюжины винтов. Теперь ваш робот готов к программированию, ХОРОШО!

Шаг 7: заставьте его двигаться

Скомпилируйте Arduino

Откройте свою любимую IDE Arduino и импортируйте папку проекта с именем own_turtlebot_core, затем выберите свою плату и соответствующий порт, вы можете обратиться к этому отличному руководству.

Отрегулируйте настройки ядра

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

#define ARDUINO_DUE // ** КОММЕНТИРУЙТЕ ЭТУ СТРОКУ, ЕСЛИ ВАШЕ НЕ ИСПОЛЬЗУЕТ ДОЛЖНОСТЬ **

Следует использовать только с Arduino DUE, если не комментировать строку.

#define RATE_CONTROLLER_KP 130.0 // ** НАСТРОЙТЕ ЭТО ЗНАЧЕНИЕ **

#define RATE_CONTROLLER_KD 5000000000000.0 // ** НАСТРОЙТЕ ЭТО ЗНАЧЕНИЕ ** #define RATE_CONTROLLER_KI 0.00005 // ** НАСТРОЙТЕ ЭТО ЗНАЧЕНИЕ **

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

/ * Определить контакты * /

// мотор A (справа) константный байт motorRightEncoderPinA = 38; // ** ИЗМЕНИТЬ ПИН-код NB ** const byte motorRightEncoderPinB = 34; // ** ИЗМЕНИТЬ ПИН-код NB ** const byte enMotorRight = 2; // ** ИЗМЕНИТЬ ПИН-код NB ** const byte in1MotorRight = 4; // ** ИЗМЕНИТЬ ПИН-код NB ** const byte in2MotorRight = 3; // ** ИЗМЕНИТЬ ПИН-код NB ** // двигатель B (слева) const byte motorLeftEncoderPinA = 26; // ** ИЗМЕНИТЬ ПИН-код NB ** const byte motorLeftEncoderPinB = 30; // ** ИЗМЕНИТЬ ПИН-код NB ** const byte enMotorLeft = 7; // ** ИЗМЕНИТЬ ПИН-код NB ** const byte in1MotorLeft = 6; // ** ИЗМЕНИТЬ ПИН-код NB ** const byte in2MotorLeft = 5; // ** ИЗМЕНИТЬ ПИН-код NB **

Этот блок определяет распиновку между L298N и Arduino, просто измените номер контакта, чтобы он соответствовал вашему. Когда вы закончите с конфигурационным файлом, скомпилируйте и загрузите код!

Установить и настроить ROS

Как только вы дойдете до этого шага, инструкции будут точно такими же, как те, что подробно описаны в отличном руководстве TurtleBot3, вам нужно скрупулезно следовать

Отлично, TurtleBot 3 теперь ваш, и вы можете запускать все существующие пакеты и учебные пособия с ROS.

Хорошо, но что такое ROS?

ROS расшифровывается как операционная система роботов, поначалу это может показаться довольно сложным, но это не так, просто представьте способ связи между оборудованием (датчики и исполнительные механизмы) и программным обеспечением (алгоритмы навигации, управления, компьютерного зрения…). Например, вы можете легко поменять текущий LIDAR на другую модель без нарушения настройки, потому что каждый LIDAR публикует одно и то же сообщение LaserScan. ROS широко используется в робототехнике, Запустите свой первый пример

Эквивалент «привет, мир» для ROS заключается в дистанционном управлении роботом через удаленный компьютер. Что вы хотите сделать, так это отправить команды скорости, чтобы двигатели вращались, команды следуют за этим каналом:

  • узел turtlebot_teleop, работающий на удаленном компьютере, публикует тему "/ cmd_vel", включая сообщение Twist
  • это сообщение пересылается через сеть сообщений ROS на SBC
  • последовательный узел позволяет получить "/ cmd_vel" на Arduino
  • Arduino считывает сообщение и устанавливает угловую скорость на каждом двигателе, чтобы она соответствовала желаемой линейной и угловой скорости робота.

Эта операция проста и может быть выполнена с помощью командных строк, перечисленных выше! Если вам нужна более подробная информация, просто посмотрите видео.

[SBC]

roscore

[SBC]

rosrun rosserial_python serial_node.py _port: = / dev / ttyACM0 _baud: = 115200

[Удаленный компьютер]

экспорт TURTLEBOT3_MODEL = $ {TB3_MODEL}

roslaunch turtlebot3_teleop turtlebot3_teleop_key.launch

Идти дальше

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

roslaunch turtlebot3_bringup turtlebot3_robot.launch

вам нужно вместо этого запустить эту команду на своем SBC:

rosrun rosserial_python serial_node.py _port: = / dev / ttyACM0 _baud: = 115200

И если у вас есть LIDAR, запустите соответствующую команду на вашем SBC, в моем случае я запускаю LDS01 со следующей строкой:

roslaunch hls_lfcd_lds_driver hlds_laser.launch

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

Рекомендуемые: