robocadV

Добро пожаловать на сайт документации robocadV. Здесь вы сможете найти всю необходимою информацию о robocadV.

С чего начать?

  • Установите последнюю версию SoftHub.

  • Приобретите у нашей компании активационный ключ продукта.

  • Запустите SoftHub и активируйте продукт во вкладке Активация.

  • Теперь вы можете пользоваться robocadV!

Список изменений

Здесь вы можете посмотреть список изменений в каждой версии robocadV.

Версия 0.1.7.0:

Добавлено:

  • Полностью изменен интерфейс приложения

  • Изменение картинки робота на главном экране после выбора робота

  • Теперь, при нажатии на робота (в меню выбора робота), можно его покрутить

  • На поле FE-21 добавлена возможность настройки эелементов - Светофоры, Знаки, Контейнеры, Коробки для выгрузки, Таблички с цветом, Таблички с QR кодом. При нажатии на них будет появляться панель для настройки выбранного элемента

  • При открытии файла с неправильным форматом в меню выбора поля и конструкторе будет появляться окно с ошибкой

  • Добавлена кнопка остановки времени в конструкторе полей. Это нужно, чтобы физичные объекты не подвергались силе гравитации

  • Добавлены элементы перевозки

  • Добавлены элементы поля FE-21 в конструктор полей. (Совет: останавливайте время при “вытаскивании” контейнера с шарами, шары улетают вниз, если не остановить)

  • Добавлены настройки скорости перемещения и вращения камеры для конструктора. В дальнейшем эти настройки будут перенесены прямо в меню конструктора

  • Навигация по папкам в меню элементов конструктора теперь происходит простым нажатием на папку

  • Добавлены шумы на датчики - на гироскоп, инфракрасные, ультразвуковые и датчик линии

  • Добавлено реалистичное поведение моторов, теперь пользователю придется использовать PID

  • Добавлены настройки для отключения реалистичного поведения моторов и датчиков

  • Теперь открытие панели управления робота происходит с помощью нажатия на синюю кнопку слева-сверху, либо с сочетания клавиш Ctrl+E

  • Добавлены ограничения на полет камеры в конструкторе полей

  • Добавлено ограничение на количество триггеров спавна робота в конструкторе полей

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

  • Добавлено “красивое” окружение для сцен (я правда старался)

  • Добавлена настройка для отключения деревьев и травы в окружении

  • Изменена максимальная дальность камеры от робота с 1.8 метра до 2.6 метра

  • Добавлена настройка отключения коллайдера у камеры

Исправлено:

  • Теперь робот не может перемещаться в воздухе и имеет реалистичный вес

  • На все недоступные кнопки теперь нельзя нажать :)

  • Исправлена ошибка при вытягивании элемента из списка с нажатием двух кнопок сразу

  • Исправлена ошибка “отклеивания” захвата у робота RT-2

  • Теперь робот не скатывается вниз на наклонных поверхностях

  • Исправлен выбор объектов в конструкторе через интерфейс

  • Исправлен поворот камеры в конструкторе через интерфейс

  • Исправлены изначальные повороты объектов в конструкторе полей

  • Исправлена проблема с поворотом камеры пользователя в конструкторе полей

  • Исправлена проблема “падения” канваса вместе в объектом

Не исправлено:

  • Прохождение шаров через контейнеры

  • “Примагничивание” объектов к захвату

Роботы

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

Робот RT1

Разделы робота RT1

Моторы

Описание функций и примеры использования:

Расположение и название: RT1.right_motor_speed, RT1.left_motor_speed, RT1.back_motor_speed

Входные данные:

float - скорость на мотор

Выходные данные:

---

Пример:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
# робот будет двигаться вперед в течение 10 секунд
from robocadSim.robots import RT1
import time


robot = RT1.RT1()

robot.connect()

robot.right_motor_speed = -10
robot.left_motor_speed = 10

time.sleep(10)

robot.right_motor_speed = 0
robot.left_motor_speed = 0

time.sleep(0.1)

robot.disconnect()

Дополнительная информация:

  • Минимальная скорость - -100, максимальная - 100

Расположение и название: RT1.setRightMotorSpeed(), RT1.setLeftMotorSpeed(), RT1.setBackMotorSpeed()

