Программа для гиробоя ev3 как написать

Информация о материале
Категория: Первые шаги

Просмотров: 87067

Введение:

Завершающий урок цикла «Первые шаги» посвятим изучению гироскопического датчика. Данный датчик, как и ультразвуковой,  присутствует только в образовательной версии набора Lego mindstorms EV3. Тем не менее, пользователям домашней версии конструктора советуем тоже обратить внимание на данный урок. Возможно, что прочитав о назначении и использовании этого датчика, вы пожелаете его приобрести в дополнение к своему набору.

10.1. Изучаем гироскопический датчик

Гироскопический датчик (Рис. 1) предназначен для измерения угла вращения робота или скорости вращения. Сверху на корпусе датчика нанесены две стрелки, обозначающие плоскость, в которой работает датчик. Поэтому важно правильно установить датчик на робота. Также для более точного измерения крепление гироскопического датчика должно исключать его подвижность относительно корпуса робота. Даже во время прямолинейного движения робота гироскопический датчик может накапливать погрешность измерения угла и скорости вращения, поэтому непосредственно перед измерением следует осуществить сброс в 0 текущего показания датчика. Вращение робота против часовой стрелки формирует отрицательные значения измерений, а вращение по часовой стрелке — положительные.    

Гироскопический датчик

Рис. 1

Рассмотрим программный блок «Гироскопический датчик» (Рис. 2) Желтой палитры. Этот программный блок имеет три режима работы: «Измерение», «Сравнение» и «Сброс». В режиме «Измерение» можно измерить «Угол», «Скорость» или одновременно «Угол и скорость».

Программный блок "Гироскопический датчик"

Рис. 2

Давайте закрепим гироскопический датчик на нашем роботе (Рис. 3), подсоединим его кабелем к порту 4 модуля EV3  и рассмотрим примеры использования.

Крепление гироскопического датчика на роботе

Рис. 3

Задача №22: написать программу движения робота по квадрату с длиной стороны квадрата, равной длине окружности колеса робота.

Решение:

  1. Перед началом движения сбросим датчик в 0, используя программный блок «Гироскопический датчик» Желтой палитры;
  2. Мы уже знаем: чтобы проехать прямолинейно требуемое расстояние — необходимо, воспользовавшись программным блоком «Независимое управление моторами», включить оба мотора на 1 оборот.
  3. Для поворота робота на 90 градусов в этот раз воспользуемся гироскопическим датчиком:
    1. используя программный блок «Независимое управление моторами», заставим робота вращаться вправо вокруг своей оси;
    2. используя программный блок «Ожидание» в режиме «Гироскопический датчик», будем ждать, пока значение угла поворота не достигнет 90 градусов;
    3. Выключим моторы;
  4. Используя программный блок «Цикл» в режиме «Подсчет», повторим шаги 1 — 3 четыре раза.

Попробуйте решить Задачу №22 самостоятельно, не подглядывая в решение.

 Решение Задачи №22 (Нажмите для увеличения)

Рис. 4

«Первые шаги» — послесловие

Десятый урок завершает курс «Первые шаги». На протяжении всех уроков вы познакомились с конструктором Lego mindstorms EV3, со средой программирования, научились использовать моторы и датчики. Если вы успешно одолели курс «Первые шаги», то впереди вас ждет знакомство с решением популярных задач робототехники в рамках курса «Практика». Удачи!  

В среде разработчика LEGO  Mindstorms Education (LME) EV3 есть все необходимое для создания робота «Gyro Boy»:

programmirovanie-lego-l    -> Загрузить и установить среду разработчика LEGO  Mindstorms Education (LME) EV3 ( Система Графического Программирования для LEGO Учитель/Ученик)<-
LEGO®-DIGITAL-DESIGNER -> Загрузить и установить графический редактор LEGO® Digitial Designer ( Система Автоматизированного Проектирования САПР для LEGO®)<-

Обсуждение: 3 комментария

  1. Артём:

    к сожалению ссылки устарели

    Ответить

    1. Ссылки и устарели и переходили на протокол HTTPS и кое где не стыковки. Сейчас исправим. Было некогда следить за сайтом, разрабатываем собственный конструктор роботов на ESP8266

      Ответить

  2. ннанп:

    аравпрвепннанаке

    Ответить

Добавить комментарий

МАСТЕР – КЛАСС

«Путешествие с Гиробоем»

1.              
Орг. Момент.

Здравствуйте,
уважаемые коллеги.

Просмотр видеоролика.

         Одной из важных проблем в России являются её недостаточная
обеспеченность инженерными кадрами и низкий статус инженерного образования.
Данная проблема существует на фоне постоянно возрастающих потребностей в таких
специальностях, как «Инженер-конструктор» и «Программист». Согласно анализу
многих кадровых агентств и других исследователей рынка труда, спрос на
инженерные специальности сохранится, и будет занимать ведущие позиции в
рейтинге востребованности на протяжении многих лет. Поэтому у нас возникла идея
организовать на базе нашей школы кружок по робототехнике. Для этого мы
поставили перед собой следующие задачи:

  1. Пройти курсы по робототехнике.
  2. Закупить конструкторы   LEGO
    Mindstorm Education EV3
  3. Написать программу кружка по
    робототехнике.

Курсы были пройдены (показать сертификат), конструкторы закуплены
(показать конструктор) и программа написана (показать программу). И мы
приступили к решению нашей идеи. Была организована группа учащихся 3-4
классов,  занятия в которой проходят 2 раза в неделю по одному часу. Кружок был
открыт 1 февраля 2018 года.

Целью данного кружка является развитие интереса школьников к конструированию и
программированию, воспитание творческой, технически
грамотной                                    личности, обладающей логическим
мышлением.

