【花雕动手做】小龙虾 MimiClaw 二次开发:控制四电机麦克纳姆轮实现全向运动

2026-04-1959
AI 快速预览详细 收起
本文介绍了如何将双电机差速小车升级为四电机麦克纳姆轮小车,实现全向移动功能。硬件清单包括ESP32、电机驱动模块等。通过修改头文件和源文件,实现了单电机控制和麦克纳姆轮全向控制。支持飞书关键词远程控制,适配MimiClaw项目原有架构。

本文基于已成功部署的迷你小龙虾 MimiClaw 项目,手把手教你将双电机差速小车升级为四电机麦克纳姆轮小车,实现前进、后退、左横移、右横移、原地左转、原地右转全向移动功能。所有代码均经过实战验证,支持飞书关键词远程控制,可直接复用,完美适配MimiClaw项目原有架构。

000-3.jpg

## 一、硬件选型与接线

1.1 硬件清单

02.jpg

1.2 引脚分配(规避GPIO19/20冲突)
核心注意:所有模块必须共地,电机驱动模块VCC单独接外部5V/3A电源,禁止使用开发板5V供电,避免影响MimiClaw项目原有供电稳定性!

03.jpg

## 二、电机驱动代码扩展(四轮支持,适配MimiClaw)

2.1 头文件修改:tool_motor.h

代码
#pragma once

#include "esp_err.h"

#ifdef __cplusplus
extern "C" {
#endif

// 电机初始化,适配MimiClaw项目初始化流程
esp_err_t tool_motor_init(void);

// 单电机控制:motor_id 0=左前 1=右前 2=左后 3=右后;dir=1正转/-1反转/0停止
void motor_control(int motor_id, int dir);  

// 兼容原有功能:双电机差速小车控制,保留MimiClaw原有控制逻辑
void car_diff_control(int action);

// 新增功能:麦克纳姆轮全向控制,适配MimiClaw项目控制需求
// action定义:0停止 1前进 2后退 3左横移 4右横移 5原地左转 6原地右转
void car_mecanum_control(int action);  

// 工具执行函数(飞书/CLI调用,适配MimiClaw工具调用规范)
esp_err_t tool_motor_single_execute(const char *in, char *out, size_t len);
esp_err_t tool_car_diff_execute(const char *in, char *out, size_t len);
esp_err_t tool_car_mecanum_execute(const char *in, char *out, size_t len);

#ifdef __cplusplus
}
#endif

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工具调用规范

## 三、飞书关键词控制扩展(适配MimiClaw飞书Bot)

在feishu_bot.c的handle_message_event函数中,新增麦克纳姆轮关键词匹配代码,适配MimiClaw飞书Bot原有消息处理逻辑:

代码
// 新增:麦克纳姆轮小车全向控制(适配MimiClaw飞书Bot指令规范)
if (strstr(cleaned, "左横移") != NULL) {
    car_mecanum_control(3);
    feishu_send_message(chat_id, "小车执行左横移");
    cJSON_Delete(content_obj);
    return;
}
if (strstr(cleaned, "右横移") != NULL) {
    car_mecanum_control(4);
    feishu_send_message(chat_id, "小车执行右横移");
    cJSON_Delete(content_obj);
    return;
}
if (strstr(cleaned, "原地左转") != NULL || strstr(cleaned, "自旋左") != NULL) {
    car_mecanum_control(5);
    feishu_send_message(chat_id, "小车执行原地左转");
    cJSON_Delete(content_obj);
    return;
}
if (strstr(cleaned, "原地右转") != NULL || strstr(cleaned, "自旋右") != NULL) {
    car_mecanum_control(6);
    feishu_send_message(chat_id, "小车执行原地右转");
    cJSON_Delete(content_obj);
    return;
}

// 原有前进/后退关键词可保留,复用麦克纳姆轮控制逻辑,适配MimiClaw原有指令

## 四、工具注册配置(tool_registry.c,适配MimiClaw工具注册规范)

新增麦克纳姆轮小车控制工具,支持飞书/CLI调用,适配MimiClaw项目工具注册流程:

代码
// 定义麦克纳姆轮控制工具(适配MimiClaw工具定义规范)
mimi_tool_t car_mecanum = {
    .name = "car_mecanum",
    .description = "麦克纳姆轮小车控制,支持:forward/backward/left/right/stop/left_spin/right_spin,适配MimiClaw项目",
    .input_schema_json = "{\"type\":\"object\",\"properties\":{\"action\":{\"type\":\"string\"}},\"required\":[\"action\"]}",
    .execute = tool_car_mecanum_execute,
};
// 注册工具,加入MimiClaw工具列表
register_tool(&car_mecanum);

## 五、测试指令(适配MimiClaw控制方式)

1. 飞书文字控制(直接发送,适配MimiClaw飞书Bot指令)

代码
- 前进 → 小车直线前进
- 后退 → 小车直线后退
- 左横移 → 小车水平向左平移
- 右横移 → 小车水平向右平移
- 原地左转 → 小车原地逆时针旋转
- 原地右转 → 小车原地顺时针旋转

2. 串口CLI指令测试(JSON格式,适配MimiClaw CLI调试规范)

代码
car_mecanum {"action":"left"}    // 左横移
car_mecanum {"action":"right"}   // 右横移
car_mecanum {"action":"stop"}    // 停止

## 六、实验场景图与视频记录

04.jpg
05 (1).jpg
05 (3).jpg
010.gif

视频记录

【【花雕动手做】小龙虾 MimiClaw 二次开发:控制四电机实现全向运动 #单片机diy #迷你小龙虾 #嵌入式mimiclaw #二次开发动手做 #机器人】

https://www.bilibili.com/video/BV1D3ddBmE9o/?share_source=copy_web&vd_source=371a292a55e5ca9be994cbb4a86cc987

## 七、关键注意事项(适配MimiClaw项目稳定性)

 

1. 电源安全四电机同时启动峰值电流超3A,必须使用5V/3A及以上独立电源,建议在电源端并联1000μF滤波电容,防止电压波动导致开发板重启,避免影响MimiClaw项目其他模块正常运行。
2. 麦克纳姆轮安装规范左前+右后轮滚轮方向为/,右前+左后轮滚轮方向为\,安装错误会导致横移方向异常;若方向相反,可交换电机IN1/IN2接线,或修改代码中电机dir值,确保适配MimiClaw小车机械结构。
3. 引脚冲突规避严格避开GPIO19/20(USB串口专用);GPIO6-9为默认空闲引脚,若开发板有其他外设占用,可自行修改引脚定义,避免与MimiClaw原有外设引脚冲突。
4. 电机方向校准单个电机转向错误时,无需重新接线,直接交换该电机对应的IN1/IN2引脚电平逻辑即可,确保与MimiClaw控制指令一致。

 

## 总结

 

1. 本次升级完全兼容MimiClaw项目原有双电机差速代码,无需删除旧功能,可无缝切换控制模式,不影响项目原有部署;
2. 核心是麦克纳姆轮对角电机组合控制逻辑,实现全向移动,适配MimiClaw项目扩展需求;
3. 硬件核心注意共地和大功率独立供电,软件直接复制代码即可运行,适配MimiClaw项目代码规范;
4. 支持飞书关键词+串口CLI双控制方式,调试和使用更便捷,完美适配MimiClaw项目的控制场景。

创作许可协议

本项目采用 None(不开放任何权利,保留所有权利) 进行许可。

评论(0)
- 没有更多了 -