Входные данные:

float - скорость на мотор

Выходные данные:

---

Пример:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// робот будет двигаться вперед в течение 10 секунд
import robots.RT1;

public class Main
{
        public static void main(String[] args) throws InterruptedException  //static method
        {
                RT1 robot = new RT1();
                robot.connect();

                robot.setRightMotorSpeed(-10);
                robot.setLeftMotorSpeed(10);

                Thread.sleep(10000);

                robot.setRightMotorSpeed(0);
                robot.setLeftMotorSpeed(0);

                Thread.sleep(100);

                robot.disconnect();
        }
}

Дополнительная информация:

  • Минимальная скорость - -100, максимальная - 100

Расположение и название: robocadSimLV -> robocadSim -> robots -> RT1 -> RT1

Входные данные:

float - скорость на мотор

Выходные данные:

---

Пример:

В этом примере робот просто постоянно едет вперед

_images/rt_1_motors.PNG

Дополнительная информация:

  • Минимальная скорость - -100, максимальная - 100

Сенсоры

Описание функций и примеры использования:

Расположение и название: RT1.left_ir, RT1.right_ir, RT1.left_us, RT1.right_us, RT1.imu

Входные данные:

---

Выходные данные:

float - значение датчика (см. или градус)

Пример:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# робот будет двигаться вперед, пока стенка не будет слишком близко
from robocadSim.robots import RT1
import time


robot = RT1.RT1()

robot.connect()

robot.right_motor_speed = -10
robot.left_motor_speed = 10

time.sleep(0.1)

while robot.left_ir > 20:
        pass

robot.right_motor_speed = 0
robot.left_motor_speed = 0

time.sleep(0.1)

robot.disconnect()

Дополнительная информация:

  • Максимальная видимость ИК датчика - 40 см.

  • Максимальная видимость УЗ датчика - 100 см.

  • Минимальный угол поворота - -180, максимальный - 180

Расположение и название: RT1.getLeftIR(), RT1.getRightIR(), RT1.getLeftUS(), RT1.getRightUS(), RT1.getIMU()

Входные данные:

---

Выходные данные:

float - значение датчика (см. или градус)

Пример:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// робот будет двигаться вперед, пока стенка не будет слишком близко
import robots.RT1;

public class Main
{
        public static void main(String[] args) throws InterruptedException  //static method
        {
                RT1 robot = new RT1();
                robot.connect();

                robot.setRightMotorSpeed(-10);
                robot.setLeftMotorSpeed(10);

                Thread.sleep(100);

                while (robot.getLeftIR() > 20)
                {

                }

                robot.setRightMotorSpeed(0);
                robot.setLeftMotorSpeed(0);

                Thread.sleep(100);

                robot.disconnect();
        }
}

Дополнительная информация:

  • Максимальная видимость ИК датчика - 40 см.

  • Максимальная видимость УЗ датчика - 100 см.

  • Минимальный угол поворота - -180, максимальный - 180

Расположение и название: robocadSimLV -> robocadSim -> robots -> RT1 -> RT1

Входные данные:

---

Выходные данные:

float - значение датчика (см. или градус)

Пример:

В этом примере робот просто постоянно едет вперед и выводит на фронт панель значение правого инфракрасного датчика

_images/rt_1_sensors.PNG

Дополнительная информация:

  • Максимальная видимость ИК датчика - 40 см.

  • Максимальная видимость УЗ датчика - 100 см.

  • Минимальный угол поворота - -180, максимальный - 180

Энкодеры

Описание функций и примеры использования:

Расположение и название: RT1.right_motor_enc, RT1.left_motor_enc, RT1.back_motor_enc

Входные данные:

---

Выходные данные:

float - значение энкодера (тик)

Пример:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# робот будет двигаться вперед, пока не насчитает по правому энкодеру 3000
from robocadSim.robots import RT1
import time


robot = RT1.RT1()

robot.connect()

robot.right_motor_speed = -10
robot.left_motor_speed = 10

time.sleep(0.1)

while abs(robot.right_motor_enc) < 3000:
        pass

robot.right_motor_speed = 0
robot.left_motor_speed = 0

time.sleep(0.1)

robot.disconnect()