Задача данного кружка — познакомить учащихся с конструктором Lego
mindstorms. Научить собирать базовые конструкции роботов, программировать их
под определенные задачи, разобрать с учащимися базовые решения наиболее
распространенных задач-соревнований.

Кружок рассчитан на делающих первые шаги в мир робототехники с
помощью конструктора Lego mindstorms. Программирование роботов объясняется на примере
среды разработки Lego mindstorms EV3.

Сейчас мы Вам покажем  какие результаты мы уже получили.
(демонстрация робота учащимися).

Барботько В.: Сегодня мы покажем какого робота  мы смогли собрать и
запрограммировать. Это очень забавное существо, которое бегает и балансирует на
двух колесиках. Данный робот называется Сигвей или Гиробой. Гиробой
стандартная модель балансирующего робота, которую можно построить из базового
образовательного набора LEGO Mindstorms EV3.

Гордеева Т: Собирали Гиробоя с помощью инструкции. На данном роботе
установлены четыре датчика. Первый датчик называется гироскопический датчик,
который предназначен для измерения угла вращения робота или скорости вращения.
Сверху на корпусе датчика нанесены две стрелки, обозначающие плоскость, в
которой работает датчик. Поэтому важно правильно установить датчик на робота. С
помощью датчика-гироскопа он просчитывает положение в пространстве со скоростью
тысячу раз в минуту. Благодаря этому и удерживает равновесие. 

Вершинин : Второй датчик,
который установлен на Гиробое — это ультразвуковой датчик. Главное назначение ультразвукового датчика, это определение
расстояния до предметов, находящихся перед ним. Для этого датчик посылает
звуковую волну высокой частоты (ультразвук), ловит обратную волну, отраженную
от объекта и, замерив время на возвращение ультразвукового импульса, с высокой
точностью рассчитывает расстояние до предмета.

Глушкова К: Третий датчик установленный на Гиробое — это датчик цвета — это
цифровой датчик, который может определять цвет или яркость
света
, поступающего в небольшое окошко на лицевой стороне
датчика . Этот датчик может работать в трех разных режимах: в режиме «Цвет», в режиме «Яркость отраженного света» и в
режиме «Яркость внешнего освещения».
В режиме «цвет» датчик
цвета распознает семь цветов: черный,
синий, зеленый, желтый, красный, белый и коричневый, а также отсутствие цвета.

Дашин : И последний датчик — это датчик касания. Этот датчик, по сути, представляет собой специальную
кнопку, которая может находиться в двух состояниях:»Нажатие»
 или «Освобождение». Датчик касания  используется, для того,
чтобы определить, когда робот наезжает на препятствие.

Учитель: Ну а теперь ребята
покажут в действии своего робота. (Валера показывает работу робота). Спасибо
Валера.

И вот сегодня,  уважаемые коллеги,  мы с вами соприкоснемся с миром робототехники, мы
научимся собирать и программировать робота. А Вашими консультантами —
помощниками будут ребята.

Наша работа будет состоять из двух этапов.

1 этап. Конструирование.

2 этап. Программирование.

И так,  давайте начнем знакомиться с конструктором.
У Вас на столах стоят контейнеры с образовательным конструктором Lego
mindstorms EV3.  Давайте их отроем.
Условно 
все детали разделены на несколько категорий. На рисунке представлены детали,
называемые балками. Балки исполняют роль каркаса (скелета вашего робота).
Найдите их. (Ищут детали).

Следующая группа деталей служит для
соединения балок между собой. Это д
етали, похожие на цилиндры  называются
пинами.

Ну и основным элементом нашего конструктора является главный блок
EV3. В этом корпусе заключен мозг нашего робота. Именно здесь выполняется
программа, получающая информацию с датчиков, обрабатывающая её и передающая
команды моторам.

Сейчас мы приступаем к 1
этапу – конструированию. У каждой группы на столе лежит алгоритм сборки и
программирования робота.

Задание первое — собрать
робота тележку. Для этого используется пошаговая инструкция. В силу недостатка
времени предлагаем заготовку, вам необходимо её закончить. Начинаем с 31
шага.
Обратите внимание, что в инструкции слева предлагаются детали,
которые необходимы для сборки данного шага. Справа показана сборка необходимых
элементов, и их установка на модель. И так, приступаем к сборке робота тележки,
а если будут возникать вопросы, Вы можете обращаться к консультантам и они Вам
помогут. У Вас должен получиться вот такой робот.


 

Учитель: Занимаясь
конструированием, ребята изучают простые механизмы, учатся работать руками, они
развивают элементарное конструкторское мышление, фантазию, изучают принципы
работы многих механизмов. В ходе занятия повышается коммуникативная активность
каждого ребёнка, формируется умение работать в паре, в группе, происходит
развитие творческих способностей.

И вот наши роботы
тележки собраны переходим ко 2 этапу – программированию
.

На этапе
программирования, Вы должны составить программу для своего робота, чтобы он
двигалась и если у Вас получиться издавал звуки. Для этого открываем ноутбуки и
на рабочем столе находим среду программирования Lego mindstorms EV3.

  

 В главном меню
программы выбираем: «Файл» — «Новый проект» или
нажимаем «, показанный на рисунке стрелкой.

 

В одном проекте
может находиться множество программ. Для того, чтобы проект корректно
загружался в нашего робота необходимо в названии проекта и программ
использовать только буквы латинского алфавита!
Давайте назовем
наш проект lessons (уроки), а первую программу —lesson-1 (урок-1).
Для того, чтобы дать название проекту, воспользуемся главным меню программы: «Файл»
— «Сохранить проект как…».

