AlexFSmirnov

Untitled

Dec 7th, 2018
276
0
Never
1
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include "Movement.h"
  2.  
  3. // У библиотеки есть два конструктора для создания класса.
  4. // 1 - пустой, как указано ниже.
  5. // 2 - Movement m(double wheel_rad, int steps_per_turn) - задает два дополнительных параметра (радиус колеса в миллиметрах и количество шагов на оборот у шаговика)
  6. Movement m;
  7.  
  8.  
  9.  
  10. void setup() {
  11.   Serial.begin(9600);
  12.  
  13.   // Если был использован первый тип конструктора, необходимые константы надо задать вручную:
  14.   m.set_wheel_rad(100);
  15.   m.set_steps_per_turn(360);
  16.  
  17.   // Поскольку подсчет шагов и измерения радиуса колеса могут иметь погрешность, библиотека имеет
  18.   // скаляр для модификации количества подсчитанных шагов. Если робот делает их слишком мало,
  19.   // сюда можно поставить, например, "1.3", и количество шагов увеличится. Если слишком много - "0.7"
  20.   // и так далее. Этот параметр нужно будет найти подбором путем большого количества тестов.
  21.   // Это обязательный параметр, без него ничего работать не будет.
  22.   m.set_steps_mod(0.9);
  23.  
  24.  
  25.   // Метод set_speed(int speed) устанавливает относительную скорость робота.
  26.   // Все значения скорости находятся в интервале [0, 1]. 0 - отсутствие движения,
  27.   // 1 - максимальная скорость. В этом методе, по сути, задается штука, на которую
  28.   // будут умножаться все скорости колес после их вычисления.
  29.   m.set_speed(1);
  30.  
  31.   // На данный момент работает функция для движения по прямой - m.move_straight(double angle, double distance_mm);
  32.   // Она принимает значение угла (в радианах) и расстояния (в миллиметрах) и делает все подсчеты.
  33.   m.move_straight(3.14, 500);
  34.  
  35.   // Получить доступ к скоростям и шагам можно через соответствующие функции.
  36.   // Метод get_speed(int wheel) возвращает скорость для определенного колеса.
  37.   // 0 - верхнее левое
  38.   // 1 - верхнее правое
  39.   // 2 - нижнее левое
  40.   // 3 - нижнее правое
  41.   Serial.print(m.get_speed(0));
  42.   Serial.print('\t');
  43.   Serial.print(m.get_speed(1));
  44.   Serial.print('\t');
  45.   Serial.print(m.get_speed(2));
  46.   Serial.print('\t');
  47.   Serial.print(m.get_speed(3));
  48.   Serial.print("\t\t");
  49.  
  50.   // Метод get_steps(int type) возвращает количество шагов, которое должно сделать
  51.   // колесо каждого типа. Тип - это, по сути, угол шарниров на колесе.
  52.   // Тип 1 - верхнее левое и нижнее правое
  53.   // Тип 2 - верхнее правое и нижнее левое
  54.   // Количество шагов может быть отрицательным! Это просто значит, что крутить колесо надо в противоположную сторону.
  55.   Serial.print(m.get_steps(1));
  56.   Serial.print('\t');
  57.   Serial.println(m.get_steps(2));
  58.  
  59.   // Через библиотеку также можно напрямую задать угол без расстояния и она
  60.   // просто подсчитает скорости для каждого колеса.
  61.   for (double angle_deg = 0; angle_deg <= 360; ++angle_deg) {
  62.     // Из градусов в радианы ( acos(-1) это Пи )
  63.  
  64.     // Метод set_force_angle(double angle) принимает угол в радианах и вычисляет
  65.     // скорости для колес.
  66.     m.set_force_angle(angle_deg / 180 * acos(-1));
  67.  
  68.     Serial.print(angle_deg);
  69.     Serial.print(":  \t");
  70.     Serial.print(m.get_speed(0));
  71.     Serial.print('\t');
  72.     Serial.print(m.get_speed(1));
  73.     Serial.print('\t');
  74.     Serial.print(m.get_speed(2));
  75.     Serial.print('\t');
  76.     Serial.println(m.get_speed(3));
  77.   }
  78. }
  79.  
  80. void loop() {
  81.  
  82. }
Comments
  • User was banned
Add Comment
Please, Sign In to add comment