Дополнительная информация:

  • Это бета версия работы энкодеров

Расположение и название: RT1.getRightMotorEnc(), RT1.getLeftMotorEnc(), RT1.getBackMotorEnc()

Входные данные:

---

Выходные данные:

float - значение энкодера (тик)

Пример:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// робот будет двигаться вперед, пока не насчитает по правому энкодеру 3000
import robots.RT1;

public class Main
{
        public static void main(String[] args) throws InterruptedException  //static method
        {
                RT1 robot = new RT1();
                robot.connect();

                robot.setRightMotorSpeed(-10);
                robot.setLeftMotorSpeed(10);

                Thread.sleep(100);

                while (Math.abs(robot.getRightMotorEnc()) < 3000)
                {

                }

                robot.setRightMotorSpeed(0);
                robot.setLeftMotorSpeed(0);

                Thread.sleep(100);

                robot.disconnect();
        }
}

Дополнительная информация:

  • Это бета версия работы энкодеров

Расположение и название: robocadSimLV -> robocadSim -> robots -> RT1 -> RT1

Входные данные:

---

Выходные данные:

float - значение энкодера (тик)

Пример:

В этом примере робот просто постоянно едет вперед и выводит на фронт панель значение правого энкодера

_images/rt_1_encs.PNG

Дополнительная информация:

  • Это бета версия работы энкодеров

Обнуление

Описание функций и примеры использования:

Расположение и название: RT1.reset_right_enc, RT1.reset_left_enc, RT1.reset_back_enc, RT1.reset_imu

Входные данные:

bool - нужно ли обнулять

Выходные данные:

---

Пример:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# робот будет двигаться вперед 10 секунд, а потом обнулит правый энкодер
from robocadSim.robots import RT1
import time


robot = RT1.RT1()

robot.connect()

robot.right_motor_speed = -10
robot.left_motor_speed = 10

time.sleep(10)

print(robot.right_motor_enc)  # -5560.0

robot.reset_right_enc = True

robot.right_motor_speed = 0
robot.left_motor_speed = 0

time.sleep(0.1)

print(robot.right_motor_enc)  # 0.0

robot.reset_right_enc = False

robot.disconnect()

Дополнительная информация:

---

Расположение и название: RT1.setResetRightEnc(), RT1.setResetLeftEnc(), RT1.setResetBackEnc(), RT1.setResetImu()

Входные данные:

boolean - нужно ли обнулять

Выходные данные:

---

Пример:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// робот будет двигаться вперед 10 секунд, а потом обнулит правый энкодер
import robots.RT1;

public class Main
{
        public static void main(String[] args) throws InterruptedException  //static method
        {
                RT1 robot = new RT1();
                robot.connect();

                robot.setRightMotorSpeed(-10);
                robot.setLeftMotorSpeed(10);

                Thread.sleep(10000);

                System.out.println(robot.getRightMotorEnc());  // -5560.0

                robot.setResetRightEnc(true);

                robot.setRightMotorSpeed(0);
                robot.setLeftMotorSpeed(0);

                Thread.sleep(100);

                System.out.println(robot.getRightMotorEnc());  // 0.0

                robot.setResetRightEnc(false);

                robot.disconnect();
        }
}

Дополнительная информация:

---

Расположение и название: robocadSimLV -> robocadSim -> robots -> RT1 -> RT1

Входные данные:

bool - нужно ли обнулять

Выходные данные:

---

Пример:

В этом примере у робота просто постоянно обнуляются правый и левый энкодеры

_images/rt_1_resets.PNG

Дополнительная информация:

---

Робот RT2

Разделы робота RT2

Камера

Описание функций и примеры использования:

Расположение и название: RT2.bytes_from_camera

Входные данные:

---

Выходные данные:

bytes - массив байтов изображения

Пример с использованием библиотеки OpenCV:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
# этот пример кода позволит вам получать изображение с робота в течение 10 секунд
from robocadSim.robots import RT2
import numpy as np
import cv2


robot = RT2.RT2()
robot.connect()
st_time = time.time()

