2.2 源文件核心修改:tool_motor.c
- #include "tool_motor.h"
- #include "driver/gpio.h"
- #include "esp_log.h"
- #include "cJSON.h"
- #include <string.h>
-
- static const char *TAG = "motor";
- // 四电机引脚映射:左前、右前、左后、右后,适配MimiClaw引脚分配规范
- static const int motor_pins[4][2] = {
- {18, 17}, // 左前电机
- {4, 5}, // 右前电机
- {6, 7}, // 左后电机
- {8, 9} // 右后电机
- };
- static bool motor_initialized = false;
-
- // 电机初始化:配置4个电机共8路GPIO为输出模式,适配MimiClaw初始化流程
- esp_err_t tool_motor_init(void) {
- if (motor_initialized) return ESP_OK;
- for (int i = 0; i < 4; i++) {
- for (int j = 0; j < 2; j++) {
- int pin = motor_pins[i][j];
- gpio_config_t io_conf = {
- .pin_bit_mask = (1ULL << pin),
- .mode = GPIO_MODE_OUTPUT,
- .pull_up_en = GPIO_PULLUP_DISABLE,
- .pull_down_en = GPIO_PULLDOWN_DISABLE,
- .intr_type = GPIO_INTR_DISABLE,
- };
- gpio_config(&io_conf);
- gpio_set_level(pin, 0); // 初始电平置0,保障MimiClaw启动安全
- }
- }
- motor_initialized = true;
- ESP_LOGI(TAG, "四电机驱动初始化完成,适配MimiClaw项目");
- return ESP_OK;
- }
-
- // 单电机独立控制
- void motor_control(int motor_id, int dir) {
- if (motor_id < 0 || motor_id > 3) return;
- int in1 = motor_pins[motor_id][0];
- int in2 = motor_pins[motor_id][1];
- switch (dir) {
- case 1: // 正转
- gpio_set_level(in1, 1);
- gpio_set_level(in2, 0);
- break;
- case -1: // 反转
- gpio_set_level(in1, 0);
- gpio_set_level(in2, 1);
- break;
- default: // 停止
- gpio_set_level(in1, 0);
- gpio_set_level(in2, 0);
- break;
- }
- }
-
- // 兼容原有双电机差速控制(仅使用前两轮),保留MimiClaw原有功能
- void car_diff_control(int action) {
- int left = 0, right = 0;
- switch (action) {
- case 1: left = 1; right = 1; break; // 前进
- case 2: left = -1; right = -1; break; // 后退
- case 3: left = -1; right = 1; break; // 左转
- case 4: left = 1; right = -1; break; // 右转
- default: break;
- }
- motor_control(0, left);
- motor_control(1, right);
- motor_control(2, 0);
- motor_control(3, 0);
- }
-
- // 核心:麦克纳姆轮全向运动控制逻辑,适配MimiClaw控制需求
- void car_mecanum_control(int action) {
- int lf = 0, rf = 0, lr = 0, rr = 0;
- switch (action) {
- case 1: // 前进:四轮同步正转
- lf = 1; rf = 1; lr = 1; rr = 1;
- break;
- case 2: // 后退:四轮同步反转
- lf = -1; rf = -1; lr = -1; rr = -1;
- break;
- case 3: // 左横移:对角电机组合转动
- lf = -1; rf = 1; lr = 1; rr = -1;
- break;
- case 4: // 右横移:对角电机反向组合
- lf = 1; rf = -1; lr = -1; rr = 1;
- break;
- case 5: // 原地左转:左右轮反向转动
- lf = -1; rf = 1; lr = -1; rr = 1;
- break;
- case 6: // 原地右转:左右轮反向转动
- lf = 1; rf = -1; lr = 1; rr = -1;
- break;
- default: // 默认停止
- break;
- }
- // 执行电机控制
- motor_control(0, lf);
- motor_control(1, rf);
- motor_control(2, lr);
- motor_control(3, rr);
- }
-
- // 工具函数实现:参考原有代码逻辑,保持不变,适配MimiClaw工具调用规范
复制代码
|