Page 1 of 1

SERob3 (python) - Թափառող ռոբոտի օրինակ Python ծրագրավորման լեզվի միջոցով

Posted: Wed May 06, 2020 9:07 pm
by davbaghdasaryan
Wandering Robot example through Python programming language
| Пример бродячего робота с помощью языка программирования Python


Ռոբոտի համար անհրաժեշտ է՝
1) SERob3 ղեկավարիչ (controller),
2) Ուլտրաձայնային հեռաչափ (Ultrasonic sensor range finder, Usrf),
3) 2 Շարժիչ իրենց controller-ներով։

Աջ շարժիչը միացնել Motor բաժնի pin 1 – ին:
Ուլտրաձայնային հեռաչափի input-ը միացնել D n/O բաժնի pin 3-ին, իսկ Out-ը՝ pin 4-ին:
Ձախ շարժիչը միացնել Mօtor բաժնի pin 0 – ին:
Սեղմեք այստեղ
Picture1.png
Picture1.png (202.29 KiB) Viewed 12099 times
Վերջ․ սխեման ավարտեցինք։ Կարելի է անցնել ծրագրային մասին։

Թափառող ռոբոտի համար կա 2 python-ի օրինակ՝
1. obstacle_avoiding_v1 - Առանց drive դրայվերի․
2. obstacle_avoiding_v2 - drive դրայվերով։

Կքննարկենք 2-րդ տարբերակը։

Եթե ռոբոտի հեռավորությունը արգելքից 50սմ-ից ավելին է` ռոբոտը շարժվում է առաջ տվյալ շարժիչներով, տվյալ արագությամբ։ Այդ ամենը գրառում ենք այսպես.

Ծրագիրը ստեղծելու համար օգտվում ենք «sys», «time» եւ «SERob3» կատալոգի միջից` «drive» (Շարժիչների հեշտ կառավարման համար) եւ «Usrf» (հեռաչափի միջոցով արգելքից հեռավորությունը չափելու համար) գրադարաններից։ Դրանք ներմուծելու համար օգտագործում ենք «import» հրամանը եւ նշում ենք կատալոգը։
Սեղմեք այստեղ

Code: Select all

from SERob3 import drive
from SERob3 import Usrf
import time

myUsrf = Usrf()
Հետագա գործողությունները անդադար շարունակելու համար օգտագործում ենք «while (1):» (նույնն է՝ ինչ որ while (1 = 1)) հրամանը։

Code: Select all