Каждая программа
состоит из цепочки блоков, задающих определенное действие. Каждый блок имеет
множество различных параметров. Первый, оранжевый блок с зеленым треугольником
внутри называется — «Начало». Именно с него
начинается любая программа для нашего робота. 

Алгоритм программирования робота тележки

Если модель будет
двигаться, то работа выполнена верно. По 1 представителю от группы подходят и
презентуют своего робота тележку.

МОЛОДЦЫ.

 Рефлексия.

 Сегодняшним
школьникам предстоит:

·       работать по
профессиям, которых пока нет,

·       использовать
технологии, которые еще не созданы,

·       решать задачи, о
которых мы можем лишь догадываться.

Школьное
образование должно соответствовать целям опережающего развития. Для этого в
школе должно быть обеспечено:

ü изучение не
только достижений прошлого, но и технологий, которые пригодятся в будущем,

ü обучение, ориентированное
как на знания так и на деятельностный аспекты содержания образования.

     Именно таким
требованиям отвечает робототехника.

Итак, давайте
ответим с Вами на вопросы:

Участники по
кругу
высказываются одним предложением, выбирая начало фразы из рефлексивного
экрана на доске:

сегодня
мы узнали…

было
интересно…

было
трудно…

мы
выполняли задания…

теперь
мы можем…

ямы
почувствовали, что…

мы
научились…

у
нас получилось …

мы
смогли…

меня
удивило…

мне
захотелось…

Благодарю за
сотрудничество.


 

Share Button

Название проекта: Гиробой (Gyro Boy, сигвей) — робот из Lego Mindstorms
Платформа: LEGO Mindstorms

Gyro Boy — стандартная модель балансирующего робота, которую можно построить из базового образовательного набора LEGO Mindstorms EV3 Education. Робот-сигвей имеет гироскопический датчик для балансировки.

Скачать инструкцию по сборке.

Использованные компоненты: базовый набор LEGO Mindstorms Education EV3, артикул 45544

Сайт проекта: http://robotsquare.com/2013/10/01/education-ev3-45544-instruction/, https://education.lego.com/ru-ru/support/mindstorms-ev3/building-instructions

Другие проекты на этой платформе:

  • Двуногий робот из Arduino, LEGO и деталей 3D печати
  • LEGO EV3 робот-художник
  • SpinnerBot из LEGO Mindstorms
  • LegoGun — двуствольный пистолет из Lego Mindstorms EV3
  • Спирограф — рисующий робот из LEGO Mindstorms EV3
  • Бесполезная коробка из Lego Mindstoms EV3
  • Гексапод из Lego Mindstorms EV3
  • Роботизированная рука из Lego Mindstorms EV3
  • Подъемные механизмы из LEGO Mindstorms
  • Прибор автоматической подачи одноразовых стаканчиков из LEGO Mindstorms
  • Робот-кабан-динозавр DINOR3X из LEGO Mindstorms EV3
  • Znap — робот из LEGO Mindstorms EV3
  • Робот-сортировщик (Color Sorter) из LEGO Mindstorms EV3
  • Робот Educator Vehicle из LEGO Mindstorms EV3
  • Робот-манипулятор Arm H25 из LEGO Mindstorms
  • Робот-гексапод NXTAPOD из LEGO Mindstorms. Модель Даниэля Бенедеттелли
  • Робот-щенок (Puppy) из LEGO Mindstorms EV3
  • Лимоноид — робот, продающий напитки
  • Киноаппарат из Lego Mindstorms
  • Принтер из Lego Mindstorms «STALKER ver. 2.0»
  • Робот-пожарный из LEGO Mindstorms
  • Крестики-нолики — ARBUZIKI-TEAM
  • EZ Wilber — говорящий балансирующий робот из Lego Mindstorms
  • Ev3 Print3rbot — робот-художник из Lego Mindstorms
  • 3D-принтер из Lego печатает шоколадом
  • Lego Mindstorms NXT 2.0 играет в шахматы
  • Робот-гексапод из Lego Mindstorms NXT 2.0
  • Робоноги из Lego Mindstorms
  • Lego Mindstorms-экскаватор, управляемый Microsoft Kinect
  • Lego-робот DIZZ3
  • Крестики-нолики для Lego-робота
  • Lego Mindstorms EV3 3D-принтер 2.0

Перейти в каталог DIY-проектов роботов

Как добавить робопроект в каталог?

Share Button

Теги: Lego Education, Lego Mindstorms, инструкция

This program makes Gyro Boy balance on its two wheels using the
GyroSensor. The duty cycle of the
motors is continuously adjusted as a function of the gyro angle, the gyro
speed, the motor angles, and the motor speeds, in order to maintain balance.

This program also uses a
Python generator function (a function that uses yield instead of return) as
a coroutine. Coroutines are a form of cooperative multitasking that allows the
robot perform multiple tasks at the same time. This lets you drive it around
while it is busy balancing.

Building instructions

Click here to find all building instructions for the Core Set Models, or use
this link to go to Gyro Boy directly.

../_images/gyro_boy.jpg

Figure 30 Gyro Boy

Example program

#!/usr/bin/env pybricks-micropython

"""
Example LEGO® MINDSTORMS® EV3 Gyro Boy Program
----------------------------------------------

This program requires LEGO® EV3 MicroPython v2.0.
Download: https://education.lego.com/en-us/support/mindstorms-ev3/python-for-ev3

Building instructions can be found at:
https://education.lego.com/en-us/support/mindstorms-ev3/building-instructions#building-core
"""

from ucollections import namedtuple
import urandom

from pybricks.hubs import EV3Brick
from pybricks.ev3devices import Motor, UltrasonicSensor, ColorSensor, GyroSensor
from pybricks.parameters import Port, Color, ImageFile, SoundFile
from pybricks.tools import wait, StopWatch

