从零开始搭建四轮全向底盘

从零开始搭建四轮全向底盘

机械狗不需要梦想

想搭底盘就自己动手谁便画了一个,自己选电机,自己选轮子,联轴器,车架。
电机选用的是步进电机(屌丝一个),轮子为了满足全向和低价的条件,选用的是78mm的全向轮(区别于麦克纳姆轮)然后自己画了一个车架的,用的铝板,在上面的打了好多螺纹孔为了后续搭第二层,出于机械工程师的严谨和眼光,安装螺栓是选用沉头的,所以安装起来的面是平整的。
小车的三维建模
小车的仰视图
淘宝截图
整车的车架尺寸是250mm*250mm,电机的驱动力矩我是计算过的,完全满足的要求。车架发到淘宝上加工,为了好看,我对车架铝板黑色阳极氧化,好看的要死。组装起来的效果

<think>好的,我需要帮助用户查找关于使用STM32控制四轮全向底盘小车的开发教程、示例代码和硬件连接的信息。用户提到了几个引用来源,我需要先仔细阅读这些引用内容,看看是否有相关的信息可以提取。 首先,引用[1]提到了STM32的PID控制流程,包括初始化硬件、获取当前电机速度、定义PID结构体等。这可能与电机控制部分的代码相关。引用[2]提到电机驱动和编码器读取反馈的代码,存放在GitHub仓库,用户可能需要参考这里的示例代码。引用[3]讨论了四轮底盘与ROS的集成,特别是使用teb_local_planner进行速度规划,这说明底盘控制涉及到运动分解和PID参数设置。引用[4]详细描述了四轮全向底盘的速度环PID计算,包括参数设置和限速处理,还提到了电机电流设置和自动跑点功能,这应该与具体的代码实现相关。 接下来,我需要整理这些信息,分步骤回答用户的查询。硬件连接部分可能需要参考编码器、电机驱动模块(如TB6612)与STM32的连接方式。开发教程方面,虽然引用中没有直接给出教程链接,但GitHub仓库可能有示例代码。示例代码部分,用户提供的引用中提到了PID控制、编码器读取和速度标定的代码,特别是引用[4]中的PID_Cal函数和Motor_Set_Current函数,这些可以作为示例。控制逻辑需要包括运动学模型、PID闭环控制和ROS集成,引用[3]和[4]都提到了相关内容。 可能需要注意的地方包括:确保PID参数调整的方法被提及,硬件连接的正确性,以及代码的实际应用场景,比如全向的运动分解。同时,需要根据引用内容正确标注引用标识,例如在提到PID结构体时引用[1],在GitHub代码时引用[2],在四轮底盘控制部分引用[3]和[4]。 最后,生成的相关问题需要围绕用户可能感兴趣的后续步骤,如PID调参、编码器读取、ROS集成等,确保问题与现有引用内容相关,方便用户进一步探索。</think>### STM32控制四轮全向底盘小车开发指南 #### 1. 硬件连接 四轮全向底盘通常使用麦克纳姆全向,硬件连接需关注以下部分: - **电机驱动**:使用TB6612、DRV8833等驱动模块,通过STM32的PWM引脚(如TIM1/TIM8)控制电机转速。每个电机需占用2个PWM通道(正反转控制)[^2]。 - **编码器接口**:正交编码器信号接入STM32的定时器编码器模式(如TIM2/TIM3),接线示例如下: ``` Encoder_A → TIMx_CH1 Encoder_B → TIMx_CH2 ``` - **通信接口**:ROS上位机通过串口/USB转TTL与STM32通信,接收速度指令(如$v_x$, $v_y$, $\omega$)[^3]。 #### 2. 开发流程与代码示例 **步骤1:电机驱动与编码器读取** ```c // 编码器初始化(以TIM2为例) void Encoder_Init(TIM_HandleTypeDef *htim) { HAL_TIM_Encoder_Start(htim, TIM_CHANNEL_ALL); } // 读取编码器值(返回累计脉冲数) int32_t Get_Encoder_Value(TIM_HandleTypeDef *htim) { return (int16_t)__HAL_TIM_GET_COUNTER(htim); } ``` 编码器数据需转换为实际转速(RPM): $$ \text{speed\_rpm} = \frac{\Delta \text{pulses} \times 60}{\text{PPR} \times \text{sample\_time}} $$ 其中PPR为编码器每转脉冲数。 **步骤2:运动学模型实现** 四轮全向底盘运动分解公式: $$ \begin{cases} v_1 = -v_x + v_y + \omega \cdot L \\ v_2 = v_x + v_y - \omega \cdot L \\ v_3 = v_x - v_y - \omega \cdot L \\ v_4 = -v_x - v_y + \omega \cdot L \end{cases} $$ 其中$L$为组到中心的距离[^3]。 **步骤3:PID速度环控制** 参考引用[4]的PID实现: ```c typedef struct { float Kp, Ki, Kd; int16_t OUT; } PID_TypeDef; void PID_Cal(PID_TypeDef *pid, float current, float target, float Kp, int16_t max_out) { float error = target - current; pid->OUT = (int16_t)(Kp * error); if(pid->OUT > max_out) pid->OUT = max_out; } // 电机控制示例 Motor_Set_Current(PID_SPEED[1].OUT, PID_SPEED[2].OUT, PID_SPEED[3].OUT, 0); // 设置4个电机电流 ``` #### 3. 开发资源 - **示例代码**:参考GitHub仓库中的[电机驱动与编码器模块](https://github.com/gjhhust?tab=repositories) - **调试工具**: 1. 使用STM32CubeMX配置PWM和编码器接口 2. 通过SWD/JTAG接口实时观测速度曲线 3. 使用USART打印调试信息 #### 4. ROS集成要点 - **里程计计算**:将编码器数据转换为$odom$消息,包含位姿和协方差 - **速度控制**:订阅`/cmd_vel`话题,接收线速度$v_x$、$v_y$和角速度$\omega$ - 使用`teb_local_planner`替代`base_local_planner`以支持全向运动
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值