Python raspberry pi robot

Робот на RaspberryPi, Arduino и RaspiCam + OpenCV. Часть 1 Обзорная

image

Очень часто на хабре появляются статьи о том как использовать Raspberry Pi как медиацентр, передвижную видеокамеру, удаленную web камеру и… собственно все. Очень странно, что в такой большой IT тусовке — довольно мало информации о том — как его программировать и использовать одноплатный компьютер там, где он действительно довольно полезен — во всяких встраиваемых системах, где есть ограничения по размеру и стоимости, но также есть потребность в производительности. В нескольких статьях постараюсь описать на примере создания мобильного колесного робота с компьютерным зрением — как можно использовать малинку для создания роботов(штук с интеллектом на борту, а не управляемых с андроида машинок с веб камерой).

Введение

image

Всегда было интересно программировать что то механическое — ощущаешь себя Богом(как и большинство программистов) — вдыхаешь в кучу деталей душу. Наверное все помнят ту детскую радость от первого мигания светодиодом, шевелящегося сервопривода и т.д. — когда сделал что то, что можно потрогать, что живет, двигается, а не сайтик на php.
Во многих своих творениях, а тем более роботах — человек всегда старается повторить самого себя, или часть своих функций. 80% информации об окружающем мире мы получаем через зрение — так что компьютерное зрение, на мой взгляд, одна из основополагающих областей знания в робототехнике.

Читайте также:  Приоритеты селекторов

Изучение ее я начинал с чтения академических трудов по алгоритмам параллельно с освоением библиотеки компьютерного зрения OpenCV на C++(в случае с Raspberry — Python)- знание принципов работы алгоритмов поможет Вам оценить сложность и выполнимость задачи, еще до начала ее выполнения, а также оптимизировать алгоритмы в критичных местах. Даже если Вы будете пользоваться в основном библиотечными функциями — они хорошо оптимизированы, и вряд ли вы с нуля напишете лучше — Вы сможете оптимизировать какие то параметры, которые незначительно влияют в конкретном случае на решение вашей задачи, но значительно влияют на скорость ее решения — в общем возвращаясь к холивару — «нужна ли программисту математика» — В данном случае нужна, так что советую напрячь немного извилины и разбираться хотя бы поверхностно в работе алгоритмов.

Также нелишне будет хотя бы поверхностно изучить Теорию Автоматического Управления — вместо расписывания ее возможностей — предлагаю просто посмотреть следующее видео (BTW — половина его команды — русские)

Составные части робота

image

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

Механика

Механическая основа робота — двухколесная с дифференциальным приводом — классическая, в общем то, для первых робототехнических экспериментов — у нее 2 независимых колеса и ее движение контролируется исключительно скоростями и направлением их вращения (подобно винтам квадрокоптера). Кроме собственно колес имеется шаровая/колесная опора, в продвинутых системах — энкодеры для обратной связи и контроля текущей скорости двигателей, что позволяет более эффективно управлять двигателями.

image

Контроллер двигателей

В качестве контроллера двигателей можно использовать любой микроконтроллер, у меня используется Arduino nano — потому что просто попалось под руку.
Возможно возникнет вопрос — почему бы не управлять напрямую с Raspberry? Дело в том, что у оперционной системы квант времени гораздо больше, чем у микроконтроллера, кроме того нет аппаратных ШИМов, плюс, если мы захотим улучшить управление двигателями при помощи обратной связи и Теории Управления — это потребует вычислительных затрат и более быстрой реакции — поэтому управляющая двигателями часть и мозг робота разделены — arduino просто получает по UART команду — с какими скоростями и направлениями мозг бы хотел, чтобы крутились двигатели — как это будет достигаться — просто включением ШИМа с нужной скважностью или хитрым управлением, когда вначале мы подаем напряжение больше уставки, раскручивая двигатель, а потом выравниваем — таким образом ускоряя раскрутку двигателя до нужной скорости — все это уже заботы контроллера двигателей, а не Raspberry — поскольку это вообще говоря задача гораздо более жесткого времени — на порядок — два меньшего, чем позволяет Raspberry, да и вообще подобные системы.

Драйвер двигателей

Одной лишь ардуинки недостаточно, чтобы двигатели закрутились — ток, отдаваемый ножкой слишком мал — если мы на маленький выходной транзистор ножки контроллера посадим обмотку двигателя, требующего ток порядка ампер — то просто устроим КЗ — замкнем ключ сам на себя и он скорей всего просто выйдет из строя — поэтому нужен более мощный ключ, позволяющий пропускать через себя большой ток — если нам требуется крутить двигатель в одном направлении — в общем то нам достаточно одного транзистора, но если мы хотим крутить в разных — нам их уже потребуется 4 — такая схема называется H — мост — замыкая диагональные ключи при закрытых других диагональных — мы можем менять направление тока в двигателе.
И такая схема необходима для каждого колеса. К счастью в наше время нет нужды ее собирать — она реализована в виде интегральных микросхем, коих великое множество — так что, подойдет любая, способная управлять током, нужным вашему двигателю. У меня используется вот такой двухканальный от pololu:

Также имеется великое множество всевозможных шилдов для ардуин — при помощи гугла вы их легко найдете по запросу «arduino motor driver». Схему подключения также обычно предоставляет производитель или пользователи всевозможных форумов — ищущий да обрящет. У микросхем 2 питания — одно — которое подается на двигатели от мощного источника тока — например Li-Pol батарейки 7.2В, другое — питание входного каскада логики — ардуиновские 5В, также имеется входы, контролирующие направление вращения каждого канала и вход Enable — подавая на который ШИМ сигнал мы можем регулировать скорость вращения двигателя. Могут быть различные конфигурации в зависимости от шилда, но основные выводы — такие.