# Initialize the EV3 brick.
ev3 = EV3Brick()

# Initialize the motors connected to the drive wheels.
left_motor = Motor(Port.D)
right_motor = Motor(Port.A)

# Initialize the motor connected to the arms.
arm_motor = Motor(Port.C)

# Initialize the Color Sensor. It is used to detect the colors that command
# which way the robot should move.
color_sensor = ColorSensor(Port.S1)

# Initialize the gyro sensor. It is used to provide feedback for balancing the
# robot.
gyro_sensor = GyroSensor(Port.S2)

# Initialize the ultrasonic sensor. It is used to detect when the robot gets
# too close to an obstruction.
ultrasonic_sensor = UltrasonicSensor(Port.S4)

# Initialize the timers.
fall_timer = StopWatch()
single_loop_timer = StopWatch()
control_loop_timer = StopWatch()
action_timer = StopWatch()


# The following (UPPERCASE names) are constants that control how the program
# behaves.

GYRO_CALIBRATION_LOOP_COUNT = 200
GYRO_OFFSET_FACTOR = 0.0005
TARGET_LOOP_PERIOD = 15  # ms
ARM_MOTOR_SPEED = 600  # deg/s

# Actions will be used to change which way the robot drives.
Action = namedtuple('Action ', ['drive_speed', 'steering'])

# These are the pre-defined actions
STOP = Action(drive_speed=0, steering=0)
FORWARD_FAST = Action(drive_speed=150, steering=0)
FORWARD_SLOW = Action(drive_speed=40, steering=0)
BACKWARD_FAST = Action(drive_speed=-75, steering=0)
BACKWARD_SLOW = Action(drive_speed=-10, steering=0)
TURN_RIGHT = Action(drive_speed=0, steering=70)
TURN_LEFT = Action(drive_speed=0, steering=-70)

# The colors that the color sensor can detect are mapped to actions that the
# robot can perform.
ACTION_MAP = {
    Color.RED: STOP,
    Color.GREEN: FORWARD_FAST,
    Color.BLUE: TURN_RIGHT,
    Color.YELLOW: TURN_LEFT,
    Color.WHITE: BACKWARD_FAST,
}


# This function monitors the color sensor and ultrasonic sensor.
#
# It is important that no blocking calls are made in this function, otherwise
# it will affect the control loop time in the main program. Instead, we yield
# to the control loop while we are waiting for a certain thing to happen like
# this:
#
#     while not condition:
#         yield
#
# We also use yield to update the drive speed and steering values in the main
# control loop:
#
#     yield action
#
def update_action():
    arm_motor.reset_angle(0)
    action_timer.reset()

    # Drive forward for 4 seconds to leave stand, then stop.
    yield FORWARD_SLOW
    while action_timer.time() < 4000:
        yield

    action = STOP
    yield action

    # Start checking sensors on arms. When specific conditions are sensed,
    # different actions will be performed.
    while True:
        # First, we check the color sensor. The detected color is looked up in
        # the action map.
        new_action = ACTION_MAP.get(color_sensor.color())

        # If the color was found, beep for 0.1 seconds and then change the
        # action depending on which color was detected.
        if new_action is not None:
            action_timer.reset()
            ev3.speaker.beep(1000, -1)
            while action_timer.time() < 100:
                yield
            ev3.speaker.beep(0, -1)

            # If the new action involves steering, combine the new steering
            # with the old drive speed. Otherwise, use the entire new action.
            if new_action.steering != 0:
                action = Action(drive_speed=action.drive_speed,
                                steering=new_action.steering)
            else:
                action = new_action
            yield action

        # If the measured distance of the ultrasonic sensor is less than 250
        # millimeters, then back up slowly.
        if ultrasonic_sensor.distance() < 250:
            # Back up slowly while wiggling the arms back and forth.
            yield BACKWARD_SLOW

            arm_motor.run_angle(ARM_MOTOR_SPEED, 30, wait=False)
            while not arm_motor.control.done():
                yield
            arm_motor.run_angle(ARM_MOTOR_SPEED, -60, wait=False)
            while not arm_motor.control.done():
                yield
            arm_motor.run_angle(ARM_MOTOR_SPEED, 30, wait=False)
            while not arm_motor.control.done():
                yield

            # Randomly turn left or right for 4 seconds while still backing
            # up slowly.
            turn = urandom.choice([TURN_LEFT, TURN_RIGHT])
            yield Action(drive_speed=BACKWARD_SLOW.drive_speed,
                         steering=turn.steering)
            action_timer.reset()
            while action_timer.time() < 4000:
                yield

            # Beep and then restore the previous action from before the
            # ultrasonic sensor detected an obstruction.
            action_timer.reset()
            ev3.speaker.beep(1000, -1)
            while action_timer.time() < 100:
                yield
            ev3.speaker.beep(0, -1)

            yield action

        # This adds a small delay since we don't need to read these sensors
        # continuously. Reading once every 100 milliseconds is fast enough.
        action_timer.reset()
        while action_timer.time() < 100:
            yield


# If we fall over in the middle of an action, the arm motors could be moving or
# the speaker could be beeping, so we need to stop both of those.
def stop_action():
    ev3.speaker.beep(0, -1)
    arm_motor.run_target(ARM_MOTOR_SPEED, 0)


