Skip to content

Commit

Permalink
Update README (2)
Browse files Browse the repository at this point in the history
  • Loading branch information
alexeysp11 committed Sep 6, 2020
1 parent cb78885 commit 9d02287
Show file tree
Hide file tree
Showing 6 changed files with 25 additions and 30 deletions.
2 changes: 2 additions & 0 deletions DATMO/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# DATMO
Detection and Tracking of Moving Obstacles.
27 changes: 14 additions & 13 deletions README_RU.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
# sdc-console-python
Данное приложение написано на языке Python и называется `sdc-console-python`, где `sdc` - это сокращение от *Self Driving Car* (*беспилотный автомобиль*).
Оно выполнено в виде **консольного** приложения, которое позволяет моделировать отдельные модули системы датчиков беспилотного автомобиля при разных моделях поведения автомобиля (т.е. когда он стоит на месте, когда он движется с постоянной скоростью, или, например, когда он меняет угол своего движения).
Это осуществляется посредством ввода необходимых команд через консоль.
Оно выполнено в виде **консольного приложения**, которое позволяет моделировать отдельные модули *системы датчиков беспилотного автомобиля* при разных моделях поведения автомобиля *(т.е. когда он стоит на месте, когда он движется с постоянной скоростью, или, например, когда он меняет угол своего движения).
Это осуществляется посредством ввода необходимых команд через **консоль**.
## Идея приложения
Возможно, идея моделировать систему датчиков беспилотного автомобиля исключительно через **консоль** кому-то может показаться довольно необычным занятием.
Возможно, идея моделировать *систему датчиков беспилотного автомобиля* исключительно через **консоль** кому-то может показаться довольно необычным занятием.
Но дело тут в следующем: я изначально задумывал написать приложение, которое позволило бы моделировать такую систему с помощью **графического интерфейса**.
Однако мне пришлось столкнуться с полным отсутствием реализации модулей, которые отвечают за симуляцию датчиков и обработку данных с них.
Вследствие этого было принято решение сначала реализовывать эти модули, после чего переходить к **графической** составляющей. Причем также планировалось объединить консоль и графический интерфейс в рамках одного приложения, запуская их из одного лаунчера.
Однако мне пришлось столкнуться с полным отсутствием реализации модулей, которые отвечают за *симуляцию датчиков* и *обработку данных* с них.
Вследствие этого было принято решение сначала реализовывать эти модули, после чего переходить к **графической** составляющей. Причем также планировалось объединить **консоль** и **графический интерфейс** в рамках одного приложения, запуская их из одного лаунчера.
Самые первые модули были реализованы на Python, вследствие чего я продолжил дописывать и остальные модули на этом языке. Однако **real-time система**, написанная полностью на Python, будет довольно медленной (так было, по крайней мере, на моем компьютере).
Поэтому **консольная часть** приложения на Python была выделена в отдельное приложение. А в настоящее время ведется работа над **графической частью** приложения, и переписываются модули на более низкоуровневый язык программирования.
Таким образом, приложение `sdc-console-python` является лишь одним из промежуточных вариантов похожего приложения в виде графического интерфейса, который изначально задумывался.
Expand All @@ -16,7 +16,7 @@
- Нечеткий регулятор,
- Нейронная сеть для распознавания рукописных цифр.
### Фильтр Калмана и Real-Time Locating System
**Фильтр Калмана** позволяет уменьшить ошибку измерения и более точно оценить истинное значение измеряемого параметра на основе ранее измеренных значений.
**Фильтр Калмана** позволяет *уменьшить ошибку* измерения и более точно оценить *истинное значение* измеряемого параметра на основе ранее измеренных значений.
В первоначальном варианте, который я реализовал, **фильтр Калмана** выполнял абсолютно все: и генерировал эмпирические данные для *GPS-приемника*, и обрабатывал эти данные, и рисовал график зависмости измерений и рассчета, и выводил результаты расчета на консоль.
Стоит отметить, что **фильтр Калмана** ориентировался на неизменное местоположение автомобиля, а также *дисперсия расчета* (англ. *process variance*) представляла собой постоянный параметр.
Позднее я разделил задачи, которые выполнял **фильтр Калмана**, между разными модулями и сделал так, чтобы параметр *process variance* с каждой итерацией менял свое значение в зависимости от рассчитанного значения ошибки на предыдущей итерации ("чем больше значение ошибки на предыдущей итерации, тем больший шаг мы должны сделать в текущей итерации, чтобы сократить эту ошибку").
Expand All @@ -30,22 +30,23 @@
Скопировать модель мышления человека можно с помощью построения **регулятора нечеткой логики** (или **нечеткого регулятора**).
В общем смысле **нечеткий регулятор** позволяет автомобилю регулировать свою скорость согласно идее о том, что если точка поворота далеко, то можно ехать с приличной скоростью, а если она близко, то скорость следует сбавить.
Это можно сделать следующим образом:
1. Определить границы таких понятий как "близко", "далеко", "низкая скорость" и "высокая скорость" в числовых значениях,
1. Определить границы таких понятий как *"близко"*, *"далеко"*, *"низкая скорость"* и *"высокая скорость"* в числовых значениях,
2. Соотнести понятию *"близко"* понятие *"низкая скорость"* и понятию *"далеко"* - понятие *"высокая скорость"* в виде импликации *"если, то"*,
3. Применить алгоритм нечеткого вывода (наиболее используемым является алгоритм Мамдани).
3. Применить **алгоритм нечеткого вывода** (наиболее используемым является **алгоритм Мамдани**).
Таким образом, задача **нечеткого регулятора** заключается в том, чтобы взять расстояние до следующей точки поворота и вернуть скорость, соответствующую этому расстоянию.
### Нейронная сеть для распознавания рукописных цифр
Огромное количество информации, необходимой для движения автомобиля является визуальной (например, дорожная разметка, дорожные знаки и сигналы светофора).
Огромное количество информации, необходимой для движения автомобиля является визуальной (например, *дорожная разметка*, *дорожные знаки* и *сигналы светофора*).
Причем такого рода информацию невозможно получить с помощью т.н. традиционных методов измерения с помощью *радара*, *лидара*, *GPS*, *гироскопа* и *акселерометра*. Хорошо зарекомендовавшим себя решением для **компьютерного зрения** в настоящее время являются **нейронные сети**.
Однако построение нейронных сетей (особенно если речь идет о **real-time системах**) является нетривиальной задачей, требующей достаточно большого объема знаний и навыков.
Однако построение **нейронных сетей** (особенно если речь идет о **real-time системах**) является нетривиальной задачей, требующей достаточно большого объема знаний и навыков.
Моих знаний и моего времени пока хватило лишь на то, чтобы найти в Интернете алгоритм нейросети для распознавания рукописных цифр **MNIST**, который сможет запуститься на моем старом и медленном компьютере. Как я понял, такая нейросеть является своего рода `Hello World` в области компьютерного зрения.
## Система команд
Теперь я вкратце расскажу о принятой в данном приложении системе команд.
Команды вводятся в следующем виде:
```название_приложения название_модуля --режим_работы```
Например, если необходимо промоделировать модуль GPS при условии, что автомобиль движется с постоянной скоростью, то нужно ввести `sdc gps --v`.
Если надо промоделировать работу гироскопа при условии, что угол, под которым движется автомобиль, неизменен, то следует ввести `sdc gyro --const` и т.д.
Дополнительную информацию по командам можно найти при запуске программы, введя команду `sdc` или `sdc -commands`.
Например, если необходимо промоделировать модуль *GPS* при условии, что автомобиль движется с постоянной скоростью, то нужно ввести `sdc gps --v`.
Если надо промоделировать работу *гироскопа* при условии, что угол, под которым движется автомобиль, неизменен, то следует ввести `sdc gyro --const` и т.д.
Дополнительную информацию по командам можно найти при запуске программы, введя команду `sdc` или
`sdc -commands`.
Служебные модули вызываются следующим образом:
```название_приложения -служебный_модуль```
Например, `sdc -commands` или `sdc -help`.
12 changes: 4 additions & 8 deletions RTLS/README.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,6 @@
# RTLS with Kalman Filter
Here I implement and test different models of Kalman filter.
## Environment
In this module I implement models that generate truth position, velocity and angle of rotation.
# RTLS
Here I implement and test different models of **Kalman filter**.
## Sensors
This module should generate observations of the values that has been generated in environment
module.
This module should simulate sensor observations of the values that has been generated in *env* module.
## Predictive models
I'm going to use simple Kalman filter model that can change value of process variance
depending on that how large aposteri error is.
I'm going to use simple **Kalman filter** model that can change value of *process variance* depending on that how large *aposteri error* is.
1 change: 1 addition & 0 deletions console/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# console
2 changes: 1 addition & 1 deletion env/README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
# env
Module for simulating environment.
In this module I implement models that generate *truth position*, *velocity* and *angle of rotation*.
11 changes: 3 additions & 8 deletions fuzzy_controller/README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,3 @@
# The Fuzzy Controller module
The Fuzzy Controller module is used for counting speed of a car according to the distance between it and next and previous
points on the map.
## Overview
In this program we need to pass a value of distance to the input of the fuzzy controller and get a value of speed as an output.
## Plots
Plots are used for only university reports to show that this algorithm is working correctly but in 2D simulation we are not going to use
them.
# fuzzy_controller
The **Fuzzy Controller** module is used for counting speed of a car according to the *distance* between it and *next* and *previous* points on the map.
In this program we need to pass a value of distance to the input of the **fuzzy controller** and get a value of speed as an output.

0 comments on commit 9d02287

Please sign in to comment.