В программе на Python объект robot уже готов: создавать его и подключать модуль робота не нужно. Все команды пишутся как robot.команда(...).
Единицы: расстояние — миллиметры (mm) или сантиметры (cm), угол — градусы, время — секунды, скорость — проценты мощности от 1 до 100. Можно подключать math, random и time: import random.
Пауза в программе — robot.wait(секунды), а не time.sleep.
Рассказать роботу, как он собран: колёса, расстояние между ними, разъёмы моторов.
Робот считает, на сколько градусов крутить колёса, чтобы проехать нужные сантиметры. Для этого он должен знать диаметр колеса и расстояние между колёсами.
Укажи только то, что отличается от настроек робота. Остальное останется как было.
Левое и правое колесо должны стоять в разных разъёмах.
Пиши каждый параметр с именем, как в примере.
Параметр
Тип
По умолчанию
Что это
wheel_diameter_mm
число
None
Диаметр колеса, миллиметры. Больше нуля.
track_width_mm
число
None
Расстояние между колёсами, миллиметры. Больше нуля.
left_motor
буква или число
None
Разъём левого колеса: "A"–"D" или 1–4.
right_motor
буква или число
None
Разъём правого колеса: "A"–"D" или 1–4.
forward_sign
число
None
1 — колёса крутятся «вперёд» как обычно. -1 — моторы стоят зеркально, и «вперёд» нужно перевернуть.
Обычно вызывать не нужно: приложение робота закрывает связь само, когда программа заканчивается.
После close() команды движения больше не работают.
robot.forward_cm(10)
robot.close()
Моторы
Отдельный мотор выбирается по разъёму модуля робота: буквы A, B, C, D или номера 1–4 (1 — это D, 2 — C, 3 — B, 4 — A). Получить мотор: motor = robot.motor("A").
Мотор получается командой robot.motor("A"). Сохрани его в переменную и вызывай его команды: run_angle, run_time, run, stop, reset_angle, свойство angle.
Мотор не знает про «лево» и «право»: +90 значит ровно «повернуть вал на 90 градусов в плюс».
Мотор поворачивается на angle градусов и останавливается сам. Знак угла — направление: 90 в одну сторону, -90 в другую.
Если угол равен нулю, ничего не происходит.
Параметр
Тип
По умолчанию
Что это
angle
число
—
Угол, градусы. Минус — в другую сторону. 360 — полный оборот вала.
speed
число
50
Скорость, проценты мощности от 1 до 100. Чем больше, тем быстрее. Минус здесь не меняет направление: число меньше 1 считается как 1, и движение будет очень медленным. Направление задаёт знак угла, а не скорости.
wait
True или False
True
True — программа ждёт, пока робот доедет. False — программа сразу идёт дальше, а робот едет. Пока он едет, давай ему время командой robot.wait(секунды): без неё робот остановится меньше чем через секунду, а в конце программы — сразу. Пиши его с именем: wait=False.
m = robot.motor("C")
m.run_angle(90, speed=40)
m.run_angle(-90, speed=40)
Мотор крутится, а программа сразу идёт дальше. Мотор крутится, пока программа ждёт в robot.wait(секунды) или даёт новые команды движения. Если программа делает что-то другое без robot.wait, мотор остановится меньше чем через секунду. В цикле пиши robot.wait(0.1). В конце программы мотор останавливается. Остановить раньше: motor.stop().
Параметр
Тип
По умолчанию
Что это
speed
число
50
Скорость, проценты мощности от −100 до 100. Минус — вращение в другую сторону.
fan = robot.motor("A")
fan.run(70)
robot.wait(2)
fan.stop()
Сколько градусов повернулся вал с включения модуля робота или с последнего reset_angle(). Прошлые программы тоже считаются, поэтому в начале программы вызови reset_angle().
Поворот в плюс (как run_angle(90)) — плюс, в другую сторону — минус.
Возвращает. Число — градусы.
m = robot.motor("C")
m.reset_angle()
m.run_angle(90)
print(m.angle)
Оба колеса крутятся вперёд, пока робот не проедет путь. Отрицательное число поедет назад.
Расстояние робот считает по размеру колёс. Если колёса пробуксовывают, путь будет короче.
Параметр
Тип
По умолчанию
Что это
mm
число
—
Путь, миллиметры. 100 мм — это 10 см.
speed
число
60
Скорость, проценты мощности от 1 до 100. Чем больше, тем быстрее. Минус здесь не меняет направление: число меньше 1 считается как 1, и движение будет очень медленным.
wait
True или False
True
True — программа ждёт, пока робот доедет. False — программа сразу идёт дальше, а робот едет. Пока он едет, давай ему время командой robot.wait(секунды): без неё робот остановится меньше чем через секунду, а в конце программы — сразу. Пиши его с именем: wait=False.
Скорость, проценты мощности от 1 до 100. Чем больше, тем быстрее. Минус здесь не меняет направление: число меньше 1 считается как 1, и движение будет очень медленным.
wait
True или False
True
True — программа ждёт, пока робот доедет. False — программа сразу идёт дальше, а робот едет. Пока он едет, давай ему время командой robot.wait(секунды): без неё робот остановится меньше чем через секунду, а в конце программы — сразу. Пиши его с именем: wait=False.
То же, что forward, но в сантиметрах. Это команда блока «проехать вперёд».
Параметр
Тип
По умолчанию
Что это
cm
число
—
Путь, сантиметры.
speed
число
60
Скорость, проценты мощности от 1 до 100. Чем больше, тем быстрее. Минус здесь не меняет направление: число меньше 1 считается как 1, и движение будет очень медленным.
wait
True или False
True
True — программа ждёт, пока робот доедет. False — программа сразу идёт дальше, а робот едет. Пока он едет, давай ему время командой robot.wait(секунды): без неё робот остановится меньше чем через секунду, а в конце программы — сразу. Пиши его с именем: wait=False.
Скорость, проценты мощности от 1 до 100. Чем больше, тем быстрее. Минус здесь не меняет направление: число меньше 1 считается как 1, и движение будет очень медленным.
wait
True или False
True
True — программа ждёт, пока робот доедет. False — программа сразу идёт дальше, а робот едет. Пока он едет, давай ему время командой robot.wait(секунды): без неё робот остановится меньше чем через секунду, а в конце программы — сразу. Пиши его с именем: wait=False.
Скорость, проценты мощности от 1 до 100. Чем больше, тем быстрее. Минус здесь не меняет направление: число меньше 1 считается как 1, и движение будет очень медленным.
wait
True или False
True
True — программа ждёт, пока робот доедет. False — программа сразу идёт дальше, а робот едет. Пока он едет, давай ему время командой robot.wait(секунды): без неё робот остановится меньше чем через секунду, а в конце программы — сразу. Пиши его с именем: wait=False.
Скорость, проценты мощности от 1 до 100. Чем больше, тем быстрее. Минус здесь не меняет направление: число меньше 1 считается как 1, и движение будет очень медленным.
wait
True или False
True
True — программа ждёт, пока робот доедет. False — программа сразу идёт дальше, а робот едет. Пока он едет, давай ему время командой robot.wait(секунды): без неё робот остановится меньше чем через секунду, а в конце программы — сразу. Пиши его с именем: wait=False.
Робот едет, а программа сразу идёт дальше. Робот едет, пока программа ждёт в robot.wait(секунды) или даёт новые команды движения. Если программа делает что-то другое без robot.wait, робот остановится меньше чем через секунду. В цикле пиши robot.wait(0.1). В конце программы робот останавливается. Остановить раньше: robot.stop().
Отрицательная скорость — назад.
Параметр
Тип
По умолчанию
Что это
speed
число
60
Скорость, проценты мощности от −100 до 100. Минус — вращение в другую сторону.
Насколько последнее движение не дотянуло до заказанного угла.
Для проверки точности. Для каждого колеса: requested — сколько градусов заказано, achieved — сколько провернулось, missing — разница, elapsed_s — сколько секунд шло движение.
Пока движений не было, значение — None.
Возвращает. Словарь: ключ — номер разъёма (1 — D, 2 — C, 3 — B, 4 — A), значение — `requested`, `achieved`, `missing`, `elapsed_s`. `None`, пока движений не было. Команды с `wait=False` значение не меняют.
Приложение ученика само отправляет звуки твоего проекта на робота перед запуском. Кроме них у робота есть встроенные: "privet_01", "poka_01", "tanec_01", "ulybka_01" и другие.
Имя пишется маленькими латинскими буквами, цифрами и знаком _, не длиннее 40 знаков. Если звука нет, робот пискнет, напишет в консоль, какие звуки у него есть, и программа пойдёт дальше.
Параметр
Тип
По умолчанию
Что это
name
текст
—
Имя звука без .mp3.
wait
True или False
True
True — ждать конца звука. False — играть и сразу идти дальше. Следующий звук обрывает прежний.
Слушает телефон робота. Приложение робота должно быть открыто на экране телефона: иначе Android не даёт роботу слушать. Виртуальный робот не слышит: команды слуха отвечают «ничего не слышно».
Добавляет твои фразы в то, что робот узнаёт. Вызови один раз в начале программы. Потом жди фразу командой wait_phrase(): она вернёт твою фразу точно так, как ты её написал.
Можно до 30 фраз, в каждой не больше 6 слов. Если робот не знает слово из фразы, программа остановится с ошибкой VoicePhraseError, и в ней будет сказано, какое слово не подошло.
Параметр
Тип
По умолчанию
Что это
phrases
список фраз
—
Список текстов, например ["привет", "в чём смысл жизни"]. Одну фразу можно дать просто текстом.
Не ждёт: если никто ничего не говорил, сразу возвращает None. Фраза отдаётся один раз, потом забывается — поэтому она не сработает на каждом витке цикла.
Фразу отдаёт так, как услышал робот: без имени и с «е» вместо «ё». Фраза старше 3 секунд забывается.
Возвращает. Фраза (текст) или `None`.
while True:
phrase = robot.heard()
if phrase == "стоп":
break
if phrase:
robot.say(phrase)
robot.wait(0.1)
Включает фонарик, ждёт, выключает. Так легко узнать своего робота среди других.
Параметр
Тип
По умолчанию
Что это
seconds
число
0.4
Сколько секунд светит фонарик. Не меньше 0,05.
robot.flash_blink()
robot.flash_blink(1)
Зрение
Камера телефона узнаёт предметы, которым ты научил робота. Незнакомое слово или предмет вне кадра робот одинаково считает «не вижу». Камера включается при первом вопросе и начинает видеть не сразу. В начале программы спроси один раз и подожди секунду: robot.see("мяч"), потом robot.wait(1). Виртуальный робот не видит: see отвечает False, see_where и see_distance — None.
Писать watch не нужно: камера включается сама при первом вопросе see, see_where или see_distance, а микрофон — при первой команде слуха. Команда только печатает строку в консоль.
Параметр
Тип
По умолчанию
Что это
*objects
тексты
—
Названия предметов через запятую: robot.watch("мяч", "чашка").
Повернуться к предмету, чтобы он оказался в центре кадра.
Робот поворачивается небольшими шагами и после каждого смотрит в камеру. Если предмета не видно, он осматривается, поворачивая направо.
Если за timeout секунд не получилось, робот останавливается и отвечает False.
Параметр
Тип
По умолчанию
Что это
label
текст
—
Название предмета, которому ты научил робота, например "мяч".
speed
число
35
Скорость, проценты мощности от 1 до 100. Чем больше, тем быстрее. Минус здесь не меняет направление: число меньше 1 считается как 1, и движение будет очень медленным.
timeout
число
10.0
Сколько секунд искать. Не меньше одной.
Возвращает. `True`, если робот смотрит на предмет, иначе `False`.
if robot.turn_to("мяч"):
robot.say("Нашёл!")
else:
robot.say("Не вижу мяч")
Робот едет короткими отрезками и между ними снова смотрит, где предмет. Если предмет потерялся, робот ищет его 3 секунды. Не нашёл — отвечает False.
Ближе 5 сантиметров робот не подъезжает.
Параметр
Тип
По умолчанию
Что это
label
текст
—
Название предмета, которому ты научил робота, например "мяч".
cm
число
20
Примерно на каком расстоянии от предмета остановиться, сантиметры. Расстояние робот оценивает по камере.
speed
число
45
Скорость, проценты мощности от 1 до 100. Чем больше, тем быстрее. Минус здесь не меняет направление: число меньше 1 считается как 1, и движение будет очень медленным.
timeout
число
20.0
Сколько секунд пытаться. Не меньше одной.
Возвращает. `True`, если робот доехал, иначе `False`.
if robot.approach("мяч", cm=15):
robot.say("Я рядом")
Пишет камера телефона, без звука. Видео остаётся на телефоне робота. Камере нужно время, чтобы включиться: в начале программы сначала спроси robot.see(...) и подожди секунду. Запись заканчивается командой robot.record_stop() или сама, когда программа закончится.
Программа стоит, а мотор, который работает непрерывно (drive, run), продолжает крутиться. Кнопка «Стоп» прерывает ожидание.
Для пауз используй именно robot.wait. После time.sleep моторы остановятся примерно через 0,8 секунды.
Параметр
Тип
По умолчанию
Что это
seconds
число
—
Сколько секунд ждать. Можно дробное: 0.5.
robot.drive(50)
robot.wait(2)
robot.stop()
Ошибки
Ошибки робота можно ловить: import rubrick, потом except rubrick.RobotNoMotorError:. Все они наследуют rubrick.RubrickError. Неверное значение в команде (разъём "E", timeout=-1, wheel_diameter_mm=0) — это ошибка программы ValueError, а не ошибка робота. RubrickError её не ловит: исправь значение.
Так бывает, если модуль не подключён к телефону, кабель выдернули или модуль выключился. Проверь кабель между телефоном и модулем робота и питание модуля.
Движение прервали командой `robot.stop()` из другого потока.
Движение прервали командой robot.stop() из другого потока программы. В обычной программе эта ошибка не приходит: кнопка «Стоп» просто заканчивает программу.
import rubrick
try:
robot.forward_cm(100)
except rubrick.RobotMotionInterrupted:
# Сюда программа попадёт, только если другой поток вызвал robot.stop()
pass
В разъёме нет мотора, или вал не сдвинулся за 2 секунды. Обычно в сообщении названа буква разъёма. Проверь, что мотор вставлен, разъём выбран верно и колесо ничто не держит.
import rubrick
try:
robot.motor("A").run_angle(90)
except rubrick.RobotNoMotorError:
robot.say("В разъёме A нет мотора")