while True:
    # Sleeping eyes and light off let us know that the robot is waiting for
    # any movement to stop before the program can continue.
    ev3.screen.load_image(ImageFile.SLEEPING)
    ev3.light.off()

    # Reset the sensors and variables.
    left_motor.reset_angle(0)
    right_motor.reset_angle(0)
    fall_timer.reset()

    motor_position_sum = 0
    wheel_angle = 0
    motor_position_change = [0, 0, 0, 0]
    drive_speed, steering = 0, 0
    control_loop_count = 0
    robot_body_angle = -0.25

    # Since update_action() is a generator (it uses "yield" instead of
    # "return") this doesn't actually run update_action() right now but
    # rather prepares it for use later.
    action_task = update_action()

    # Calibrate the gyro offset. This makes sure that the robot is perfectly
    # still by making sure that the measured rate does not fluctuate more than
    # 2 deg/s. Gyro drift can cause the rate to be non-zero even when the robot
    # is not moving, so we save that value for use later.
    while True:
        gyro_minimum_rate, gyro_maximum_rate = 440, -440
        gyro_sum = 0
        for _ in range(GYRO_CALIBRATION_LOOP_COUNT):
            gyro_sensor_value = gyro_sensor.speed()
            gyro_sum += gyro_sensor_value
            if gyro_sensor_value > gyro_maximum_rate:
                gyro_maximum_rate = gyro_sensor_value
            if gyro_sensor_value < gyro_minimum_rate:
                gyro_minimum_rate = gyro_sensor_value
            wait(5)
        if gyro_maximum_rate - gyro_minimum_rate < 2:
            break
    gyro_offset = gyro_sum / GYRO_CALIBRATION_LOOP_COUNT

    # Awake eyes and green light let us know that the robot is ready to go!
    ev3.speaker.play_file(SoundFile.SPEED_UP)
    ev3.screen.load_image(ImageFile.AWAKE)
    ev3.light.on(Color.GREEN)

    # Main control loop for balancing the robot.
    while True:
        # This timer measures how long a single loop takes. This will be used
        # to help keep the loop time consistent, even when different actions
        # are happening.
        single_loop_timer.reset()

        # This calculates the average control loop period. This is used in the
        # control feedback calculation instead of the single loop time to
        # filter out random fluctuations.
        if control_loop_count == 0:
            # The first time through the loop, we need to assign a value to
            # avoid dividing by zero later.
            average_control_loop_period = TARGET_LOOP_PERIOD / 1000
            control_loop_timer.reset()
        else:
            average_control_loop_period = (control_loop_timer.time() / 1000 /
                                           control_loop_count)
        control_loop_count += 1

        # calculate robot body angle and speed
        gyro_sensor_value = gyro_sensor.speed()
        gyro_offset *= (1 - GYRO_OFFSET_FACTOR)
        gyro_offset += GYRO_OFFSET_FACTOR * gyro_sensor_value
        robot_body_rate = gyro_sensor_value - gyro_offset
        robot_body_angle += robot_body_rate * average_control_loop_period

        # calculate wheel angle and speed
        left_motor_angle = left_motor.angle()
        right_motor_angle = right_motor.angle()
        previous_motor_sum = motor_position_sum
        motor_position_sum = left_motor_angle + right_motor_angle
        change = motor_position_sum - previous_motor_sum
        motor_position_change.insert(0, change)
        del motor_position_change[-1]
        wheel_angle += change - drive_speed * average_control_loop_period
        wheel_rate = sum(motor_position_change) / 4 / average_control_loop_period

        # This is the main control feedback calculation.
        output_power = (-0.01 * drive_speed) + (0.8 * robot_body_rate +
                                                15 * robot_body_angle +
                                                0.08 * wheel_rate +
                                                0.12 * wheel_angle)
        if output_power > 100:
            output_power = 100
        if output_power < -100:
            output_power = -100

        # Drive the motors.
        left_motor.dc(output_power - 0.1 * steering)
        right_motor.dc(output_power + 0.1 * steering)

        # Check if robot fell down. If the output speed is +/-100% for more
        # than one second, we know that we are no longer balancing properly.
        if abs(output_power) < 100:
            fall_timer.reset()
        elif fall_timer.time() > 1000:
            break

        # This runs update_action() until the next "yield" statement.
        action = next(action_task)
        if action is not None:
            drive_speed, steering = action

        # Make sure loop time is at least TARGET_LOOP_PERIOD. The output power
        # calculation above depends on having a certain amount of time in each
        # loop.
        wait(TARGET_LOOP_PERIOD - single_loop_timer.time())

    # Handle falling over. If we get to this point in the program, it means
    # that the robot fell over.

    # Stop all of the motors.
    stop_action()
    left_motor.stop()
    right_motor.stop()

    # Knocked out eyes and red light let us know that the robot lost its
    # balance.
    ev3.light.on(Color.RED)
    ev3.screen.load_image(ImageFile.KNOCKED_OUT)
    ev3.speaker.play_file(SoundFile.SPEED_DOWN)

    # Wait for a few seconds before trying to balance again.
    wait(3000)

Поворот при помощи датчика

Ваша задача состоит в том, чтобы запрограммировать своего робота на выполнение поворота на месте на точный угол, используя гироскопический датчик.

Пошаговые действия

  1. Постройте своего робота.
  2. Создайте свою программу.
  3. Далее установите робота в позицию 2 на поле 2 и запустите программу.
  4. Запишите результаты.
  5. Продолжите изучать использование гироскопического датчика для управления движениями робота.

Прежде чем вы начнете выполнять эту миссию, советуем изучить следующие разделы пособий самоучителя:
• Остановиться под углом
• Цикл

При выполнении миссии учащиеся будут изучать связь между вводом датчика и поведением робота. Приводная платформа будет вращаться под управлением гироскопического датчика.

Наблюдайте за учащимися, чтобы удостовериться, что они:
• используют правильную терминологию;
• понимают функционирование программируемых блоков;
• находят подходящие способы проверки угла поворота своего робота;
• понимают, какие факторы могут повлиять на точность остановки при использовании гироскопического датчика (погрешность датчика, мертвый ход мотора и вращающий момент).