while time.time() - st_time < 10:
        nparr = np.frombuffer(robot.bytes_from_camera, np.uint8)
        if nparr.size > 0:
                img_rgb = nparr.reshape(480, 640, 3)
                img_bgr = cv2.cvtColor(img_rgb, cv2.COLOR_RGB2BGR)

                cv2.imshow("robot image", img_bgr)
                cv2.waitKey(1)
robot.disconnect()

Пример с использованием библиотеки PIL:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
# этот пример кода сохраняет изображение с камеры робота
from robocadSim.robots import RT2
import numpy as np
from PIL import Image


robot = RT2.RT2()
robot.connect()

while len(robot.bytes_from_camera) == 0:
        pass

img = Image.frombytes("RGB", (640, 480), robot.bytes_from_camera)
img.save(r"image_from_robot.png", "PNG")
robot.disconnect()

Дополнительная информация:

---

Расположение и название: RT2.getBytesFromCamera()

Входные данные:

---

Выходные данные:

byte[] - массив байтов изображения

Пример с использованием библиотеки awt/swing:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
// этот пример кода позволит вам получать изображение с робота в течение 10 секунд
import robots.RT2;

import javax.swing.*;
import java.awt.*;
import java.awt.image.BufferedImage;

public class Main
{
        public static void main(String[] args)  //static method
        {
                JFrame jFrame = new JFrame();
                JPanel panel = new JPanel();

                jFrame.setLayout(new FlowLayout());

                jFrame.setSize(640, 480);
                panel.setSize(640, 480);
                JLabel jLabel = new JLabel();

                panel.add(jLabel);
                jFrame.add(panel);
                panel.setVisible(true);
                jFrame.setVisible(true);

                jFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

                RT2 robot = new RT2();
                robot.connect();

                long stTime = System.currentTimeMillis();

                BufferedImage icon = new BufferedImage(1, 1, BufferedImage.TYPE_3BYTE_BGR);

                while (System.currentTimeMillis() - stTime < 10000)
                {
                        if (robot.getBytesFromCamera().length > 0)
                                icon = Converter(robot.getBytesFromCamera());
                        jLabel.setIcon(new ImageIcon(icon));
                        jFrame.repaint();
                }

                jFrame.setVisible(false);
                jFrame.dispose();

                robot.disconnect();
        }

        private static BufferedImage Converter(byte[] array)
        {
                int height = 480;
                int width = 640;

                BufferedImage newImage = new BufferedImage(width, height, BufferedImage.TYPE_3BYTE_BGR);
                int ctr=0;

                for(int i = height - 1; i >= 0; i--)
                {
                        for(int j = 0; j < width; j++)
                        {
                                Color color = new Color(array[ctr] & 0xff, array[ctr + 1] & 0xff, array[ctr + 2] & 0xff);
                                newImage.setRGB(j, i, color.getRGB());
                                ctr += 3;
                        }

                }
                return newImage;
        }
}

Пример с использованием библиотеки JavaCV:

---

Дополнительная информация:

---

Расположение и название: robocadSimLV -> robocadSim -> robots -> RT2 -> RT2

Входные данные:

---

Выходные данные:

uint8[] - массив байтов изображения

Пример:

В этом примере робот просто постоянно едет крутится и выводит изображение с камеры на фронт панель

_images/rt_2_camera.PNG

Дополнительная информация:

---

Моторы

Описание функций и примеры использования:

Расположение и название: RT2.right_motor_speed, RT2.left_motor_speed, RT2.back_motor_speed

Входные данные:

float - скорость на мотор

Выходные данные:

---

Пример:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
# робот будет двигаться вперед в течение 10 секунд
from robocadSim.robots import RT2
import time


robot = RT2.RT2()

robot.connect()

robot.right_motor_speed = -10
robot.left_motor_speed = 10

time.sleep(10)

robot.right_motor_speed = 0
robot.left_motor_speed = 0

time.sleep(0.1)

robot.disconnect()

Дополнительная информация:

  • Минимальная скорость - -100, максимальная - 100

Расположение и название: RT2.setRightMotorSpeed(), RT2.setLeftMotorSpeed(), RT2.setBackMotorSpeed()

Входные данные:

float - скорость на мотор

Выходные данные:

---

Пример:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// робот будет двигаться вперед в течение 10 секунд
import robots.RT2;