while (1):
Եթե ռոբոտի հեռավորությունը արգելքից 50սմ-ից ավելին է` ռոբոտը շարժվում է առաջ տվյալ շարժիչներով, տվյալ արագությամբ։ Այդ ամենը գրառում ենք այսպես.
Սեղմեք այստեղ

Code: Select all

if myUsrf.Distance(3) > 50:
                drive.Out(0, 1, 70)

Եթե ռոբոտի հեռավորությունը արգելքից 50սմ-ից փոքր է եւ 20սմ-ից ավելին՝ ռոբոտը շարժվում է առաջ տվյալ շարժիչներով, ավելի դանդաղ։
Սեղմեք այստեղ

Code: Select all

if myUsrf.Distance(3) > 20 and myUsrf.Distance(3) < 50:         
                 drive.Out(0, 1, 30)
Եթե ռոբոտի հեռավորությունը արգելքից 20սմ-ից փոքր է՝ ռոբոտը պետք է համեմատի իր աջ եւ ձախ կողմերի հեռավորությունը պատից, այնուհետեւ, ըստ դրա՝ շարժվի այն ուղղությամբ, որը համեմատաբար ավելի ազատ է։ Դրա համար շարժվում ենք այս հերթականությամբ։ Ռոբոտը, արգելքին մոտենալուց հետո՝ հեռանում է որոշ չափով, թեքվում ձախ,
Սեղմեք այստեղ

Code: Select all

                drive.Out(0, 1, 0)
                time.sleep(0.5)                   
                drive.Out(0, 2, 70)
                time.sleep(0.2)
                drive.Out(0, 3, 70)
                time.sleep(0.17)
                drive.Out(0, 1, 0)
                time.sleep(0.5)
չափում հեռավորությունը՝ ստեղծելով «a» փոփոխական,

Code: Select all

                a = myUsrf.Distance(3)
թեքվում աջ,
Սեղմեք այստեղ

Code: Select all

 time.sleep(0.5)
                drive.Out(0, 4, 70)
                time.sleep(0.4)
                drive.Out(0, 1, 0)
չափում հեռավորությունը՝ ստեղծելով «b» փոփոխական:

Code: Select all

                b = myUsrf.Distance(3)
Վերադառնում է հին դիրքին:
Սեղմեք այստեղ

Code: Select all

                time.sleep(0.5)
                drive.Out(0, 3, 70)
                time.sleep(0.2)
                drive.Out(0, 1, 0)
Այնուհետեւ համեմատում է «a»-ն եւ «b»-ն։

Եթե «a > b», ապա

Code: Select all

                if a > b :
թեքվի ձախ եւ շարժվի առաջ
Սեղմեք այստեղ

Code: Select all

                        drive.Out(0, 3, 70)
                        time.sleep(0.4)
                        drive.Out(0, 1, 0)
                        time.sleep(0.3)
                        drive.Out(0, 1, 70)
Եթե «a < b», ապա

Code: Select all

if a < b :
թեքվի աջ եւ շարժվի առաջ։
Սեղմեք այստեղ

Code: Select all

                        drive.Out(0, 4, 70)
                        time.sleep(0.5)
                        drive.Out(0, 1, 0)
                        drive.Out(0, 1, 70)
Code example:

Code: Select all

from SERob3 import drive
from SERob3 import Usrf
import time

myUsrf = Usrf()

while (1):
         print(myUsrf.Distance(3))
         if myUsrf.Distance(3) > 50:
                drive.Out(0, 1, 70)
         if myUsrf.Distance(3) > 20 and myUsrf.Distance(3) < 50:         
                 drive.Out(0, 1, 30)
         if myUsrf.Distance(3) < 20:       
                drive.Out(0, 1, 0)
                time.sleep(0.5)                   
                drive.Out(0, 2, 70)
                time.sleep(0.2)
                drive.Out(0, 3, 70)
                time.sleep(0.17)
                drive.Out(0, 1, 0)
                time.sleep(0.5)
                a = myUsrf.Distance(3)
                time.sleep(0.5)
                drive.Out(0, 4, 70)
                time.sleep(0.4)
                drive.Out(0, 1, 0)
                b = myUsrf.Distance(3)
                time.sleep(0.5)
                drive.Out(0, 3, 70)
                time.sleep(0.2)
                drive.Out(0, 1, 0)
                if a > b :
                        drive.Out(0, 3, 70)
                        time.sleep(0.4)
                        drive.Out(0, 1, 0)
                        time.sleep(0.3)
                        drive.Out(0, 1, 70)
                if a < b :
                        drive.Out(0, 4, 70)
                        time.sleep(0.5)
                        drive.Out(0, 1, 0)
                        drive.Out(0, 1, 70)

Աշխատացնենք ծրագիրը։

Ռոբոտը միացնելուց հետո բացում ենք «Terminal»-ը եւ
նշում այն կատալոգը, որտեղ գտնվում է ծրագիրը։

«cd projects/SERob3»

Այնուհետեւ «obstacle_avoiding_v2.py» ծրագիրը աշխատացնում ենք python-ի միջոցով։

«sudo python2 obstacle_avoiding_v2.py»
Տերմինալի հրամաներ

Code: Select all

cd projects/SERob3/robots
sudo python2 obstacle_avoiding_v2.py
Վերջ. մենք ստացանք մեզ անհրաժեշտ ռոբոտը։


Пример бродячего робота с помощью языка программирования Python

Posted: Tue Jun 22, 2021 5:28 pm
by davbaghdasaryan
Для робота нам потребуются:
1) SERob3 контроллер (controller),
2) Ультразвуковой дальномер (Ultrasonic sensor range finder, Usrf),
3) 2 двигателя со своими контроллерами.

Правый двигатель подключить к pin 1 секции Motor.
Input ультразвукового дальномера подключить к pin 3 секции D n/O, а output - к pin 4.
Левый двигатель подключить к pin 0 секции Motor.
посмотреть
Picture1.png
Picture1.png (202.29 KiB) Viewed 11925 times
Все. Схема завершена. Можно перейти к программной части.

Для бродячего робота есть 2 примера python:
1. obstacle_avoiding_v1 - Без драйвера drive,
2. obstacle_avoiding_v2 - С драйвером drive.

Обсудим 2-ой вариант.

Для создания программы из каталога "sys", "time" и "SERob3" воспользуемся библиотеками "drive" (для облегченного управления двигателями) и "Usrf" (для измерения расстояния от барьера с помощью дальномера). Чтобы импортировать их, используем команду "import" и задаем каталог.
посмотреть

Code: Select all

from SERob3 import drive
from SERob3 import Usrf
import time

myUsrf = Usrf()
Для непрерывного продолжения дальнейших действий воспользуемся командой "while (1):" (то же самое, что и команда while (1 = 1)).

Code: Select all

while (1):
Если расстояние от робота до барьера больше 50 см, то робот движется вперед с заданными двигателями, с заданной скоростью. Все это записываем так:
посмотреть

Code: Select all

if myUsrf.Distance(3) > 50:
                drive.Out(0, 1, 70)

Если расстояние от робота до барьера больше 20 см и меньше 50 см, то робот движется вперед с заданными двигателями, но помедленнее.
посмотреть

Code: Select all

if myUsrf.Distance(3) > 20 and myUsrf.Distance(3) < 50:         
                 drive.Out(0, 1, 30)
Если расстояние от робота до барьера меньше 20 см, то робот должен сравнить расстояния от своей правой и левой сторон до стены, затем, в соответствии с этим, двигаться в том направлении, которое сравнительно свободно. Поэтому мы двигаемся в таком порядке: робот, подойдя к барьеру, отходит немного, поворачивается налево,
посмотреть

Code: Select all

                drive.Out(0, 1, 0)
                time.sleep(0.5)                   
                drive.Out(0, 2, 70)
                time.sleep(0.2)
                drive.Out(0, 3, 70)
                time.sleep(0.17)
                drive.Out(0, 1, 0)
                time.sleep(0.5)
измеряет расстояние, создавая переменную "a",

Code: Select all

                a = myUsrf.Distance(3)
поворачивается направо,
посмотреть

Code: Select all

 time.sleep(0.5)
                drive.Out(0, 4, 70)
                time.sleep(0.4)
                drive.Out(0, 1, 0)
измеряет расстояние, создавая переменную "b".

Code: Select all

                b = myUsrf.Distance(3)
Возвращается на прежнюю позицию.
посмотреть

Code: Select all

                time.sleep(0.5)
                drive.Out(0, 3, 70)
                time.sleep(0.2)
                drive.Out(0, 1, 0)
Затем сравнивает "a" и "b".

Если "a > b", то

Code: Select all

                if a > b :
должен поворачиваться налево и двигаться вперед.
посмотреть

Code: Select all

                        drive.Out(0, 3, 70)
                        time.sleep(0.4)
                        drive.Out(0, 1, 0)
                        time.sleep(0.3)
                        drive.Out(0, 1, 70)
Если "a < b", то

Code: Select all

if a < b :
должен поворачиваться направо и двигаться вперед.
посмотреть

Code: Select all

                        drive.Out(0, 4, 70)
                        time.sleep(0.5)
                        drive.Out(0, 1, 0)
                        drive.Out(0, 1, 70)
Code example:

Code: Select all

from SERob3 import drive
from SERob3 import Usrf
import time

myUsrf = Usrf()

while (1):
         print(myUsrf.Distance(3))
         if myUsrf.Distance(3) > 50:
                drive.Out(0, 1, 70)
         if myUsrf.Distance(3) > 20 and myUsrf.Distance(3) < 50:         
                 drive.Out(0, 1, 30)
         if myUsrf.Distance(3) < 20:       
                drive.Out(0, 1, 0)
                time.sleep(0.5)                   
                drive.Out(0, 2, 70)
                time.sleep(0.2)
                drive.Out(0, 3, 70)
                time.sleep(0.17)
                drive.Out(0, 1, 0)
                time.sleep(0.5)
                a = myUsrf.Distance(3)
                time.sleep(0.5)
                drive.Out(0, 4, 70)
                time.sleep(0.4)
                drive.Out(0, 1, 0)
                b = myUsrf.Distance(3)
                time.sleep(0.5)
                drive.Out(0, 3, 70)
                time.sleep(0.2)
                drive.Out(0, 1, 0)
                if a > b :
                        drive.Out(0, 3, 70)
                        time.sleep(0.4)
                        drive.Out(0, 1, 0)
                        time.sleep(0.3)
                        drive.Out(0, 1, 70)
                if a < b :
                        drive.Out(0, 4, 70)
                        time.sleep(0.5)
                        drive.Out(0, 1, 0)
                        drive.Out(0, 1, 70)

Запустим программу.

После включения робота открываем "Terminal" и указываем каталог, в котором находится программа.

"cd projects/SERob3"

Затем запускаем программу "obstacle_avoiding_v2.py" с помощью python.

"sudo python2 obstacle_avoiding_v2.py"
Terminal:

Code: Select all

cd projects/SERob3/robots
sudo python2 obstacle_avoiding_v2.py
Вот и все. Мы получили необходимого нам робота.


Wandering Robot example through Python programming language

Posted: Fri Aug 06, 2021 4:19 pm
by davbaghdasaryan
For creation of a robot is required

1) SERob3 controller
2) Ultrasonic sensor range finder(Usrf)
3) 2 motors with controllers

Connect the right motor to the pin 1 of the Motor section.
Connect the Usrf input with the pin 3 of the D n/o section and the Out- with the pin 4.
Connect the left motor with the pin 0 of the Motor section.
Picture:
Picture1.png
Picture1.png (202.29 KiB) Viewed 11890 times
So, we finished the scheme. Let's move on to software.
There are 2 examples of wandering robot with python

1.obstacle_avoiding_v1 - without drive driver․
2.obstacle_avoiding_v2 - drive with driver.

Let’s discuss the second option.

For creating the program we use the “drive” (for easy engine control) and “Usrf” (to measure the distance from the barrier by rangefinder) libraries from “sys”, “time” and “SERob3” catalogues. In order to import the above mentioned we use the “import” command and mention the catalogue.

Code:

Code: Select all

from SERob3 import drive
from SERob3 import Usrf
import time

myUsrf = Usrf()
In order to continue the subsequent operations uninterrupted we need to use the “while (1)” command (the same as while(1=1)).

Code: Select all

while (1):
If the distance of the robot is more than 50 cm from the barrier the robot is moving forward with given motors, at a given speed. The format is as follows:
Code:

Code: Select all

if myUsrf.Distance(3) > 50:
                drive.Out(0, 1, 70)

If the distance of the robot is less than 50 cm and more than 20 cm from the barrier, the robot is moving forward with given motors slower.
Code:

Code: Select all

if myUsrf.Distance(3) > 20 and myUsrf.Distance(3) < 50:         
                 drive.Out(0, 1, 30)
If the distance of the robot is less than 20 cm from the barrier, the robot must compare the distance of its right and left sides from the wall to move according to this to the direction that is relatively free. So, we act with such sequence: the robot leaves to some extent after approaching the barrier, turns left,
Code:

Code: Select all

                drive.Out(0, 1, 0)
                time.sleep(0.5)                   
                drive.Out(0, 2, 70)
                time.sleep(0.2)
                drive.Out(0, 3, 70)
                time.sleep(0.17)
                drive.Out(0, 1, 0)
                time.sleep(0.5)
measures the distance creating the "a" variable

Code: Select all

                a = myUsrf.Distance(3)
turns right,
Code:

Code: Select all

 time.sleep(0.5)
                drive.Out(0, 4, 70)
                time.sleep(0.4)
                drive.Out(0, 1, 0)
measures the distance creating the "b" variable.

Code: Select all

                b = myUsrf.Distance(3)
Returns to the old position.
Code:

Code: Select all

                time.sleep(0.5)
                drive.Out(0, 3, 70)
                time.sleep(0.2)
                drive.Out(0, 1, 0)
Then compares the “a” and “b” variables.

If “a > b”, then

Code: Select all

                if a > b :
turns left and moves forward.
Code:

Code: Select all

                        drive.Out(0, 3, 70)
                        time.sleep(0.4)
                        drive.Out(0, 1, 0)
                        time.sleep(0.3)
                        drive.Out(0, 1, 70)
If “a < b”, then

Code: Select all

if a < b :
turns right and moves forward.
Code:

Code: Select all

                        drive.Out(0, 4, 70)
                        time.sleep(0.5)
                        drive.Out(0, 1, 0)
                        drive.Out(0, 1, 70)
Code example:

Code: Select all

from SERob3 import drive
from SERob3 import Usrf
import time

myUsrf = Usrf()

while (1):
         print(myUsrf.Distance(3))
         if myUsrf.Distance(3) > 50:
                drive.Out(0, 1, 70)
         if myUsrf.Distance(3) > 20 and myUsrf.Distance(3) < 50:         
                 drive.Out(0, 1, 30)
         if myUsrf.Distance(3) < 20:       
                drive.Out(0, 1, 0)
                time.sleep(0.5)                   
                drive.Out(0, 2, 70)
                time.sleep(0.2)
                drive.Out(0, 3, 70)
                time.sleep(0.17)
                drive.Out(0, 1, 0)
                time.sleep(0.5)
                a = myUsrf.Distance(3)
                time.sleep(0.5)
                drive.Out(0, 4, 70)
                time.sleep(0.4)
                drive.Out(0, 1, 0)
                b = myUsrf.Distance(3)
                time.sleep(0.5)
                drive.Out(0, 3, 70)
                time.sleep(0.2)
                drive.Out(0, 1, 0)
                if a > b :
                        drive.Out(0, 3, 70)
                        time.sleep(0.4)
                        drive.Out(0, 1, 0)
                        time.sleep(0.3)
                        drive.Out(0, 1, 70)
                if a < b :
                        drive.Out(0, 4, 70)
                        time.sleep(0.5)
                        drive.Out(0, 1, 0)
                        drive.Out(0, 1, 70)

Let’s run the program.

After turning on the robot, open the “Terminal” and mention the catalogue, where the program is located.


“cd projects/SERob3”

Then run the “obstacle_avoiding_v2.py” program through python.


“sudo python2 obstacle_avoiding_v2.py”
Terminal:

Code: Select all

cd projects/SERob3/robots
sudo python2 obstacle_avoiding_v2.py
So, we got the results we needed.