📜  相对电机移动 PROS (1)

📅  最后修改于: 2023-12-03 15:11:22.660000             🧑  作者: Mango

相对电机移动 PROS

相对电机移动 PROS(PROS-relative motor movement)是一个用于编程 PROS 下机器人电机的库。与传统的电机控制方式不同,PROS-relative motor movement 通过控制电机相对于当前位置的移动来控制电机的运动。此库可以使机器人编程更加灵活、准确。

特点
  • 相对电机移动,精度更高
  • 可以实现非阻塞运动
  • 集成了 PID 控制器
安装
  1. 在命令行中运行以下命令,安装 PROS:
curl https://pros.cs.purdue.edu/download/installer.sh | sudo sh
  1. 在 PROS 项目中的 project.properties 文件中添加以下行:
deps=relative-motor
  1. 在 VSCode 中的 .vscode/c_cpp_properties.json 文件中添加以下行:
"includePath": [
    "${workspaceFolder}/**",
    "${workspaceFolder}/src/**",
    "${workspaceFolder}/.pros/include/**",
    "${workspaceFolder}/.pros/relative-motor/include/**"
]
用法
初始化

在使用PROS-relative motor movement之前,需要将其初始化。可以使用以下代码片段在程序的开头进行初始化:

#include "relativeMotor.h"

void initialize() {
    relativeMotorInit();
}
控制电机

PROS-relative motor movement 的核心函数为 relativeMotorSet()。 它的用法如下:

relativeMotorSet(motor_port, relative_distance, max_speed);

其中:

  • motor_port 是电机连接的端口号
  • relative_distance 是电机移动的相对距离,单位为度。
  • max_speed 是电机运动的最大速度,单位为度/秒。

以下是一个使用 relativeMotorSet() 函数的示例代码:

#include "main.h"
#include "relativeMotor.h"

void initialize() {
    relativeMotorInit();
}

void disabled() {}

void competition_initialize() {}

void autonomous() {
    relativeMotorSet(1, 360, 60); // 控制 1 号电机旋转 360 度,速度为 60 度/秒。
}

void opcontrol() {}

void test() {}
非阻塞运动

如果要实现非阻塞(即多任务)运动,可以使用 relativeMotorTaskCreate() 函数:

relativeMotorTaskCreate(motor_port, relative_distance, max_speed, callback, callback_parameter);

其中:

  • motor_port 是电机连接的端口号
  • relative_distance 是电机移动的相对距离,单位为度。
  • max_speed 是电机运动的最大速度,单位为度/秒。
  • callback 是运动结束后的回调函数指针
  • callback_parameter 是回调函数的参数

以下是一个使用 relativeMotorTaskCreate() 函数的示例代码:

#include "main.h"
#include "relativeMotor.h"

void initialize() {
    relativeMotorInit();
}

void disabled() {}

void competition_initialize() {}

void my_callback(void *parameter) {
   // 运动结束后的代码
}

void autonomous() {
    relativeMotorTaskCreate(1, 360, 60, my_callback, NULL); // 控制 1 号电机旋转 360 度,速度为 60 度/秒。
}

void opcontrol() {}

void test() {}
PID 控制

PROS-relative motor movement 集成了 PID 控制器,以提高控制电机的精度。可以使用以下函数进行 PID 控制:

relativeMotorSetWithPID(motor_port, relative_distance, max_speed, pid_Kp, pid_Ki, pid_Kd);

其中:

  • motor_port 是电机连接的端口号
  • relative_distance 是电机移动的相对距离,单位为度。
  • max_speed 是电机运动的最大速度,单位为度/秒。
  • pid_Kp, pid_Ki, pid_Kd 分别是PID控制器的比例、积分、微分系数。

以下是一个使用 relativeMotorSetWithPID() 函数的示例代码:

#include "main.h"
#include "relativeMotor.h"

void initialize() {
    relativeMotorInit();
}

void disabled() {}

void competition_initialize() {}

void autonomous() {
    relativeMotorSetWithPID(1, 360, 60, 0.1, 0.01, 0.1); // 控制 1 号电机旋转 360 度,速度为 60 度/秒,并使用PID控制器。
}

void opcontrol() {}

void test() {}
总结

PROS-relative motor movement 是一个用于编程 PROS 下机器人电机的库,通过控制电机相对于当前位置的移动来控制电机的运动。它通过非阻塞运动、PID 控制等特点提高了机器人编程的灵活性和准确性。