public class Main
{
        public static void main(String[] args) throws InterruptedException  //static method
        {
                RT2 robot = new RT2();
                robot.connect();

                robot.setRightMotorSpeed(-10);
                robot.setLeftMotorSpeed(10);

                Thread.sleep(10000);

                robot.setRightMotorSpeed(0);
                robot.setLeftMotorSpeed(0);

                Thread.sleep(100);

                robot.disconnect();
        }
}

Дополнительная информация:

  • Минимальная скорость - -100, максимальная - 100

Расположение и название: robocadSimLV -> robocadSim -> robots -> RT2 -> RT2

Входные данные:

float - скорость на мотор

Выходные данные:

---

Пример:

В этом примере робот просто постоянно едет вперед

_images/rt_2_motors.PNG

Дополнительная информация:

  • Минимальная скорость - -100, максимальная - 100

Сенсоры

Описание функций и примеры использования:

Расположение и название: RT2.left_ir, RT2.right_ir, RT2.left_us, RT2.right_us, RT2.imu

Входные данные:

---

Выходные данные:

float - значение датчика (см. или градус)

Пример:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# робот будет двигаться вперед, пока стенка не будет слишком близко
from robocadSim.robots import RT2
import time


robot = RT2.RT2()

robot.connect()

robot.right_motor_speed = -10
robot.left_motor_speed = 10

time.sleep(0.1)

while robot.left_ir > 20:
        pass

robot.right_motor_speed = 0
robot.left_motor_speed = 0

time.sleep(0.1)

robot.disconnect()

Дополнительная информация:

  • Максимальная видимость ИК датчика - 40 см.

  • Максимальная видимость УЗ датчика - 100 см.

  • Минимальный угол поворота - -180, максимальный - 180

Расположение и название: RT2.getLeftIR(), RT2.getRightIR(), RT2.getLeftUS(), RT2.getRightUS(), RT2.getIMU()

Входные данные:

---

Выходные данные:

float - значение датчика (см. или градус)

Пример:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// робот будет двигаться вперед, пока стенка не будет слишком близко
import robots.RT2;

public class Main
{
        public static void main(String[] args) throws InterruptedException  //static method
        {
                RT2 robot = new RT2();
                robot.connect();

                robot.setRightMotorSpeed(-10);
                robot.setLeftMotorSpeed(10);

                Thread.sleep(100);

                while (robot.getLeftIR() > 20)
                {

                }

                robot.setRightMotorSpeed(0);
                robot.setLeftMotorSpeed(0);

                Thread.sleep(100);

                robot.disconnect();
        }
}

Дополнительная информация:

  • Максимальная видимость ИК датчика - 40 см.

  • Максимальная видимость УЗ датчика - 100 см.

  • Минимальный угол поворота - -180, максимальный - 180

Расположение и название: robocadSimLV -> robocadSim -> robots -> RT2 -> RT2

Входные данные:

---

Выходные данные:

float - значение датчика (см. или градус)

Пример:

В этом примере робот просто постоянно едет вперед и выводит на фронт панель значение правого инфракрасного датчика

_images/rt_2_sensors.PNG

Дополнительная информация:

  • Максимальная видимость ИК датчика - 40 см.

  • Максимальная видимость УЗ датчика - 100 см.

  • Минимальный угол поворота - -180, максимальный - 180

Энкодеры

Описание функций и примеры использования:

Расположение и название: RT2.right_motor_enc, RT2.left_motor_enc, RT2.back_motor_enc

Входные данные:

---

Выходные данные:

float - значение энкодера (тик)

Пример:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# робот будет двигаться вперед, пока не насчитает по правому энкодеру 3000
from robocadSim.robots import RT2
import time


robot = RT2.RT2()

robot.connect()

robot.right_motor_speed = -10
robot.left_motor_speed = 10

time.sleep(0.1)

while abs(robot.right_motor_enc) < 3000:
        pass

robot.right_motor_speed = 0
robot.left_motor_speed = 0

time.sleep(0.1)

robot.disconnect()

Дополнительная информация:

  • Это бета версия работы энкодеров

Расположение и название: RT2.getRightMotorEnc(), RT2.getLeftMotorEnc(), RT2.getBackMotorEnc()