Соединение с реальным миром

( 5 мин. )

Поворот с использованием колеса является не очень точным. Если вы попытаетесь повернуть своего робота на пыльной или скользкой поверхности, он может не достичь правильного угла. Гироскопический датчик поможет вам выполнить гораздо более точные движения.

Ваша задача состоит в том, чтобы запрограммировать своего робота на выполнение поворота на месте на точный угол, используя гироскопический датчик.

Создание модели

( 20 мин. )

Постройте своего робота
Нажмите ссылки ниже, чтобы открыть инструкции по сборке, затем соберите модель и вернитесь к этому проекту, чтобы продолжить. Пропустите этот шаг, если модель уже собрана.

ВАЖНОЕ ЗАМЕЧАНИЕ.
Гироскопический датчик и модуль EV3 должны быть неподвижны при подсоединении кабеля и во время запуска модуля EV3.

Создайте свою программу
Воссоздайте показанную программу и загрузите ее в своего робота.

Сводка программы
Старт
Независимое управление моторами – Мощность B[10], Мощность C[-10]
Ожидание – Гироскопический датчик – Сравнить угол – Тип[3] (Больше чем или равно), Градусы [90]
Независимое управление моторами – Выкл

Устранение неполадок
Требуется корректировка угла – как правило, значение должно быть меньше 90 градусов.

Теория
При использовании гироскопического датчика значение оборотов, записанное в блоке датчика, соответствует повороту приводной платформы. Точность датчика составляет +/- 3 градуса. Мертвый ход мотора и задержка, вызванная прекращением действия вращающего момента, также могут повлиять на точность.
Такие факторы, как мощность батареи, размер колес, трение робота о поверхность, расстояние между двумя колесами, больше не влияют на точность поворота робота.

Совместное обсуждение

( 20 мин. )

Запустите программу и наблюдайте.
Установите робота в исходную позицию 2 на поле 2 и запустите программу.

Записывайте свои выводы
• Опишите, что делал каждый из ваших программируемых блоков:
Мой робот поворачивался на месте до тех пор, пока гироскопический датчик не выдал значение 90 градусов, и остановился.
• Определите угол поворота робота:
Мой робот повернулся примерно на 90 градусов.
• Объясните различие между поворотом робота, сделанным с гироскопическим датчиком и без него.
Поворот под управлением гироскопического датчика связан с меньшим числом факторов неопределенности поведения робота.

Рефлексия и изменение
Измените свою программу таким образом, чтобы робот выполнил следующие повороты на месте:

  1. Выполнил поворот на месте по часовой стрелке на 45 градусов.
  2. Выполнил поворот на месте по часовой стрелке на 180 градусов.
  3. Выполнил поворот на месте по часовой стрелке на 360 градусов, а затем против часовой стрелки на 360 градусов.

На сколько повернулся робот по сравнению с тем, что требовала программа?
Он обычно поворачивался дальше из-за вращающего момента.

Задача
Поверните робота на 45 градусов по часовой стрелке.

Решение — Сводка программы
Старт
Независимое управление моторами – Мощность B[10], Мощность C[-10]
Ожидание – Гироскопический датчик – Сравнить угол – Тип[3] (Больше чем или равно), Градусы [45]
Независимое управление моторами – Выкл
Устранение неполадок
Требуется корректировка угла – как правило, значение должно быть меньше 45 градусов.

Задача
Поверните робота на 180 градусов по часовой стрелке.

Решение — Сводка программы
Старт
Независимое управление моторами – Мощность B[10], Мощность C[-10]
Ожидание – Гироскопический датчик – Сравнить угол – Тип[3] (Больше чем или равно), Градусы [180]
Независимое управление моторами – Выкл
Устранение неполадок
Требуется корректировка угла – как правило, значение должно быть меньше 180 градусов.

Задача
Поверните робота на месте по часовой стрелке на 360 градусов, а затем против часовой стрелки на 360 градусов.

Решение — Сводка программы
Старт
Независимое управление моторами – Мощность B[10], Мощность C[-10]
Ожидание – Гироскопический датчик – Сравнить угол – Тип[3] (Больше чем или равно), Градусы [360]
Независимое управление моторами – Выкл
Ожидание – Секунды[2]
Независимое управление моторами – Мощность B[10], Мощность C[-10]
Ожидание – Гироскопический датчик – Сравнить угол – Тип[5] (Меньше чем или равно), Градусы [0]
Независимое управление моторами – Выкл

Совершенствование

( 15 мин. )

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

Когда вы будете готовы, испытайте свою программу в исходной позиции 4 на учебном поле 1.

Решение — Сводка программы
Старт
Цикл – Счетчик[4]
Рулевое управление – Градусы[682], Мощность[30]
Ожидание – Время [1с]
Независимое управление моторами – Вкл, Мощность B[10], Мощность C[-10]
Ожидание – Гироскопический датчик – Изменить угол – Направление[0] (Увеличение), Градусы[85]
Независимое управление моторами – Выкл
Ожидание – Время [1с]

Устранение неполадок
Требуется корректировка угла – как правило, значение должно быть меньше 90 градусов.

Объясните, для чего может использоваться цикл:
Я могу использовать циклическую структуру для повторения действий.

Дополнительно

  1. Создайте новую программу, которая заставляет робота двигаться по периметру треугольника. Когда вы будете готовы, испытайте свою программу в исходной позиции 4 на поле 1.
  2. Запрограммируйте робота на движение по траекториям другой формы.

Теперь вы умеете использовать гироскопический датчик для выполнения поворотов. Отлично!

Источник

Гироскопический датчик Lego EV3

Гироскопический датчик EV3

