AlexFSmirnov

Untitled

Dec 7th, 2018
327
0
Never
1
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.60 KB | None | 0 0
  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. }
Advertisement
Comments
  • User was banned
Add Comment
Please, Sign In to add comment