Входные данные:

---

Выходные данные:

float - значение энкодера (тик)

Пример:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// робот будет двигаться вперед, пока не насчитает по правому энкодеру 3000
import robots.RT2;

public class Main
{
        public static void main(String[] args) throws InterruptedException  //static method
        {
                RT2 robot = new RT2();
                robot.connect();

                robot.setRightMotorSpeed(-10);
                robot.setLeftMotorSpeed(10);

                Thread.sleep(100);

                while (Math.abs(robot.getRightMotorEnc()) < 3000)
                {

                }

                robot.setRightMotorSpeed(0);
                robot.setLeftMotorSpeed(0);

                Thread.sleep(100);

                robot.disconnect();
        }
}

Дополнительная информация:

  • Это бета версия работы энкодеров

Расположение и название: robocadSimLV -> robocadSim -> robots -> RT2 -> RT2

Входные данные:

---

Выходные данные:

float - значение энкодера (тик)

Пример:

В этом примере робот просто постоянно едет вперед и выводит на фронт панель значение правого энкодера

_images/rt_2_encs.PNG

Дополнительная информация:

  • Это бета версия работы энкодеров

Обнуление

Описание функций и примеры использования:

Расположение и название: RT2.reset_right_enc, RT2.reset_left_enc, RT2.reset_back_enc, RT2.reset_imu

Входные данные:

bool - нужно ли обнулять

Выходные данные:

---

Пример:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# робот будет двигаться вперед 10 секунд, а потом обнулит правый энкодер
from robocadSim.robots import RT2
import time


robot = RT2.RT2()

robot.connect()

robot.right_motor_speed = -10
robot.left_motor_speed = 10

time.sleep(10)

print(robot.right_motor_enc)  # -5560.0

robot.reset_right_enc = True

robot.right_motor_speed = 0
robot.left_motor_speed = 0

time.sleep(0.1)

print(robot.right_motor_enc)  # 0.0

robot.reset_right_enc = False

robot.disconnect()

Дополнительная информация:

---

Расположение и название: RT2.setResetRightEnc(), RT2.setResetLeftEnc(), RT2.setResetBackEnc(), RT2.setResetImu()

Входные данные:

boolean - нужно ли обнулять

Выходные данные:

---

Пример:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// робот будет двигаться вперед 10 секунд, а потом обнулит правый энкодер
import robots.RT2;

public class Main
{
        public static void main(String[] args) throws InterruptedException  //static method
        {
                RT2 robot = new RT2();
                robot.connect();

                robot.setRightMotorSpeed(-10);
                robot.setLeftMotorSpeed(10);

                Thread.sleep(10000);

                System.out.println(robot.getRightMotorEnc());  // -5560.0

                robot.setResetRightEnc(true);

                robot.setRightMotorSpeed(0);
                robot.setLeftMotorSpeed(0);

                Thread.sleep(100);

                System.out.println(robot.getRightMotorEnc());  // 0.0

                robot.setResetRightEnc(false);

                robot.disconnect();
        }
}

Дополнительная информация:

---

Расположение и название: robocadSimLV -> robocadSim -> robots -> RT2 -> RT2

Входные данные:

bool - нужно ли обнулять

Выходные данные:

---

Пример:

В этом примере у робота просто постоянно обнуляются правый и левый энкодеры

_images/rt_2_resets.PNG

Дополнительная информация:

---

Поля

Здесь вы можете выбрать поле и узнать о нем больше.

Поле FE21

Здесь вы можете изучить поле FE21.

Светофоры

На поле есть два светофора, которые имеют три разных цвета (ожидаемо):

  • Красный цвет (5 секунд)

  • Желтый цвет (2 секунды)

  • Зеленый цвет (8 секунд)

Красный:

Робот должен остановиться перед черной линией, если горит красный свет. И продолжать движение, если загорелся зеленый свет:

_images/red_light_example_1.png
Желтый:

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

_images/yellow_light_example_1.png
Зеленый:

Робот должен двигаться, если на светофоре горит зеленый:

_images/green_light_example_1.png

Дорожные знаки

Всего может быть четыре вида знаков:

  • Поворот налево

  • Поворот направо

  • Движение прямо

  • Знак стоп

