some changes

master
ontuo 4 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) с роботом
- [Схема](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```
- [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/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```
Примеры:
Скачивание и разархивированиеы:
```bash
cd
@ -206,16 +206,18 @@ network={
![rasp13](pic/raspb/rasp13.png)
7. Для работы с камерой вам потребуется доступ к рабочему столу Raspberry Pi, для этого нужно до установить необходимые пакеты, чтобы иметь возможность видеть рабочий стол.
7. Для работы с камерой вам потребуется доступ к рабочему столу Raspberry Pi, для этого нужно установить необходимые пакеты, чтобы иметь возможность видеть рабочий стол.
> Для Дальнейшей работы с этим сервисом нужно выполнить настройки из следующего раздела ```Настройка робота```.
> Для дальнейшей работы с этим сервисом нужно выполнить настройки из раздела ```Настройка робота```.
Для начала установим на Raspberry Pi программы, необходимые для трансляции рабочего стола:
```bash
sudo apt install realvnc-vnc-server realvnc-vnc-viewer
vncserver
```
После запуска последний команды в терминале появится что-то похожее на это:
После исполнения последний команды вы увидите схожий вывод в терминале:
```bash
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)
```
Нужно запомнить ```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)
Вводите туда пароль, нажимаете Enter. После чего вам предложат ввести логин и пароль от Raspberry Pi, напомню это pi а пароль raspberry. После чего вы увидите рабочий стол малины.
Вам предложат ввести логин и пароль от Raspberry Pi. Они стандартные - логин это ```pi```, а пароль - ```raspberry```. После этих действий вы увидите рабочий стол Raspberry Pi.
![rasp15](pic/raspb/rasp15.png)
@ -483,9 +488,11 @@ except KeyboardInterrupt:
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
sudo nano /boot/config.txt
@ -504,13 +511,13 @@ hdmi_force_edid_audio=1
dtparam=audio=on
```
превратив ее в такую:
таким образом:
```txt
#dtparam=audio=on
```
Так-же для работы необходимо установить дополнительные библиотеки, для чего необходимо сделать следующее:
Также для работы нужно установить дополнительные библиотеки, для чего сделаем следующее:
```bash
sudo pip3 install rpi_ws281x adafruit-circuitpython-neopixel
@ -527,7 +534,7 @@ r.color(2, 0, 255, 0)
r.color(3, 255, 0, 0)
```
Такого-же эффекта можно добиться если указать не яркость каждого отдельного цвета, а применить название соответствующего цвета.
Такого же эффекта можно добиться если указать не яркость каждого отдельного цвета, а применить название соответствующего цвета.
```python
r = rgb_led()
@ -550,7 +557,9 @@ r.color(3, "Red")
## Датчики линии
Для отслеживания линии в нижней части робота есть 5 оптических датчиков. Для простого примера можно просто считать с них значения:
![line](pic/bsp/line_sensor.png)
Для отслеживания линии в нижней части робота есть 5 оптических датчиков. Для примера можно просто считать с них значения:
```python
l = line_sensor()
@ -563,16 +572,16 @@ while True:
## Управление положением камеры
Для управлением положением камеры (2мя сервоприводами) здесь отвечает специальная микросхема - PCA9685, её необходимо задать угол поворота камеры и она будет его поддерживать, пока мы не передадим новое значение угла. Для реализации данного функционала можно воспользоваться следующей функцией:
Для управлением положением камеры (а оно регулируется с помощью кронштейна с двумя сервоприводами) здесь отвечает специальная микросхема - PCA9685. Принцип работы с ней следующий - ей задается угол поворота камеры и она будет его поддерживать, пока мы не передадим новое значение угла. Для реализации данного функционала можно воспользоваться следующей функцией:
```python
c = CameraAngle()
c.setCameraAngle(30, 90)
```
Установит на 30 градусов по вертикальной оси и 90 градусов по горизонтальной.
Этот код установит камеру на 30 градусов по вертикальной оси и 90 градусов по горизонтальной.
Пример программы которая двигает камерой вправо и влево, а так-же вверх и низ:
Пример программы, которая двигает камерой вправо и влево, а также вверх и низ:
```python
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
from bsp import rgb_led, line_sensor, motor
@ -600,20 +609,20 @@ l = line_sensor()
colors = {0:4, 1:3, 2:1, 3:0}
delta_sensor = 200
delta_sensor = 200 # Пороговое значение срабатывания сенсора
while True:
c = l.AnalogRead()
c = l.AnalogRead() # Получаем текущее значение датчика линии
i = 0
for i in range(4):
if c[colors[i]] < delta_sensor:
r.color(i, "Red")
r.color(i, "Red") # Включаем красный на светодиоде, соотвсетствующем датчику, обнаружевшему черную линиб
else:
r.color(i, "Black")
r.color(i, "Black") # Выключаем светодиод, если нет
i = i+1
# Начинаем поворачивать в зависимости от того, какие датчики заметил черную линию
if c[1] < delta_sensor:
m.setMotor(40,0)
elif c[3] < delta_sensor:
@ -626,13 +635,15 @@ while True:
m.setMotor(10, 10)
```
В данном примере робот ездит по черной линии, также светодиодами подсвечивается сенсор под которым обнаружена линия. delta_sensor это пороговое значения срабатывания сенсора, оно может меняться в зависимости от освещения. Это значение можно узнать если воспользоваться примером выше который считывает значения с сенсоров.
В данном примере робот ездит по черной линии, светодиодами подсвечивается сенсор под которым обнаружена линия. delta_sensor - пороговое значения срабатывания сенсора, оно может меняться в зависимости от освещения. Это значение можно узнать если воспользоваться примером, который считывает значения с сенсоров.
## Компьютерное зрение
В рамках данного блока я предлагаю рассмотреть пример который позволит распознать зеленый круг, а также взаимодействовать с ним. Этот процесс состоит из 2х этапов, первое это подбор параметров, а второе это непосредственная работа с программой по распознаванию.
В рамках данного блока предлагается рассмотреть пример, который позволит распознать зеленый круг, а также взаимодействовать с ним. Этот процесс состоит из двух этапов:
1. подбор параметров;
2. непосредственная работа с программой по распознаванию.
Для реализации нужно сделать следующее:
Перейдем к примеру:
1. Поставим пакеты для работы с компьютерным зрением:
@ -641,7 +652,7 @@ sudo apt install libatlas-base-dev
pip3 install numpy opencv-python
```
2. Далее запускаем скрипт предназначенный для подбора параметров.
2. Далее запускаем скрипт, предназначенный для подбора параметров.
```python
import cv2
@ -717,11 +728,11 @@ cv2.destroyAllWindows()
![cv1](pic/CV/cv_1.png)
Суть происходящего в том что для того чтобы определить объект на фото или видео нам нужно выделить его контур, а для этого необходимо знать его цвет. Также для более удобной работы мы переводим цвет в HSV (тон, насыщенность, значение) представление.
Суть происходящего в том, что для того чтобы определить объект на фото или видео нам нужно выделить его контур, а для этого необходимо знать его цвет. Также для более удобной работы мы переводим цвет в HSV (тон, насыщенность, значение) представление.
![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