[Python, Разработка робототехники, Робототехника] Сделать робота на raspberry pi, обновленный pi-tank. Часть 2. Софт
Автор
Сообщение
news_bot ®
Стаж: 6 лет 9 месяцев
Сообщений: 27286
Вторая часть полностью посвящена описанию программного обеспечения, используемого на роботе.
Так как разработанный робот (pi-tank) по большому счету рассчитан на начинающих роботостроителей, то все будет максимально упрощено, а в конце статьи будет приложен образ (image) для raspberry pi для самостоятельного дальнейшего изучения.
Небольшая оговорка. На предлагаемом образе для raspberry pi, рассчитанном на sd карту размером 8 Гб все настроено и установлено. Никаких дополнительных шагов предпринимать не требуется. Это сделано с целью упростить и облегчить часть, связанную с софтом, так как, исходя из практики, не всякий робототехник дотягивает до финиша, когда реализуется многокомпонентный проект.
Поэтому статья посвящена скорее настройке софта «под себя», однако она позволит также пролить свет на то, как все собрать и настроить с нуля.
Основа
В качестве отправной точки при разработке был взят RPi-Cam-Web-Interface. Достаточно древний, но тем не менее, не потерявший своей актуальности «фреймворк».
Как его установить подробно описано на странице проекта и сложностей вызвать:
не должно
SPL
git clone https://github.com/silvanmelchior/RPi_Cam_Web_Interface.git
cd RPi_Cam_Web_Interface
./install.sh
Есть нюансы для дистрибутива buster (о них написано на сайте проекта), но для Raspbian Stretch, который используется на роботе, все штатно.
После установки доступен web-сервер, который выводит по адресу raspberry-ip:8080/html/ картинку «по умолчанию»:
Данная картинка отличается от того, что можно наблюдать на роботе:
Как не трудно заметить, страница робота располагает стрелками для управления подвесом камеры (pan-tilt), собранном на базе серв sg-90, а также пользовательскими кнопками для управления роботом («фары», «фары выкл» и т.п.).
Назначение кнопок интерфейса интуитивно понятно.
Также на web-странице имеются вкладки для более детальной настройки параметров камеры, а также работы с системой:
Как попасть на raspberry
При загрузке raspberry становится доступна через VNC c учетными данными логин — pi, пароль — raspberry.
wi-fi сеть, к которой по умолчанию подключается — логин — boss, пароль — 1234554321.
Также можно попасть по ssh, пара логин-пароль те же.
Как все работает и где поменять под себя
Вся начинка расположена в директории /var/www/html/, а сам RPi-Cam-Web-Interface стартует из /home/pi/RPi-Cam_Web_Interface.
Управление подвесом камеры осуществляется синими стрелками на web-странице. Сам фреймворк не умеет из коробки управлять сервами. Поэтому используется дополнительный пакет
servoblaster
SPL
И здесь есть небольшой нюанс. По умолчанию servoblaster использует gpio4 и gpio17 — пины raspberry для управления подвесами (сигнальные провода серв). По счастливому стечению обстоятельств те же самые пины использует «шапка» raspberry pi — witty pi 3 mini, отвечающая за питание, графики включения и т.п. Поэтому, чтобы железо не мешало друг другу пины для серв были перенесены для целей servoblasterа.
Делается это в /etc/rc.local командой:
sudo /home/pi/PiBits/ServoBlaster/user/servod --p1pins=13,15,0,0,0,0,0,0 &
При этом 13,15 — это физические пины, а не gpio! Остальные нули — это возможность подключить еще сервы и управлять ими. То есть еще 6 серв можно подключить, обозначив пины вместо нулей.
*Какие пины задействованы servoblasterом в текущий момент можно заглянув в файл — /dev/servoblaster-cfg
Также в /etc/rc.local задаются пины raspberry для управления двигателями:
код
SPL
gpio -g mode 5 out
gpio -g mode 6 out
gpio -g mode 9 out
gpio -g mode 10 out
gpio -g mode 11 out
gpio -g mode 22 out
gpio -g mode 27 out
*В данном случае gpio22 и gpio27 это и есть те пины 13,15, которые использует servoblaster.
Как с нуля настраивается pan-tilt описано на странице проекта здесь.
Как добавляются кнопки также описано на сайте в разделе «User buttons». Чтобы добавить или изменить кнопки («фары» и т.п.) необходимо обратиться к файлу /var/www/html/
userbuttons
SPL
фары,light.sh
фары-выкл,lightoff.sh
вперед,forward.sh
назад,reverse.sh
налево,left.sh
направо,right.sh
стоп,stop.sh
м налево,left-m.sh
м направо,right-m.sh
м вперед,forward-m.sh
м назад,reverse-m.sh
Здесь строки означают наименование кнопок, а также соответствующий им скрипт управления.
Сами скрипты управления находятся в /var/www/html/macros. И, вполне возможно, данные скрипты придется править, т.к. при подключении проводов к драйверу двигателей l298n полярность может быть иной и робот поедет не в ту сторону, согласно нажатой кнопке.
Чтобы это исправить, необходимо открыть скрипт, например /var/www/html/macros/left.sh
#!/bin/bash
gpio -g write 9 0
gpio -g write 11 1
gpio -g write 6 0
gpio -g write 5 1
И попробовать комбинации замены 1 и 0 на gpio. Но как правило, можно просто поменять left.sh на forward.sh или на right.sh и т.п. в зависимости от ситуации.
Кнопки интерфейса с приставкой «м», отвечают за так называемый «малый ход»:
Это реализовано в скриптах left-m.sh и т.п. Ранее использовался pwm для управления. Однако стало понятно, что при задержках wi-fi и иных обстоятельствах расстояние, которое реализуется при нажатии на кнопку с pwm различается. Робот то уезжает слишком далеко до момента, когда нажата «стоп», то практически не реагирует, особенно, при разряжающихся батареях.
Поэтому был реализован простой подход в скрипте — подача сигнала и дальнейшее, через паузу, его гашение:
left-m.sh
SPL
#!/bin/bash
gpio -g write 9 0
gpio -g write 11 1
gpio -g write 6 0
gpio -g write 5 1
sleep 0.3
gpio -g write 9 0
gpio -g write 11 0
gpio -g write 6 0
gpio -g write 5 0
Witty pi 3 mini и управление питанием
Продукт Witty pi 3 mini был приобретен, чтобы минимизировать потери питания при работе от powerbank и увеличить общее время функционирования робота.
Ранее при выключении робота, которое реализовано на web-странице —
включить робота заново без посторонней помощи было невозможно. Были варианты с помощью внешней arduino, но все это было непросто и не эстетично.
Witty pi 3 mini не единственное решение в своем роде, и даже не первое в своей линейке. Но оно более-менее доступное и работающее из коробки.
Софт устанавливается предельно
просто
SPL
После установки может потребоваться уточняющая настройка в /home/pi/uwi/uwi.conf
текущие настройки
SPL
host='192.168.1.105';
port=8000;
web_socket_url='ws://'+host+':'+port+'/';
response_timeout=5000;
reconnect_timeout=1000;
debug=0;
wittypi3='/home/pi/wittypi';
zero2go='/home/pi/zero2go';
Далее при каждой загрузке на web странице raspberry:8000 (127.0.0.1:8000) будет доступен
web-интерфейс с настройками:
Первая вкладка — это просто еще один способ управлять gpio raspberry pi —
вторая вкладка — это непосредственно настройки witty pi —
На температурный датчик можно не обращать внимание, т.к. его точность сомнительна.
Можно настраивать прямо с web-страницы, но так же можно и с помощью скрипта:
/home/pi/wittypi/wittyPi.sh. При запуске скрипта, он выводит то же самое, что доступно на web-странице:
>>> Current temperature: 28.75°C / 83.75°F
>>> Your system time is: Sat 03 Apr 2021 16:20:47 MSK
>>> Your RTC time is: Sat 03 Apr 2021 16:20:48 MSK
>>> Vin=4.73V, Vout=4.68V, Iout=1.13A
Now you can:
1. Write system time to RTC
2. Write RTC time to system
3. Synchronize time
4. Schedule next shutdown
5. Schedule next startup
6. Choose schedule script
7. Set low voltage threshold
8. Set recovery voltage threshold
9. View/change other settings...
10. Reset data...
11. Exit
Здесь необходимо:
- синхронизировать время на witty pi c системными часами raspberry (3. Synchronize time)
- записать это время в rtc (1. Write system time to RTC)
- далее поработать с пробуждением либо засыпанием, но проще сразу выбрать какой-нибудь
- скрипт
6. Choose schedule script
SPL
[1] 7:00_on_7:30_off_21:00_on_21:30_off.wpi
[2] on_10m_every_2h.wpi
[3] on_1h_every_2d.wpi
[4] on_30m_everyday_but_weekend.wpi
[5] on_5m_every_20m.wpi
[6] turn_on_every_hour.wpi
Например [5], просыпаться на 5 минут каждые 20 минут.
После выбора скрипта соответствующие интервалы сна будут сразу обозначены:
— обязательно заглянуть в другие настройки (9. View/change other settings...)
Здесь необходимо настроить [5] Dummy load duration [0] — это паразитные импульсы для powerbankа, не дающие ему уснуть. Так как большинство powerbankов снимают питание при минимизированной нагрузке. Диапазон значений 0-255.
Все остальные настройки можно не трогать.
Witty pi предполагает также возможность контроля напряжения питания и корректное отключение при падении, а также включение при изменившихся условиях.
Доступна также более гибкая регулировка в части создания своих собственных графиков включения и выключения — скриптогенератор:
Об этом подробно написано в инструкции.
Сон pi-tanka
SPL
Пока все. Если что-то забыто или непонятно — пишите.
Образ для raspberry pi — скачать.
===========
Источник:
habr.com
===========
Похожие новости:
- [Разработка на Raspberry Pi, Компьютерное железо] Умелец показал, как на треть уменьшить Raspberry Pi Pico обычным лобзиком
- [Python, Программирование, Учебный процесс в IT, Data Engineering] Из филолога в Python-разработчики: как переучиться и чего ждать от новой профессии
- [Python, JavaScript, Программирование, HTML] Python & EEL. Делаем просто на Python’е и красиво на JS
- [Python, Визуализация данных] Открыта программа раннего доступа к JetBrains DataSpell — нашей новой IDE для Data Science (перевод)
- [Алгоритмы] OpenCV ищет студентов для Google Summer of Code-2021
- [Развитие стартапа, Космонавтика, DIY или Сделай сам] Создание кубсата: часть вторая. Система питания (ТЗ)
- [Разработка робототехники, Робототехника, Здоровье, Транспорт] В Швейцарии роботов начали использовать для УФ-обработки самолетов
- [Python, Управление персоналом, Карьера в IT-индустрии] Собеседование в Яндекс: театр абсурда :/
- [Информационная безопасность, Гаджеты, Компьютерное железо, DIY или Сделай сам, Научная фантастика] Как взломать систему безопасности с помощью датчика температуры DHT11, а все произошло из-за птичек и вышек 5G
- [Python, MongoDB, Maps API] Аспекты учета и поиска геоинформационных объектов с задействованием MongoDB
Теги для поиска: #_python, #_razrabotka_robototehniki (Разработка робототехники), #_robototehnika (Робототехника), #_raspberry_pi, #_robototehnika_svoimi_rukami (робототехника своими руками), #_diy, #_rasberry_pi, #_razrabotka_robota (разработка робота), #_python, #_razrabotka_robototehniki (
Разработка робототехники
), #_robototehnika (
Робототехника
)
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 15:15
Часовой пояс: UTC + 5
Автор | Сообщение |
---|---|
news_bot ®
Стаж: 6 лет 9 месяцев |
|
Вторая часть полностью посвящена описанию программного обеспечения, используемого на роботе. Так как разработанный робот (pi-tank) по большому счету рассчитан на начинающих роботостроителей, то все будет максимально упрощено, а в конце статьи будет приложен образ (image) для raspberry pi для самостоятельного дальнейшего изучения. Небольшая оговорка. На предлагаемом образе для raspberry pi, рассчитанном на sd карту размером 8 Гб все настроено и установлено. Никаких дополнительных шагов предпринимать не требуется. Это сделано с целью упростить и облегчить часть, связанную с софтом, так как, исходя из практики, не всякий робототехник дотягивает до финиша, когда реализуется многокомпонентный проект. Поэтому статья посвящена скорее настройке софта «под себя», однако она позволит также пролить свет на то, как все собрать и настроить с нуля. Основа В качестве отправной точки при разработке был взят RPi-Cam-Web-Interface. Достаточно древний, но тем не менее, не потерявший своей актуальности «фреймворк». Как его установить подробно описано на странице проекта и сложностей вызвать: не должноSPLgit clone https://github.com/silvanmelchior/RPi_Cam_Web_Interface.git
cd RPi_Cam_Web_Interface ./install.sh Есть нюансы для дистрибутива buster (о них написано на сайте проекта), но для Raspbian Stretch, который используется на роботе, все штатно. После установки доступен web-сервер, который выводит по адресу raspberry-ip:8080/html/ картинку «по умолчанию»: Данная картинка отличается от того, что можно наблюдать на роботе: Как не трудно заметить, страница робота располагает стрелками для управления подвесом камеры (pan-tilt), собранном на базе серв sg-90, а также пользовательскими кнопками для управления роботом («фары», «фары выкл» и т.п.). Назначение кнопок интерфейса интуитивно понятно. Также на web-странице имеются вкладки для более детальной настройки параметров камеры, а также работы с системой: Как попасть на raspberry При загрузке raspberry становится доступна через VNC c учетными данными логин — pi, пароль — raspberry. wi-fi сеть, к которой по умолчанию подключается — логин — boss, пароль — 1234554321. Также можно попасть по ssh, пара логин-пароль те же. Как все работает и где поменять под себя Вся начинка расположена в директории /var/www/html/, а сам RPi-Cam-Web-Interface стартует из /home/pi/RPi-Cam_Web_Interface. Управление подвесом камеры осуществляется синими стрелками на web-странице. Сам фреймворк не умеет из коробки управлять сервами. Поэтому используется дополнительный пакет servoblasterSPLИ здесь есть небольшой нюанс. По умолчанию servoblaster использует gpio4 и gpio17 — пины raspberry для управления подвесами (сигнальные провода серв). По счастливому стечению обстоятельств те же самые пины использует «шапка» raspberry pi — witty pi 3 mini, отвечающая за питание, графики включения и т.п. Поэтому, чтобы железо не мешало друг другу пины для серв были перенесены для целей servoblasterа. Делается это в /etc/rc.local командой: sudo /home/pi/PiBits/ServoBlaster/user/servod --p1pins=13,15,0,0,0,0,0,0 &
При этом 13,15 — это физические пины, а не gpio! Остальные нули — это возможность подключить еще сервы и управлять ими. То есть еще 6 серв можно подключить, обозначив пины вместо нулей. *Какие пины задействованы servoblasterом в текущий момент можно заглянув в файл — /dev/servoblaster-cfg Также в /etc/rc.local задаются пины raspberry для управления двигателями: кодSPLgpio -g mode 5 out
gpio -g mode 6 out gpio -g mode 9 out gpio -g mode 10 out gpio -g mode 11 out gpio -g mode 22 out gpio -g mode 27 out *В данном случае gpio22 и gpio27 это и есть те пины 13,15, которые использует servoblaster. Как с нуля настраивается pan-tilt описано на странице проекта здесь. Как добавляются кнопки также описано на сайте в разделе «User buttons». Чтобы добавить или изменить кнопки («фары» и т.п.) необходимо обратиться к файлу /var/www/html/ userbuttonsSPLфары,light.sh
фары-выкл,lightoff.sh вперед,forward.sh назад,reverse.sh налево,left.sh направо,right.sh стоп,stop.sh м налево,left-m.sh м направо,right-m.sh м вперед,forward-m.sh м назад,reverse-m.sh Здесь строки означают наименование кнопок, а также соответствующий им скрипт управления. Сами скрипты управления находятся в /var/www/html/macros. И, вполне возможно, данные скрипты придется править, т.к. при подключении проводов к драйверу двигателей l298n полярность может быть иной и робот поедет не в ту сторону, согласно нажатой кнопке. Чтобы это исправить, необходимо открыть скрипт, например /var/www/html/macros/left.sh #!/bin/bash gpio -g write 9 0 gpio -g write 11 1 gpio -g write 6 0 gpio -g write 5 1 И попробовать комбинации замены 1 и 0 на gpio. Но как правило, можно просто поменять left.sh на forward.sh или на right.sh и т.п. в зависимости от ситуации. Кнопки интерфейса с приставкой «м», отвечают за так называемый «малый ход»: Это реализовано в скриптах left-m.sh и т.п. Ранее использовался pwm для управления. Однако стало понятно, что при задержках wi-fi и иных обстоятельствах расстояние, которое реализуется при нажатии на кнопку с pwm различается. Робот то уезжает слишком далеко до момента, когда нажата «стоп», то практически не реагирует, особенно, при разряжающихся батареях. Поэтому был реализован простой подход в скрипте — подача сигнала и дальнейшее, через паузу, его гашение: left-m.shSPL#!/bin/bash
gpio -g write 9 0 gpio -g write 11 1 gpio -g write 6 0 gpio -g write 5 1 sleep 0.3 gpio -g write 9 0 gpio -g write 11 0 gpio -g write 6 0 gpio -g write 5 0 Witty pi 3 mini и управление питанием Продукт Witty pi 3 mini был приобретен, чтобы минимизировать потери питания при работе от powerbank и увеличить общее время функционирования робота. Ранее при выключении робота, которое реализовано на web-странице — включить робота заново без посторонней помощи было невозможно. Были варианты с помощью внешней arduino, но все это было непросто и не эстетично. Witty pi 3 mini не единственное решение в своем роде, и даже не первое в своей линейке. Но оно более-менее доступное и работающее из коробки. Софт устанавливается предельно простоSPLПосле установки может потребоваться уточняющая настройка в /home/pi/uwi/uwi.conf текущие настройкиSPLhost='192.168.1.105';
port=8000; web_socket_url='ws://'+host+':'+port+'/'; response_timeout=5000; reconnect_timeout=1000; debug=0; wittypi3='/home/pi/wittypi'; zero2go='/home/pi/zero2go'; Далее при каждой загрузке на web странице raspberry:8000 (127.0.0.1:8000) будет доступен web-интерфейс с настройками: Первая вкладка — это просто еще один способ управлять gpio raspberry pi — вторая вкладка — это непосредственно настройки witty pi — На температурный датчик можно не обращать внимание, т.к. его точность сомнительна. Можно настраивать прямо с web-страницы, но так же можно и с помощью скрипта: /home/pi/wittypi/wittyPi.sh. При запуске скрипта, он выводит то же самое, что доступно на web-странице: >>> Current temperature: 28.75°C / 83.75°F >>> Your system time is: Sat 03 Apr 2021 16:20:47 MSK >>> Your RTC time is: Sat 03 Apr 2021 16:20:48 MSK >>> Vin=4.73V, Vout=4.68V, Iout=1.13A Now you can: 1. Write system time to RTC 2. Write RTC time to system 3. Synchronize time 4. Schedule next shutdown 5. Schedule next startup 6. Choose schedule script 7. Set low voltage threshold 8. Set recovery voltage threshold 9. View/change other settings... 10. Reset data... 11. Exit Здесь необходимо:
После выбора скрипта соответствующие интервалы сна будут сразу обозначены: — обязательно заглянуть в другие настройки (9. View/change other settings...) Здесь необходимо настроить [5] Dummy load duration [0] — это паразитные импульсы для powerbankа, не дающие ему уснуть. Так как большинство powerbankов снимают питание при минимизированной нагрузке. Диапазон значений 0-255. Все остальные настройки можно не трогать. Witty pi предполагает также возможность контроля напряжения питания и корректное отключение при падении, а также включение при изменившихся условиях. Доступна также более гибкая регулировка в части создания своих собственных графиков включения и выключения — скриптогенератор: Об этом подробно написано в инструкции. Сон pi-tankaSPLПока все. Если что-то забыто или непонятно — пишите. Образ для raspberry pi — скачать. =========== Источник: habr.com =========== Похожие новости:
Разработка робототехники ), #_robototehnika ( Робототехника ) |
|
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы
Текущее время: 22-Ноя 15:15
Часовой пояс: UTC + 5