Поворот налево:

Например, если у вас знак Поворот налево около зоны старта (зеленый прямоугольник), вы должны двигаться как показано на рисунке:

_images/left_example_1.png

или так:

_images/left_example_2.png

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

Поворот направо:

Например, если в Maple Lane стоит знак Поворот направо (зеленый прямоугольник), вы должны двигаться как показано на рисунке:

_images/right_example_1.png

или так:

_images/right_example_2.png

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

Движение прямо:

Например, если у вас знак Движение прямо около зоны старта (зеленый прямоугольник), вы должны двигаться как показано на рисунке:

_images/forward_example_1.png

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

Знак стоп:

Например, если у вас Знак стоп около зоны старта (зеленый прямоугольник), вы должны остановиться перед знаком (или черной линией) и подождать минимум 2 секунды. После этого вы можете продолжить свое движение в любом направлении. Пример:

_images/stop_example_1.png
Все примеры:

Вот пример движений робота, если ему нужно взять контейнер (контейнеры) из зоны Accorn Court:

_images/all_signs_example_1.png _images/all_signs_example_2.png

Funcad

Здесь вы можете почитать о библиотеке Funcad. Она бывает очень полезной при программировании роботов :)

FromAxisToMotors

Функция FromAxisToMotors используется для преобразования осевых скоростей в скорости на моторы для трехколесного робота.

Раположение и название: Funcad.fatm()

Входные данные:

  • float скорость на ось X

  • float скорость на ось Y

  • float скорость на ось Z

Выходные данные:

tuple, который включает в себя:

  • Скорость на правый мотор

  • Скорость на левый мотор

  • Скорость на задний мотор

Пример:

1
2
3
4
from robocadSimPy.funcad import Funcad


out = Funcad.fatm(5, -5, 3)  # выходные данные - (2.273672, -9.273672,  4.)

Дополнительная информация:

---

FromMotorsToAxis

Функция FromAxisToMotors используется для преобразования скоростей моторов в осевые скорости для трехколесного робота.

Раположение и название: Funcad.fmta()

Входные данные:

  • float скорость на правый мотор

  • float скорость на левый мотор

  • float скорость на задний мотор

Выходные данные:

tuple that includes:

  • Скорость на ось X

  • Скорость на ось Y

  • Скорость на ось Z

Пример:

1
2
3
4
from robocadSimPy.funcad import Funcad


out = Funcad.fmta(5, -5, 0)  # выходные данные - (8.66, 0., 0.)

Дополнительная информация:

---

InRangeBool

Функция InRangeBool проверяет, входит ли значение в заданный промежуток.

Раположение и название: Funcad.in_range_bool()

Входные данные:

  • float входное значение

  • float нижняя граница

  • float верхняя граница

Выходные данные:

bool входит ли заданное значение в промежуток

Пример:

1
2
3
4
from robocadSimPy.funcad import Funcad


out = Funcad.in_range_bool(5, 0, 12)  # выходные данные - True

Дополнительная информация:

---

InRange

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

Раположение и название: Funcad.in_range()

Входные данные:

  • float входное значение

  • float нижняя граница

  • float верхняя граница

Выходные данные:

float значение, входящее в заданный промежуток

Пример:

1
2
3
4
from robocadSimPy.funcad import Funcad


out = Funcad.in_range(5, 0, 12)  # выходные данные - 5

Дополнительная информация:

---

Transfunction

Функция Transfunction преобразует входное значение в зависимости от заданных массивов.

Раположение и название: Funcad.transfunc_np()

Входные данные:

  • np.ndarray двумерный массив входных и выходных данных

  • float значение для преобразования

Выходные данные:

float преобразованное значение

Пример:

1
2
3
4
5
from robocadSimPy.funcad import Funcad
import numpy as np


out = Funcad.transfunc_np(np.array([[2, 10], [20, 100]]), 5)  # выходные данные - 50

Дополнительная информация:

---

ReImToPolar

Функция ReImToPolar преобразует прямоугольные компоненты комплексного числа в его полярные компоненты (полярная система координат).

Раположение и название: Funcad.reim_to_polar()

Входные данные:

  • float значение X

  • float значение Y

Выходные данные:

