Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "Movement.h"
- // У библиотеки есть два конструктора для создания класса.
- // 1 - пустой, как указано ниже.
- // 2 - Movement m(double wheel_rad, int steps_per_turn) - задает два дополнительных параметра (радиус колеса в миллиметрах и количество шагов на оборот у шаговика)
- Movement m;
- void setup() {
- Serial.begin(9600);
- // Если был использован первый тип конструктора, необходимые константы надо задать вручную:
- m.set_wheel_rad(100);
- m.set_steps_per_turn(360);
- // Поскольку подсчет шагов и измерения радиуса колеса могут иметь погрешность, библиотека имеет
- // скаляр для модификации количества подсчитанных шагов. Если робот делает их слишком мало,
- // сюда можно поставить, например, "1.3", и количество шагов увеличится. Если слишком много - "0.7"
- // и так далее. Этот параметр нужно будет найти подбором путем большого количества тестов.
- // Это обязательный параметр, без него ничего работать не будет.
- m.set_steps_mod(0.9);
- // Метод set_speed(int speed) устанавливает относительную скорость робота.
- // Все значения скорости находятся в интервале [0, 1]. 0 - отсутствие движения,
- // 1 - максимальная скорость. В этом методе, по сути, задается штука, на которую
- // будут умножаться все скорости колес после их вычисления.
- m.set_speed(1);
- // На данный момент работает функция для движения по прямой - m.move_straight(double angle, double distance_mm);
- // Она принимает значение угла (в радианах) и расстояния (в миллиметрах) и делает все подсчеты.
- m.move_straight(3.14, 500);
- // Получить доступ к скоростям и шагам можно через соответствующие функции.
- // Метод get_speed(int wheel) возвращает скорость для определенного колеса.
- // 0 - верхнее левое
- // 1 - верхнее правое
- // 2 - нижнее левое
- // 3 - нижнее правое
- Serial.print(m.get_speed(0));
- Serial.print('\t');
- Serial.print(m.get_speed(1));
- Serial.print('\t');
- Serial.print(m.get_speed(2));
- Serial.print('\t');
- Serial.print(m.get_speed(3));
- Serial.print("\t\t");
- // Метод get_steps(int type) возвращает количество шагов, которое должно сделать
- // колесо каждого типа. Тип - это, по сути, угол шарниров на колесе.
- // Тип 1 - верхнее левое и нижнее правое
- // Тип 2 - верхнее правое и нижнее левое
- // Количество шагов может быть отрицательным! Это просто значит, что крутить колесо надо в противоположную сторону.
- Serial.print(m.get_steps(1));
- Serial.print('\t');
- Serial.println(m.get_steps(2));
- // Через библиотеку также можно напрямую задать угол без расстояния и она
- // просто подсчитает скорости для каждого колеса.
- for (double angle_deg = 0; angle_deg <= 360; ++angle_deg) {
- // Из градусов в радианы ( acos(-1) это Пи )
- // Метод set_force_angle(double angle) принимает угол в радианах и вычисляет
- // скорости для колес.
- m.set_force_angle(angle_deg / 180 * acos(-1));
- Serial.print(angle_deg);
- Serial.print(": \t");
- Serial.print(m.get_speed(0));
- Serial.print('\t');
- Serial.print(m.get_speed(1));
- Serial.print('\t');
- Serial.print(m.get_speed(2));
- Serial.print('\t');
- Serial.println(m.get_speed(3));
- }
- }
- void loop() {
- }
Advertisement