some changes

master
ontuo 3 years ago
parent af89067a80
commit ba5652c115
  1. 79
      README.md
  2. 0
      example/circul_detect.py
  3. 0
      example/find_filter.py
  4. 0
      example/mnist_trained_model.h5
  5. 0
      example/number_detect.py
  6. BIN
      pic/bsp/RGB.png
  7. BIN
      pic/bsp/line_sensor.png
  8. BIN
      pic/raspb/rasp16.png

@ -4,14 +4,14 @@
## Сервис раздел ## Сервис раздел
- [Страница](https://www.waveshare.com/wiki/AlphaBot2-Pi) с роботом - [Wiki-страница](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/9/91/AlphaBot2-Base-Schematic.pdf) платы-шасси робота.
- [Схема](https://www.waveshare.com/w/upload/7/72/AlphaBot2-Pi-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) - User [manual](https://www.waveshare.com/w/upload/1/1f/Alphabot2-user-manual-en.pdf)
- Набор [даташитов](https://www.waveshare.com/wiki/AlphaBot2_Datasheet) с компонентами на плате - Набор [документации](https://www.waveshare.com/wiki/AlphaBot2_Datasheet) на компоненты робота
- Примеры ```wget https://www.waveshare.com/w/upload/e/ee/AlphaBot2-Demo.7z``` - Примеры кода ```wget https://www.waveshare.com/w/upload/e/ee/AlphaBot2-Demo.7z```
Примеры: Скачивание и разархивированиеы:
```bash ```bash
cd cd
@ -206,16 +206,18 @@ network={
![rasp13](pic/raspb/rasp13.png) ![rasp13](pic/raspb/rasp13.png)
7. Для работы с камерой вам потребуется доступ к рабочему столу Raspberry Pi, для этого нужно до установить необходимые пакеты, чтобы иметь возможность видеть рабочий стол. 7. Для работы с камерой вам потребуется доступ к рабочему столу Raspberry Pi, для этого нужно установить необходимые пакеты, чтобы иметь возможность видеть рабочий стол.
> Для Дальнейшей работы с этим сервисом нужно выполнить настройки из следующего раздела ```Настройка робота```. > Для дальнейшей работы с этим сервисом нужно выполнить настройки из раздела ```Настройка робота```.
Для начала установим на Raspberry Pi программы, необходимые для трансляции рабочего стола:
```bash ```bash
sudo apt install realvnc-vnc-server realvnc-vnc-viewer sudo apt install realvnc-vnc-server realvnc-vnc-viewer
vncserver vncserver
``` ```
После запуска последний команды в терминале появится что-то похожее на это: После исполнения последний команды вы увидите схожий вывод в терминале:
```bash ```bash
Running applications in /etc/vnc/xstartup Running applications in /etc/vnc/xstartup
@ -227,13 +229,16 @@ Log file is /home/pi/.vnc/raspberrypi:2.log
New desktop is raspberrypi:1 (192.168.2.108:1) New desktop is raspberrypi:1 (192.168.2.108:1)
``` ```
Нужно запомнить ```raspberrypi:1``` т.к. это нужно будет использовать как адрес в клиенте. Нужно запомнить ```raspberrypi:1```, эта строчка будет использоваться как адрес в клиенте.
Теперь переходим к вашему рабочему компьютеру - откройте [ссылку](https://www.realvnc.com/en/connect/download/viewer/) (https://www.realvnc.com/en/connect/download/viewer/), и скачайте версию программы, подходящую под вашу операционную систему. Установите и запустите программу.
После включение вы увидете окно, вверху которого расположена форма для ввода. Введите туда ```raspberrypi:1``` и нажмите Enter.
Потом переходим сюда (https://www.realvnc.com/en/connect/download/viewer/) и качаем оттуда версию для вашей операционной системы. ![rasp16](pic/raspb/rasp16.png)
![rasp14](pic/raspb/rasp14.png) ![rasp14](pic/raspb/rasp14.png)
Вводите туда пароль, нажимаете Enter. После чего вам предложат ввести логин и пароль от Raspberry Pi, напомню это pi а пароль raspberry. После чего вы увидите рабочий стол малины. Вам предложат ввести логин и пароль от Raspberry Pi. Они стандартные - логин это ```pi```, а пароль - ```raspberry```. После этих действий вы увидите рабочий стол Raspberry Pi.
![rasp15](pic/raspb/rasp15.png) ![rasp15](pic/raspb/rasp15.png)
@ -483,9 +488,11 @@ except KeyboardInterrupt:
GPIO.cleanup() GPIO.cleanup()
``` ```
### RGB диоды ### RGB светодиоды
![RGB](pic/bsp/RGB.png)
Для работы с RGB необходимо внести некоторые изменения в конфиг запуска расбери, т.к. такие светодиоды WS2812B требуют очень специфического сигнала управления. Реализовать его средствами linux не возможно, поэтому на помощь нам приходят такие модули как DMA и PWM. DMA позволяет передавать данные на светодиоды минуя центральный процессор, а PWM через управление скважностью позволяет передрать данные от DMA в требуемом формате. Но за такую реализацию нужно платить, поэтому одновременно со светодиодами нельзя использовать аудиокарту встроенную в малину. Собственно для ее отключения нам и нужно исправить настройки запуска, для чего: Для работы с RGB светодиодами необходимо внести некоторые изменения в конфигурацию запуска Raspberry Pi, так как адресные светодиоды WS2812B требуют специфического сигнала управления. Реализовать его средствами linux не возможно, поэтому на помощь нам приходят такие модули как DMA и PWM. DMA позволяет передавать данные на светодиоды минуя центральный процессор, а PWM через управление скважностью позволяет передать данные от DMA в требуемом формате. Но за такую реализацию нужно платить, поэтому одновременно со светодиодами нельзя использовать аудиокарту, встроенную в Raspberry Pi. Для ее отключения нам и нужно исправить настройки запуска следующим образом:
```bash ```bash
sudo nano /boot/config.txt sudo nano /boot/config.txt
@ -504,13 +511,13 @@ hdmi_force_edid_audio=1
dtparam=audio=on dtparam=audio=on
``` ```
превратив ее в такую: таким образом:
```txt ```txt
#dtparam=audio=on #dtparam=audio=on
``` ```
Так-же для работы необходимо установить дополнительные библиотеки, для чего необходимо сделать следующее: Также для работы нужно установить дополнительные библиотеки, для чего сделаем следующее:
```bash ```bash
sudo pip3 install rpi_ws281x adafruit-circuitpython-neopixel sudo pip3 install rpi_ws281x adafruit-circuitpython-neopixel
@ -527,7 +534,7 @@ r.color(2, 0, 255, 0)
r.color(3, 255, 0, 0) r.color(3, 255, 0, 0)
``` ```
Такого-же эффекта можно добиться если указать не яркость каждого отдельного цвета, а применить название соответствующего цвета. Такого же эффекта можно добиться если указать не яркость каждого отдельного цвета, а применить название соответствующего цвета.
```python ```python
r = rgb_led() r = rgb_led()
@ -550,7 +557,9 @@ r.color(3, "Red")
## Датчики линии ## Датчики линии
Для отслеживания линии в нижней части робота есть 5 оптических датчиков. Для простого примера можно просто считать с них значения: ![line](pic/bsp/line_sensor.png)
Для отслеживания линии в нижней части робота есть 5 оптических датчиков. Для примера можно просто считать с них значения:
```python ```python
l = line_sensor() l = line_sensor()
@ -563,16 +572,16 @@ while True:
## Управление положением камеры ## Управление положением камеры
Для управлением положением камеры (2мя сервоприводами) здесь отвечает специальная микросхема - PCA9685, её необходимо задать угол поворота камеры и она будет его поддерживать, пока мы не передадим новое значение угла. Для реализации данного функционала можно воспользоваться следующей функцией: Для управлением положением камеры (а оно регулируется с помощью кронштейна с двумя сервоприводами) здесь отвечает специальная микросхема - PCA9685. Принцип работы с ней следующий - ей задается угол поворота камеры и она будет его поддерживать, пока мы не передадим новое значение угла. Для реализации данного функционала можно воспользоваться следующей функцией:
```python ```python
c = CameraAngle() c = CameraAngle()
c.setCameraAngle(30, 90) c.setCameraAngle(30, 90)
``` ```
Установит на 30 градусов по вертикальной оси и 90 градусов по горизонтальной. Этот код установит камеру на 30 градусов по вертикальной оси и 90 градусов по горизонтальной.
Пример программы которая двигает камерой вправо и влево, а так-же вверх и низ: Пример программы, которая двигает камерой вправо и влево, а также вверх и низ:
```python ```python
c = CameraAngle() c = CameraAngle()
@ -589,7 +598,7 @@ while True:
# Примеры простых программ # Примеры простых программ
Для примера работы с роботом давайте реализуем программу движения по линии, по датчикам линии. Данная программа позволит двигаться роботу по замкнутому контуру который можно получить распечатав страницы 2,2,2,2,3,3,3,3,11 из документа с элементами трассы. Для примера работы с роботом реализуем программу движения по линии с помощью датчиков линии. Данная программа позволит двигаться роботу по замкнутому контуру, который можно получить распечатав страницы 2,2,2,2,3,3,3,3,11 из документа с элементами трассы (документ linefollowtiles.pdf в папке docs).
```python ```python
from bsp import rgb_led, line_sensor, motor from bsp import rgb_led, line_sensor, motor
@ -600,20 +609,20 @@ l = line_sensor()
colors = {0:4, 1:3, 2:1, 3:0} colors = {0:4, 1:3, 2:1, 3:0}
delta_sensor = 200 delta_sensor = 200 # Пороговое значение срабатывания сенсора
while True: while True:
c = l.AnalogRead() c = l.AnalogRead() # Получаем текущее значение датчика линии
i = 0 i = 0
for i in range(4): for i in range(4):
if c[colors[i]] < delta_sensor: if c[colors[i]] < delta_sensor:
r.color(i, "Red") r.color(i, "Red") # Включаем красный на светодиоде, соотвсетствующем датчику, обнаружевшему черную линиб
else: else:
r.color(i, "Black") r.color(i, "Black") # Выключаем светодиод, если нет
i = i+1 i = i+1
# Начинаем поворачивать в зависимости от того, какие датчики заметил черную линию
if c[1] < delta_sensor: if c[1] < delta_sensor:
m.setMotor(40,0) m.setMotor(40,0)
elif c[3] < delta_sensor: elif c[3] < delta_sensor:
@ -626,13 +635,15 @@ while True:
m.setMotor(10, 10) m.setMotor(10, 10)
``` ```
В данном примере робот ездит по черной линии, также светодиодами подсвечивается сенсор под которым обнаружена линия. delta_sensor это пороговое значения срабатывания сенсора, оно может меняться в зависимости от освещения. Это значение можно узнать если воспользоваться примером выше который считывает значения с сенсоров. В данном примере робот ездит по черной линии, светодиодами подсвечивается сенсор под которым обнаружена линия. delta_sensor - пороговое значения срабатывания сенсора, оно может меняться в зависимости от освещения. Это значение можно узнать если воспользоваться примером, который считывает значения с сенсоров.
## Компьютерное зрение ## Компьютерное зрение
В рамках данного блока я предлагаю рассмотреть пример который позволит распознать зеленый круг, а также взаимодействовать с ним. Этот процесс состоит из 2х этапов, первое это подбор параметров, а второе это непосредственная работа с программой по распознаванию. В рамках данного блока предлагается рассмотреть пример, который позволит распознать зеленый круг, а также взаимодействовать с ним. Этот процесс состоит из двух этапов:
1. подбор параметров;
2. непосредственная работа с программой по распознаванию.
Для реализации нужно сделать следующее: Перейдем к примеру:
1. Поставим пакеты для работы с компьютерным зрением: 1. Поставим пакеты для работы с компьютерным зрением:
@ -641,7 +652,7 @@ sudo apt install libatlas-base-dev
pip3 install numpy opencv-python pip3 install numpy opencv-python
``` ```
2. Далее запускаем скрипт предназначенный для подбора параметров. 2. Далее запускаем скрипт, предназначенный для подбора параметров.
```python ```python
import cv2 import cv2
@ -717,11 +728,11 @@ cv2.destroyAllWindows()
![cv1](pic/CV/cv_1.png) ![cv1](pic/CV/cv_1.png)
Суть происходящего в том что для того чтобы определить объект на фото или видео нам нужно выделить его контур, а для этого необходимо знать его цвет. Также для более удобной работы мы переводим цвет в HSV (тон, насыщенность, значение) представление. Суть происходящего в том, что для того чтобы определить объект на фото или видео нам нужно выделить его контур, а для этого необходимо знать его цвет. Также для более удобной работы мы переводим цвет в HSV (тон, насыщенность, значение) представление.
![cv0](pic/CV/HSV_cone.png) ![cv0](pic/CV/HSV_cone.png)
Наша задача подобрать минимальное и максимальное значения для 3х параметров h, s, v. Сначала нужно подобрать нижнюю границу параметра тона h (h1). По сути это и есть выбор того цвета который мы хоти распознать. Для этого нужно двигать первый ползунок до тех пор пока круг не станет быть виден. потом подгоняем максимальное значение h (h2) так чтобы круг все еще отчетливо был виден, но при этом эти 2 ползунка были максимально близки. Потом также подгоняем второй параметр s - это насыщенность, чем больше этот параметр, тем «чище» цвет, а чем ближе этот параметр к нулю, тем ближе цвет к нейтральному серому. Третий v - это яркость. Наша задача подобрать минимальное и максимальное значения для трех параметров - H, S, V. Сначала нужно подобрать нижнюю границу параметра тона H (h1). По сути это и есть выбор того цвета, который мы хотим распознать. Для этого нужно двигать первый ползунок до тех пор пока круг не станет видемым. Потом подгоняем максимальное значение H (h2) так, чтобы круг все еще отчетливо был виден, но при этом эти два ползунка были максимально близки. Потом также подгоняем второй параметр S - это насыщенность, чем больше этот параметр, тем «чище» цвет, а чем ближе этот параметр к нулю, тем ближе цвет к нейтральному серому. Третий V - это яркость.
В итоге должно получится что-то похожее на это: В итоге должно получится что-то похожее на это:

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 31 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Loading…
Cancel
Save