tuple, который включает в себя:

  • Значение R

  • Значение Theta

Пример:

1
2
3
4
from robocadSimPy.funcad import Funcad


out = Funcad.reim_to_polar(30, 20)  # выходные данные - (36.05551275463989, 0.5880026035475675)

Дополнительная информация:

---

PolarToReIm

Функция PolarToReIm преобразует полярные компоненты комплексного числа в его прямоугольные компоненты (прямоугольная система координат).

Раположение и название: Funcad.polar_to_reim()

Входные данные:

  • float значение R

  • float значение Theta

Выходные данные:

tuple, который включает в себя:

  • Значение X

  • Значение Y

Пример:

1
2
3
4
from robocadSimPy.funcad import Funcad


out = Funcad.polar_to_reim(30, 20)  # выходные данные - (12.242461854401759, 27.38835752182883)

Дополнительная информация:

---

Библиотеки

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

Python

Здесь вы можете найти информацию о том, как установить Python библиотеку для robocadV.

Первый способ:

  1. Откройте PyChram -> нажмите на File -> Settings

_images/first_step_py.png
  1. Далее Project: Python -> Project Interpreter -> Install (Кнопочка с плюсиком)

_images/second_step_py.png
  1. Наберите robocadSimPy в Поисковой строке -> выберите robocadSimPy -> и нажмите Install Package

_images/third_step_py.png
  1. Теперь вы можете программировать виртуальных роботов, используя Python!

Второй способ (нужен предустановленный Python):

  1. Win + R -> наберите cmd -> и нажмите Enter

_images/fourth_step_py.jpg
  1. Напишите pip install robocadSimPy или pip3 install robocadSimPy -> нажите Enter

_images/sixth_step_py.jpg _images/fifth_step_py.jpg
  1. Теперь вы можете программировать виртуальных роботов, используя Python!

Java

Здесь вы можете найти информацию о том, как установить Java библиотеку для robocadV.

Первый способ (Maven):

  1. Откройте свой проект Maven в IntelliJ -> откройте файл pom.xml:

_images/java_1.png
  1. Добавляем следующие строчки в этот файл (Рекомендуется использовать самые последнии версии библиотеки, вот список всех версий):

    1
    2
    3
    4
    5
    6
    7
    <dependencies>
       <dependency>
          <groupId>io.github.soft-v</groupId>
          <artifactId>robocadSim4J</artifactId>
          <version>LATEST</version>
       </dependency>
    </dependencies>
    

чтобы выглядело примерно так:

_images/java_2.png
  1. Также лучше всего использовать 11 версию SDK и 11 версию языка (вы можете проверить это в File -> Project Structure). И еще лучше иметь 11 версию байткода на выходе, для этого нужно перейти в File -> Settings… -> Build, Execution, Deployment -> Compiler -> Java Compiler:

_images/java_3.png
  1. Теперь вы можете программировать виртуальных роботов, используя Java (Maven)!

LabVIEW

Здесь вы можете найти информацию о том, как установить LabVIEW библиотеку для robocadV.

  1. Для использования этой библиотеки вам нужна утсановленная на ваш компьютер программа LabVIEW 2022 года или выше

  2. Скачайте библиотеку по этой ссылке

  3. Откройте скачанный файл с помощью программы VI Package Manager и нажмите на кнопку Install в открывшемся окне

_images/labView_1.PNG
  1. Спустя некоторое время библиотека будет установлена и останется только нажать на кнопку Finish

_images/labView_2.PNG
  1. Теперь вы можете программировать виртуальных роботов, используя LabVIEW!

Проводник robocadV

Здесь вы можете посмотреть доступный функционал программы robocadV.

Горячие клавиши

Горячие клавиши на открытой сцене:

  • Esc: - открытие меню паузы

  • LeftCtrl + E: - открытие панели с кнопками

  • LeftCtrl + D: - открытие панели управления полем

  • LeftCtrl + R: - перезапуск сцены

Будьте нашим спонсором!

Необходима помощь?

  • Откройте issue в GitHub.

  • Что-то еще :)

Лицензия репозитория

MIT License

Copyright (c) 2022 Soft-V

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Реклама в SoftHub

По поводу рекламы писать на почту softvery@yandex.ru