You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
alphabot2/README.md

374 lines
25 KiB

4 years ago
# AlphaBot2
# Изучаем робота AlphaBot2-Pi
4 years ago
4 years ago
## Сервис раздел
4 years ago
# TODO ТУТ все про 3й питон, нужно это указать, или что-то придумать, а то парашно получается
4 years ago
- [Страница](https://www.waveshare.com/wiki/AlphaBot2-Pi) с роботом
- [Схема](https://www.waveshare.com/w/upload/9/91/AlphaBot2-Base-Schematic.pdf) части с мотороми и аккумами и контроллером заряда (НИЗ)
- [Схема](https://www.waveshare.com/w/upload/7/72/AlphaBot2-Pi-Schematic.pdf) части с креплением для малины (ВЕРХ)
- User [Manual](https://www.waveshare.com/w/upload/1/1f/Alphabot2-user-manual-en.pdf)
- Набор [даташитов](https://www.waveshare.com/wiki/AlphaBot2_Datasheet) с компонентами на плате
- Примеры ```wget https://www.waveshare.com/w/upload/e/ee/AlphaBot2-Demo.7z```
4 years ago
Примеры:
```bash
cd
wget https://www.waveshare.com/w/upload/7/74/AlphaBot2.tar.gz
tar zxvf AlphaBot2.tar.gz
```
4 years ago
Для того чтобы смонтировать директорию с rpi себе на комп нужно следующее:
```bash
mkdir -p tmp/server
sshfs pi@raspberrypi:/home/pi/AlphaBot2 tmp/server
code tmp/server
```
## Знакомство с роботом AlphaBot2-Pi
4 years ago
![alphabot2-pi](common/alphabot2-pi-3.jpg)
Робот AlphaBot2-Pi состоит из нескольких основных частей:
* База-шасси
* Плата-адаптер
* Одноплатный компьютер Raspberry-Pi
* Камера с поворотным кронштейном
* Ультразвуковой дальномер
### База-шасси
![abchassis](common/AlphaBot2-Base-intro.jpg)
1. Интерфейс управления шасси для подключения платы-адаптера.
2. Интерфейс для подключение ультразвукового дальномера.
3. Светодиодные индикаторы объезда препятствий.
4. Шаровая опора.
5. ST188 - инфракрасный фотоэлектрический датчик для объезда препятствий.
6. ITR20001/T - инфракрасный фотоэлектрический датчик для обнаружения линии.
7. Потенциометр для настройки дистанции объезда препятствий.
8. TB6612FNG - драйвер для моторов на Н-мосте.
9. LM393 - компаратор напряжения.
10. N20 - мотор-редуктор, 1:30, 6V/600RPM.
11. Колеса диаметром 42мм, шириной 19мм.
12. Переключатель питания.
13. Разъем для двух батарей 14500.
14. WS2812B - RGB светодиоды.
15. Индикатор зарядки батареи.
16. Порт зарядки USB 5V.
17. Индикатор питания.
![abadapterboard](common/AlphaBot2-Pi-intro.jpg)
1. Интерфейс управления шасси для подключения к шасси.
2. Интерфейс для подключения Raspberry Pi.
3. Интерфейс подключения сервомоторов.
4. Порт micro USB с USB-UART преобразователем для подключения к Raspberry Pi по UART.
5. LM2596 DC-DC преобразователь.
6. TLC1543 - 10-битный аналогово0цифровой преобразователь для подключения аналоговых датчиков к Raspberry Pi.
7. PCA9685 - 16-канальный 12-битный ШИМ-модуль для работы с сервомоторами.
8. CP2102 - USB-UART преобразователь.
9. Джостик.
10. Инфракрасный приемник.
11. Пьезодинамик (buzzer).
## Сборка робота
Оригинальная инструкция по сборке тут (https://www.waveshare.com/w/upload/1/1a/Alphabot2-pi-assembly-diagram-en.pdf), а так же в папке docs (см. Alphabot2-pi-assembly-diagram-en.pdf).
### Сборка шасси робота
Установите две батареи 14500 **(A)** на базу-шасси AlphaBot2, восьмисантиметровый кабель FC-20P **(B)** вставьте в соответствующий разъем шасси. Вкрутите стойки **(C&D)**.
![chassis](assembly/base_chassis.png)
### Сборка стойки для камеры
![camera1](assembly/camera1.png)
Поместите сервопривод между стойками **(f)** и **(g)** и скрепите винтами (7). Обратите внимание на то,чтобы ротор сервопривода был установлен в правильном направлении.
![camera2](assembly/camera2.png)
Установите насадку **(c)** на сервопривод в специальную выемку в корпусе. Если она не подходит **(g)** под выемку в корпусе - слегка подрежте ее. Закрепите с помощью винтов **(5)**. Далее установите крестообразную насадку **(b)** в основание стойки. Также при необходимости подрежте. Закрутите винты **(5)** с задней стороны основания стойки.
![camera3](assembly/camera3.png)
Вставьте в крестообразную насадку сервопривод и закрепите винтом **(1)**. Второй, еще никуда не установленный, сервопривод прикрепите двумя винтами **(7)** к подставке для камеры **(e)** как показано на рисунке ниже. Установите подставку под камеру **(e)** и сервопривод на собранную ранее стойку **(f&g)** и прикрутите насадку к сервоприводу с помощью винте **(1)**.
![camera4](assembly/camera4.png)
Вставьте двадцатипяти пиновый FFC кабель в соответствующий разъем на модуле камеры для Raspberry Pi и установите модуль в подставку **(e)**.
![camera5](assembly/camera5.png)
### Финальная сборка робота
Закрепите стойку для камеры на плате-адаптере с помощью винтов и гаек **(I&J)**, как показано на рисунке ниже. Проведите кабели от сервприводов через отверстие в нижней части платы-адаптера и вставьте коннектор в соответствующие пины на обратной стороне платы-адаптора. Через то же отверстие проведите шлейф от камеры и вставьте его в соответствующий разъем на Raspberry Pi.
![final1](assembly/final1.png)
Соедините Raspberry Pi и плату-адаптер с помощью стоек для печатных плат **(I&J)**.
![final2](assembly/final2.png)
Вставьте кабель FC-20P, установленный на шасси робота, в плату адаптер. Обратите внимание, что коннектор должен вставляться в разъем в соответствие с шелкографией на печатной плате!
![final3](assembly/final3.png)
Установите ультразвуковой дальномер в соответствующий разъем на шасси робота **(G)**. Соедините плату-адаптер с Raspberry Pi с помощью винтов **(I)**. Соедините шасси робота и плату-адаптер с помощью винтов **(F)**.
![final4](assembly/final4.png)
***ОВНИМАНИЕ! РОБОТ МОЖНО СТАВИТЬ НА ЗАРЯДКУ ТОЛЬКО КОГДА ОН ВЫКЛЮЧЕН! ВО ВРЕМЯ ЗАРЯДКИ ТАКЖЕ НЕЛЬЗЯ ПОДКЛЮЧАТЬСЯ К RASPBERRY PI!***
4 years ago
## Установка системы и минимальная настройка.
В этом разделе мы рассмотрим процесс установки операционной системы на Raspberry Pi и рассмотрим способы взаимодействия с ней в операционной системе linux и windows. Предполагается что изучающие это руководство владеют linux консолью, и язаком программирования python. Для того чтобы запустить linux на Raspberry Pi необходимо выполнить следующие действия:
4 years ago
1. Скачать отсюда (https://www.raspberrypi.org/software/operating-systems/#raspberry-pi-os-32-bit) образ ```Raspberry Pi OS ```. Я рекомендую использовать ```Raspberry Pi OS with desktop and recommended software```, этот образ будет содержать большенство вещей необходимых нам в будующем.
4 years ago
2. Распокавать архив, в Windows можно использовать программу Winrar.
4 years ago
3. Записать образ на карту памяти *(обратите внимание, что объем памяти должен быть больше 4Gb)*. Создатели Raspberry Pi советуют использовать для этого программу Etcher (https://www.balena.io/etcher/). Скачиваем ее и устанавливаем себе на компьютер. Нас встретит простой интерфейс. Сначала нужно выбрать образ, потом выбрать карту память на которую мы хотим его записать, и после согласится на запись. Все ваши данные будут удалены с данной карты. Цифрой 1 на изображении указано, где выбирать образ, 2 - где выбирать карту памяти, 3 - начало прошивки.
4 years ago
![raspb1](raspb/rasp5.png)
4 years ago
Далее необходимо подождать пока не закончится загрузка на карту памяти.
![raspb2](raspb/rasp2.png)
4 years ago
После чего необходимо дождатся завершения проверки правильности записанных данных на флеш карту.
![raspb3](raspb/rasp3.png)
![raspb4](raspb/rasp4.png)
4 years ago
4. Для того, чтобы избавиться от необходимости работать с Raspberry Pi, подключая к ней монитор, клавиатуру и мышку, мы будем использовать подключение с удаленного компьютера по ssh. Для этого нам нужно будет прописать некоторые настройки Wi-Fi.
4 years ago
На карте памяти, на которую был записан образ операционной системы, теперь появилась папка boot.
4 years ago
![raspb6](raspb/rasp6.png)
4 years ago
Туда нужно добавить 2 файла:
* ssh.txt - писать в него ничего не нужно, он необходим для того чтобы мы могли подключится к малинке используя сервис ssh ( https://ru.wikipedia.org/wiki/SSH)
* wpa_supplicant.conf - тут необходимо приписать параметры вашей Wi-Fi сети в следующем формате:
4 years ago
```
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
ssid="НАЗВАНИЕ ТОЧКИ ДОСТУПА WiFi"
psk="ПАРОЛЬ WiFi"
key_mgmt=WPA-PSK
}
```
При создании данного файла система спросит вас:
![raspb7](raspb/rasp7.png)
4 years ago
Соглашайтесь. Нажмите правой кнопкой мышки на файл ```wpa_supplicant.conf```, выберите ```Открыть с помощью```, и откройте с помощью блокнота. Добавьте в открывшийся документ строки, указанные выше, заменив название точки доступа и пароль на свои. Сохраните. Содержимое этого файла будет автоматически перенесено в ```/etc/wpa_supplicant/wpa_supplicant.conf``` при старте системы.
4 years ago
5. Запуск робота. Далее извлекаем карту памяти из компьютера, предварительно воспользовавшись функцией безопасного извлечения, после чего вставляем карту в разъем на Rasbperry Pi, установленную в роботе. ``` ВНИМАНИЕ! Для того, чтобы на этом этапе не возникло проблем, убедитесь в том, что аккумуляторы заряжены. Это очень важно, так как отключение питания во время загрузки системы может привести к неправильной настройке системы. Во время работы с Raspberry Pi робот не должен заряжаться!```
Переводим ```PWR SWITCH``` находящийся снизу робота из состояния ```OFF``` в ```ON``` для включения робота, после чего ждем около 3х минут чтобы система успела применить все настройки. Для того, чтобы на этом этапе не возникло проблем убедитесь что аккумуляторы заряжены, это очень важно потомучто робот в неактивном состоянии когда находится на зарядке.
4 years ago
4 years ago
6. Перейдем к подключению к Raspberry Pi. Для этого воспользуемся бесплатной версией программы MobaXterm, которая позволит нам совершить подключение gj практически любому протоколу. (Скачать можно здесь: https://mobaxterm.mobatek.net/). Установите программу на свой компьютер. Для подключения к Raspberry Pi по ssh сделайте следующее:
4 years ago
Нажамите на кнопку Session в левом верхнем углу программы, выбирите пункт ```New session```:
4 years ago
![rasp8](raspb/rasp8.png)
4 years ago
Далее в появившимся окне установите параметры в соответствии с изображением:
4 years ago
![rasp9](raspb/rasp9.png)
4 years ago
Иными словами вы должны подключится по ssh к хосту с названием raspberrypi и именем пользователя pi. Далее вам предложат ввести пароль:
4 years ago
![rasp10](raspb/rasp10.png)
4 years ago
Стандартный пароль для Raspberry Pi OS - ```raspberry```, введите его. После чего вы можете сохранить данный пароль в системе, если вам будет так удобнее. После чего система предложет вам ввести команды на исполнение:
4 years ago
![rasp11](raspb/rasp11.png)
Если вы видете такой же вывод, что и на изображении выше - значит все заработало. Если нет, это может свидетельствовать о проблемах с сетью. Первым делом подключитесь к роутеру (обычно он находится на адресе http://192.168.0.1/ или http://192.168.1.1/) и посмотрите список подключенных устройств.
4 years ago
Если это произошло значит все хорошо и все работает если нет, это свидетельствует о проблемах с сетью. Первое что можно сделать это подключится к роутеру (обычно он находится на адресе http://192.168.0.1/или http://192.168.1.1/) и посмотреть там в списках клиентов расбери. На моем роутере это выглядит так:
![rasp12](raspb/rasp12.png)
Оттуда можно узнать IP адрес. Далее повторите действия пункта 6, только вместо хоста с названием raspberrypi используя полученный IP. Если это тоже не работает остается только одно - отсоеденить Raspberry Pi от робота, подключить к монитору и с помощью клавиатуры и мыши через графический интерфейс поключить Raspberry Pi к сети Wi-Fi.
4 years ago
![rasp13](raspb/rasp13.png)
4 years ago
## Настройка робота.
Для работы с коботом необходимо выполнить ряд настроек. Для начала их нужно будет сделать в специальной консольной программе для конфигурирования Raspberry Pi - ```raspi-config```, Для чего используем следующую команду:
4 years ago
```bash
sudo raspi-config
```
![robot1](robot/robot1.png)
После чего вы увидене следующее меню:
4 years ago
![robot2](robot/robot2.png)
4 years ago
*Если вам будет удобнее, терминад можно открепить от программы ModaXterm и перенести в любую область рабочего стола - просто нажмите левой кнопкой мыши на вкладку с терминалом и перетащите в свободную область рабочего стола.*
4 years ago
Навигация в данном режиме очень проста. Стрелками вверх и вниз мы выбираем нужный пункт меню, enter позволяект пройти в подпункты выбранного пункта или выбрать конкретную настройку. Стрелки вправо и влево позволяют выбрать один из пунктов, находящихся внизу (Select и Finish на изображении выше). Ниже перечислено, какие настройки необходимо сделать:
4 years ago
```bash
Interface Options -> Camera -> Yes -> OK
4 years ago
Interface Options -> SPI -> Yes -> OK
Interface Options -> I2C -> Yes -> OK
Interface Options -> Serial Port -> No -> Yes -> OK
```
После завершения настройки выберите finish и система предложет вам перезарузить Raspberry Pi, на что соглашаемся. Подключится можно будет способом описанным выше, либо нажать кнопку R и MobaXterm автоматически постарается переподключится к роботу.
4 years ago
После того как система загрузится установите пакеты, необходимые для работы с перефирией робота. Для этого сначала обнавляем систему, потом ставим все необходимое:
4 years ago
```bash
sudo apt update && sudo apt dist-upgrade -y
sudo apt install ttf-wqy-zenhei python-pip python-smbus python-serial
sudo pip install RPi.GPIO spidev rpi_ws281x
```
Исполнение первой команды может занять достаточно длительное время.
4 years ago
## Упровление компонентами робота.
4 years ago
Для упровления роботом предлагается использовать библиотеку bsp.py. Для того, чтобы воспользоваться ей, ее нужно поместить в папку с вашим проектом и добавить ее в ваш код следующим образом:
```python
import bsp
```
Рассмотрим все компоненты робота и то, как ими можно управлять, какие данные с них можно получить.
4 years ago
4 years ago
1. Управление моторами. Управление моторами осуществляется с помощью четырех пинов GPIO, которые задают напрвление вращения 2х моторов и 2 PWM которые задают скорость вращения.
4 years ago
![изображение-1.png](./изображение-1.png)
В библиотеке bsp.py уже сделанна обвязка так что вам останется только аказать мотор, скорость и направление вращения для взаимодействия.
4 years ago
## Что-то про мою BSP.py
4 years ago
4 years ago
### Мотор:
4 years ago
4 years ago
```python
m = motor()
speed = 10 # Скорость, по сути напряджение на моторе (0 .. 100)
m.forward(speed) # Ехать вперед со скоростью speed
m.backward(speed) # Ехать назад со скоростью speed
m.left(speed) # Крутится вправо со скоростью speed
m.right(speed) # Крутится вдево со скоростью speed
m.stop() # Остановится
m.setMotor(10, 20) # Выставить скорость (ШИМ) 10 на левом колесе, и 20 на правом.
# Скорость может быть от -100 до 100, знак определяет направление
4 years ago
```
4 years ago
### Бипер:
```python
b = beep()
b.on() # Включить пищалку
b.off() # Выключить пищалку, пищит до тех пор пока не выключите
4 years ago
```
4 years ago
### Джойстик:
```python
j = joystick()
j.check_ctr() # Вернет еденицу если нажата Крестовина
j.check_a() # == нажата A
j.check_b() # == нажата B
j.check_c() # == нажата C
j.check_d() # == нажата D
4 years ago
```
4 years ago
Один из вариантов использования это:
4 years ago
4 years ago
```python
j = joystick()
b = beep()
while True: # В бесконечном цикле проверяем нажата ли кнопка
if j.check_ctr():
b.on() # Если нажата то включаем бипер и печатаем слово
print("center")
while j.check_ctr():
time.sleep(0.01) # Ждем когда кнопку отпустят
else:
b.off() # Когда кнопку откустили выключим бипер
```
4 years ago
4 years ago
Можно сюда добавить фотку платы с подписями.
4 years ago
4 years ago
### Управление с пульта
```python
IR = IR_controll()
key = IR.getkey() # Присваеваем переменной key номер нажаной кнопки на пульте
# Метод вернет None если не одна кнопка не нажата, код кнопки если ее нажали в данный момент и repeat до тех пор пока кнопку не отпустят
```
Пример использования: программа которая выводит код нажатой кнпки:
```python
ir = ir_controll()
while True:
key = ir.getkey()
if(key != None and key != "repeat"):
print(hex(key))
```
### Инфракрасный бампер
```python
b = ir_bumper()
l = b.check_l() # Вернет 1 если препятствие зафиксированно левым бампером
r = b.check_r() # Вернет 1 если препятствие зафиксированно правым бампером
```
Пример кода, на консоль выводятся сенсоры которые фиксируют обьект.
```pythin
b = ir_bumper()
while True:
if b.check_l():
print ("LEFT")
time.sleep(0.3)
if b.check_r():
print ("RIGHT")
time.sleep(0.3)
```
### Ультрозвуковой дальномер
```python
u = us_sensor()
k = u.dist() # Вернет расстояние до обьекта считанное сенсором
```
Пример кода который будет выводить расстояние до обьекта до тех пор пока не будет надата ```Ctrl+C```:
```pythin
u = us_sensor()
try:
while True:
print ("Distance:%0.2f cm" %u.dist())
time.sleep(0.3)
except KeyboardInterrupt:
GPIO.cleanup()
```
4 years ago
### RGB диоды, тут большой вопрос, у меня они не заработали.