Гироскопический датчик EV3 поставляется в составе образовательного конструктора Lego Mindstorms EV3. В домашней версии Lego EV3 датчика гироскопа нет. Если есть необходимость, его можно купить отдельно.

Датчик гироскоп — это цифровой датчик

Принцип работы гироскопического датчика

Принцип работы датчика заключается в том, что он способен отслеживать вращение. Датчик гироскопа EV3 способен обнаружить вращение всего по одной оси. На верхней стороне датчика мы можем увидеть две стрелки. Эти стрелки показывают нам плоскость работы гироскопического датчика.

датчик гироскопа

  1. При вращении датчика в плоскости стрелок на верхней части датчика он может определять угловую скорость вращения. Она измеряется в градусах в секунду. 440 градусов в секунду является максимальной угловой скоростью, которую модет измерить датчик.
  2. Кроме скорости вращения датчик может определять угол вращения. Измерение угла вращения происходит в градусах. Точность измерения гироскопического датчика +/- 3 градуса если поворот на 90 градусов.

Особенности датчика гироскопа EV3

Для правильной работы датчика его нужно включать в контроллер EV3 в полностью неподвижном состоянии. Когда мы устанавливаем гироскопический датчик на робота обязательным условием является полная неподвижность робота в его начальном состоянии. Робот должен стоять без движения, иначе датчик будет работать некорректно. При помощи этого датчика можно легко программировать повороты робота вокруг оси. Датчик имеет частоту дискретизации 1 килогерц.

Сенсор подключается к блоку программирования EV3 плоским черным соединительным кабелем, который входит в набор. Гироскопический датчик можно подключить к любому входному порту, который обозначен цифрами от 1 до 4. Но по умолчанию датчик подключается во второй порт. Программное обеспечение контроллера Lego EV3 автоматически определяет порт подключения датчика.

порт контроллера

Одной из особенностей датчика гироскопа EV3 является проблема дрейфа. Она состоит в том, что, когда датчик в покое т.е. неподвижен, его показания изменяются и постоянно увеличиваются. Эта проблема может быть решена несколькими способами, но это лучше рассматривать в отдельной статье.

Области применения гироскопического датчика

Гироскопические датчики широко распространены и применяются как в быту, так и в промышленных и военных областях. В быту, например, гироскопы стабилизируют поведение радиоуправляемых моделей самолетов и вертолетов. Навигация и управление транспортными средствами также использует датчики гироскопы. В легковых автомобилях датчики активируют подушки безопасности при опрокидывании.

модели на радиоуправлении

Системы навигации и системы реагирования на чрезвычайные ситуации используют гироскопические датчики для повышения надежности работы оборудования. Роботы, роботизированные платформы в военной области используют датчики гироскопы в системах управления и наведения. Подводные лодки, самолеты, автономные подводные аппараты и многое другое не могут эффективно работать без применения гироскопических датчиков.

Практически на всех смартфонах также установлен датчик гироскопа. Он часто используется в мобильных играх, функциях автоповорота изображения и многих других. Можно привести еще множество примеров использования датчика гироскопа. Но в нашем случае мы изучаем очень простой датчик, который позволяет понять основные принципы работы гироскопов.

Гироскопический датчик EV3

Источник

LEGO MINDSTORMS Education EV3 + MicroPython: программируем детский конструктор взрослым языком

Привет, Хабр! Мы уже рассказывали о платформе LEGO MINDSTORMS Education EV3. Основные задачи этой платформы — обучение на практических примерах, развитие навыков STEAM и формирование инженерного мышления. В ней можно проводить лабораторные работы по изучению механики и динамики. Лабораторные стенды из кубиков LEGO и утилиты по регистрации и обработке данных делают опыты еще интереснее и нагляднее и помогают детям лучше понять физику. Например, школьники могут собрать данные о температуре плавления и с помощью приложения систематизировать их и представить в виде графика. Но это только начало: сегодня мы расскажем, как дополнить этот набор средой программирования MicroPython и использовать его для обучения робототехнике.

Учим программированию с помощью EV3

Современные школьники хотят видеть красочный результат. Да, им скучно, если программа выводит в консоль числа, и они хотят рассматривать цветные графики, диаграммы и создавать настоящих роботов, движущихся и выполняющих команды. Обычный код тоже кажется детям слишком сложным, поэтому обучение лучше начинать с чего-нибудь полегче.

Базовая среда программирования EV3 создана на основе графического языка LabVIEW и позволяет задавать алгоритмы для робота визуально: команды представлены в виде блоков, которые можно перетаскивать и соединять.

Такой способ хорошо работает, когда нужно показать, как строятся алгоритмы, но он не подходит для программ с большим количеством блоков. При усложнении сценариев необходимо переходить на программирование с помощью кода, но детям трудно сделать этот шаг.

Здесь есть несколько хитростей, одна из которых — показать, что код выполняет те же задачи, что и блоки. В среде EV3 это можно сделать благодаря интеграции с MicroPython: дети создают одну и ту же программу в базовой среде программирования с помощью блоков и на языке Python в Visual Studio Code от Microsoft. Они видят, что оба способа работают одинаково, но кодом решать сложные задачи удобнее.

Переходим на MicroPython

Среда EV3 построена на базе процессора ARM9, и разработчики специально оставили архитектуру открытой. Это решение позволило накатывать альтернативные прошивки, одной из которых стал образ для работы с MicroPython. Он позволяет использовать Python для программирования EV3, что делает работу с набором еще ближе к задачам из реальной жизни.

Чтобы начать работать, нужно скачать образ EV3 MicroPython на любую microSD-карту, установить ее в микрокомпьютер EV3 и включить его. Затем нужно установить бесплатное расширение для Visual Studio. И можно приступить к работе.