В общем то соединив таким образом Arduino, драйвер двигателей, двигатели и батарейку(или просто какой нибудь источник тока на длинном проводе) можете уже начинать играться с управлением моторами. Для получения команд от Raspberry потребуется реализовать прием строчки по UART и ее парсинг — протокол можете тут придумать какой вашей душе угодно. вышеперечисленное — основные части практически любого колесного робота — далее уже начинаются варианты — можете вообще забить на компьютерное зрение и сделать робота чисто на Arduino, который, например, ездит по линии, объезжает препятствия при помощи датчиков расстояния и т.п.

Главный контроллер

image

Моя же задача — сделать несколько более интеллектуальную платформу для ислледования компьютерного зрения и теории управления — так что следующим элементом системы будет являться одноплатный компьютер Raspberry Pi B+ в виду его невысокой цены, распространенности и доступности информации. В сборку Raspbian включен Python интерпретатор — так что писал программу для робота я на нем

Камера

image

В качестве камеры можно в общем то использовать любую вебку(что я первое время и делал) — у меня используется Raspicam — она небольшая, легкая, есть отдельный порт для ее подключения, широкий угол обзора хороший драйвер и 90 фпс в VGA разрешении.

Средство отладки

Для отладки я использую USB Wifi свисток, подключаясь к Raspberry через удаленный рабочий стол по SSH. Тоже в общем то можно использовать любой, для первоначальной настройки вообще можно использовать Ethernet кабель и SSH

Система питания

Аккумулятор — литий полимерный от 2Ач на 7.2В номинального напряжения + зарядка.

Понижающий DC-DC преобразователь — батарея наша выдает от 8.4 до 6В — это напряжение мы можем напрямую подавать на двигатели через микросхему драйвера, но для питания Raspberry и Arduino требуется 5В источник питания — по документации Raspberry Pi требуется источник 5В, способный отдавать не менее 800мА — можно конечно понизить напряжение с батарейного до 5В при помощи линейного стабилизатора, но при таких токах он будет греться и неэффективно использовать заряд батареи, так что я рекомендую использовать импульсный понижающий DC-DC преобразователь — от него у меня питается и Raspberry и Arduino

Собственно фото моего нанотехнологичного робота и пара видео его езды по различным соревновательным трекам в качестве демонстрации:

Линия профи(прерывистая)

В общем обзорная статья закончена — рассказал об основных используемых инструментах, далее уже будет более конкретно, а именно:
1.Введение
2.Первоначальная настройка Raspberry Pi + отладка по Wifi
3.Начало работы с OpenCV, Raspicam на Python
4.Управление роботом, ПИД регулятор, примеры
Вопросы, замечания, дополнения и пожелания по следующим статьям оставляйте в комментариях, очепятки и прочее — в личку

Источник

Building robots with Raspberry Pi and Python

The goal of this tutorial is to help you begin programming with Python to control your Arduino robots with a Raspberry PI. We will go over the basics like installation and some simple examples to control your robot from a Python GUI from Raspberry PI.

Step 1: Parts list

In this tutorial we are going to use the following items :

1. Raspberry PI ( with monitor, USB hub, keyboard, mouse,and WIFI Dongle)
http://www.zagrosrobotics.com/shop/item.aspx?itemid=895

Building robots with Raspberry Pi and Python

Now when it comes to robot bases there are many kits available in size and complexity. In this tutorial I have decided on using this setup with a 12v battery that will give us long run times and high load capacity. And a power distribution board with regulated 12v and 5v power outputs that makes it easy to deliver power to our robot.

Step 2: Introduction to Python

Python is a general purpose interpreted, interactive, object-oriented, high-level programming language that was created by Guido van Rossum in the late eighties. Python allows users to write code with clear, readable syntax with a growing number of support libraries for various tasks that is open source and has a community based around its development. Here are some helpful links that might come in handy when starting out.

Step 3: Python Installation and setup

In order to get our Python programs running we need to ensure first that Python is installed on our system along with the proper dependencies and verify the version we are using. Now If you are using ” 2013-02-09-wheezy-raspbian.img ” image or later on your Raspberry Pi, Python should be pre-installed.

We can check our python version by using the terminal to verify.

Copy and paste in the LXterm

For the examples we are going to go over it is recommended that you use Python versions 2.6 or later. If Python is not installed on your system you can use apt-get granted your Raspberry Pi is connected to the Internet.

Copy and paste in the LXterm
sudo apt-get install python2.6
Install some of the the dependencies

sudo apt-get install python-serial

Building robots with Raspberry Pi and Python

Copy paste in the LXterm
sudo apt-get install python python-tk idle python-pmw python-imaging
Next download and place the following files to your pi folder.
scanports-arduino.py
term.py
Buttons.py

Now we have to make the programs executable with a chmod command
Copy and paste in LXterm

sudo chmod +x /home/pi/scanports-arduino.py
sudo chmod +x /home/pi/term.py
sudo chmod +x /home/pi/Buttons.py

The programs should now be executable and we can run them by double clicking them or via terminal. The last step is to download and load the sketch with the Arduino IDE.
Arduino Robot Base Sketch
If you are unfamiliar with Arduino and its IDE you can read up on it here.
Arduino
And lastly refer to the wiring diagram above for setting up the power connections to the robot base.
For more detail: Building robots with Raspberry Pi and Python

Источник

Оцените статью