Программируем первого робота на MycroPython

На нашем сайте есть несколько уроков для освоения базовых понятий робототехники. Модели на EV3 знакомят детей с азами, которые используются в самоуправляемых автомобилях, заводских роботах-сборщиках, станках с ЧПУ.

Мы возьмем для примера чертежную машину, которую можно научить рисовать узоры и геометрические фигуры. Данный кейс является упрощенным вариантом взрослых роботов-сварщиков или фрезеровщиков и показывает, как можно использовать EV3 совместно с MicroPython для обучения школьников. А еще чертежная машина может разметить отверстия в печатной плате для папы, но это уже другой уровень, требующий математических расчетов.

Для работы нам понадобятся:

  • базовый набор LEGO MINDSTORMS Education EV3;
  • большой лист клетчатой бумаги;
  • цветные маркеры.

Сборка самого робота есть в инструкции, а мы рассмотрим пример программирования.

Сначала инициализируем библиотеку модулей EV3:

Настраиваем платформу, которая вращает ручку как мотор в порте B. Задаем передаточное отношение двухступенчатой зубчатой передачи с количеством зубьев 20-12-28 соответственно.

Настраиваем подъемный механизм для ручки как мотор в порте C:

Настраиваем гироскоп, измеряющий угол наклона ручки, в порте 2:

Настраиваем цветовой датчик в порте 3. Датчик используется, чтобы определять белую бумагу под чертежной машиной:

Настраиваем датчик касания в порте 4. Робот начинает рисовать, когда датчик нажат:

Определяем функции, которые поднимают и опускают ручку:

Определяем функцию для поворота ручки на заданный угол или до определенного угла:

Если целевой угол больше, чем текущий угол гироскопического датчика, продолжаем движение по часовой стрелке с положительной скоростью:

Если целевой угол меньше, чем текущий гироскопического датчика, то двигаемся против часовой стрелки:

Останавливаем вращающуюся платформу, когда целевой угол будет достигнут:

Устанавливаем начальное положение ручки в верхнем положении:

Теперь идет основная часть программы — бесконечный цикл. Сначала EV3 ожидает, когда датчик цвета обнаружит белую бумагу или синюю стартовую клетку, а датчик касания будет нажат. Затем он рисует узор, возвращается в исходное положение и повторяет все заново.

Когда устройство не готово, светодиоды на контроллере принимают красный цвет, и на ЖК-экране отображается изображение «палец вниз»:

Дожидаемся, когда датчик цвета считает синий или белый цвет, устанавливаем цвет светодиодов зеленым, отображаем на ЖК-экране изображение «палец вверх» и сообщаем, что устройство готово к работе:

Дожидаемся нажатия датчика касания, присваиваем гироскопическому датчику значение угла 0 и начинаем рисовать:

Поднимаем держатель ручки и возвращаем его в исходное положение:

Вот такая несложная программа у нас получилась. И теперь запускаем ее и смотрим на робота-чертежника в деле.

Что дают такие примеры

EV3 — это инструмент для профориентации в рамках профессий STEM и точка входа в инженерные специальности. Так как на нем можно решать практические задачи, дети получают опыт технических разработок и создания промышленных роботов, учатся моделировать реальные ситуации, понимать программы и анализировать алгоритмы, осваивают базовые конструкции программирования.

Поддержка MicroPython делает платформу EV3 подходящей для обучения в старших классах. Ученики могут попробовать себя в роли программистов на одном из самых популярных современных языков, познакомиться с профессиями, связанными с программированием и инженерным проектированием. Наборы EV3 показывают, что писать код — это не страшно, готовят к серьезным инженерным задачам и помогают сделать первый шаг к освоению технических специальностей. А для тех, кто работает в школе и связан с образованием, у нас подготовлены программы занятий и учебные материалы. В них детально расписано, какие навыки формируются при выполнении тех или иных задач, и как полученные навыки соотносятся со стандартами обучения.

Источник

Использование гироскопического датчика. Пример программы, непрерывно измеряющей и выводящей на экран показания гироскопа в градусах.

В режиме 0 гироскопический датчик измеряет угол поворота в градусах относительно позиции датчика на момент старта программы или сброса его показаний.  Так как датчик одноосный, он может измерять угол в той плоскости, в которой он установлен. Для чтения показаний в этом режиме удобно использовать метод Sensor.ReadRawValue(), который возвращает массив из единственного 0-го элемента, содержащего значение угла поворота в градусах.

Напоминаем: на LCD экране блока Lego EV3 можно печатать тексты только английскими буквами!

Вы можете скопировать указанный ниже код программы в IDE MS Small Basic с установленной библиотекой EV3, подключенным блоком Lego EV3 и гироскопическим датчиком, подключенным к 3 порту блока и запустить:

Sensor.SetMode(3,0) ' режим 0 – измерение угла поворота в градусах

While "True" ' бесконечный цикл

LCD.Clear()

LCD.Text(1, 35, 50, 2, Sensor.ReadRawValue(3, 0) + " deg")

Program.Delay(100) ' ждем 0.1 секунды

EndWhile

В режиме 1 гироскопический датчик измеряет угловую скорость поворота в градусах в секунду.

Если в программе заменить режим работы датчика, заменив первую строку на

Sensor.SetMode(3,0) ' режим 1 – измерение угловой скорости в градусах в секунду

а в четвёртой строке — поменять " deg" на " deg/s", то вы увидите на экране угловую скорость вращения в градусах в секунду.

Поделиться:

Понравилась статья? Поделить с друзьями:
  • Программа передач как правильно пишется
  • Программа excel как правильно написать
  • Программа передач как пишется слово
  • Программ или програм как пишется
  • Программа не усвоена как пишется