STM32实现四驱小车(一)硬件与软件准备

目录

  • 一. 绪论
  • 二. 轮式机器人概述
  • 三. 硬件准备
    • 1. 机械底盘
    • 2. 电机选择
    • 3. 驱动板
    • 4. 传感器
    • 5. 电池
  • 四. 软件准备——UCOS-III操作系统

一. 绪论

匆匆忙忙的2020年结束了,在机器人平台开发方面算是搞清了些端倪。近来总算有时间回顾过往,稍作整理。计划写一个专题系列,内容即为“机器人控制系统设计与实现”,这将会是我的系列文章的宗旨。机器人平台从地面无人车到空中无人机到水下无人潜航器,这将是一个可上九天揽月、可下五洋捉鳖的宏大蓝图。讲述内容从控制算法到嵌入式软件开发,从计算机仿真到单片机实战,从底层驱动到上层应用。所有的代码源于项目实战,讲述方式将是雅俗共赏。记录与分享心得的过程是快乐的,既是悦己、也可及人。如果有志同道合的朋友们可以动动小爪点个关注,我们一起成长、一起进步叭!

第一篇从实现一个四轮四驱小车开始~

二. 轮式机器人概述

在机器人的大家庭里,轮式机器人独领风骚。轮式机器人常见的有两轮平衡车(二驱差速)、四轮车(四驱差速)、三轮车(二驱)、阿克曼转向小车(与汽车最为相似)、麦克纳姆轮(Mecanum wheel)小车、全向轮(omni wheel)小车等。感兴趣的小伙伴可以分别去了解运动与控制原理,市场上的绝大部分地面移动机器人大抵都是基于以上平台了。这里我们实现一个四轮小车,四轮都有电机驱动,左右电机各为一组,控制左右侧电机差速即可实现转向,很简单有木有但是麻雀虽小,五脏俱全,在此篇中我们基于STM32实现机器人的控制,使用UCOS-III操作系统,实现遥控器通信、传感器数据读取、航向角串级PID控制、电机PID控制全部功能。上位机地面站的开发我放在下一篇四轴飞行器的讲解中。

三. 硬件准备

1. 机械底盘

搭建四轮小车的机械部分就不细讲了,有条件的自己设计机架机加工或3D打印,没条件的直接买一个四轮底盘即可,电机、轮子配套,成本不高。

2. 电机选择

电机选择就很多了,小型四轮车常见的是编码器电机,如图1所示,一般是六根接线,两根编码器电源线,两根电源线,两根编码器信 线(A相B相)。只需要一路编码器就可用于测速,两路可以测方向,控制板需要解析编码器信 做速度闭环控制。

3. 驱动板

4. 传感器

传感器主要是需要姿态传感器,一般使用九轴惯性传感器,即三轴陀螺仪、三轴加速度计、三轴磁力计。最终目的就是解算三轴姿态角,这里简单粗暴,直接买了一个姿态角传感器,如图所示是维特智能的传感器,串口输出三轴姿态角,其内部还是使用姿态解算算法算出来的。如果使用MPU9250等模块就需要自己进行解算了,后面有时间专门写一篇滤波算法与姿态解算。

在main函数中系统初始化、外设初始化、创建开始任务

开始任务的内容如下,内容就是创建其他四个任务,之后把自己挂起。

//开始任务函数void start_task(void *p_arg){	OS_ERR err;	CPU_SR_ALLOC();	p_arg = p_arg;	CPU_Init();#if OS_CFG_STAT_TASK_EN > 0u	OSStatTaskCPUUsageInit(&err); //统计任务#endif#ifdef CPU_CFG_INT_DIS_MEAS_EN //如果使能了测量中断关闭时间	CPU_IntDisMeasMaxCurReset();#endif#if OS_CFG_SCHED_ROUND_ROBIN_EN //当使用时间片轮转的时候	//使能时间片轮转调度功能,设置默认的时间片长度	OSSchedRoundRobinCfg(DEF_ENABLED, 1, &err);#endif	__HAL_RCC_CRC_CLK_ENABLE(); //使能CRC时钟	OS_CRITICAL_ENTER();		//进入临界区	//communicate任务 通信任务	OSTaskCreate((OS_TCB *)&CommunicateTaskTCB,				 (CPU_CHAR *)"Communicate task",				 (OS_TASK_PTR)communicate_task,				 (void *)0,				 (OS_PRIO)COMMUNICATE_TASK_PRIO,				 (CPU_STK *)&COMMUNICATE_TASK_STK[0],				 (CPU_STK_SIZE)COMMUNICATE_STK_SIZE / 10,				 (CPU_STK_SIZE)COMMUNICATE_STK_SIZE,				 (OS_MSG_QTY)0,				 (OS_TICK)10,				 (void *)0,				 (OS_OPT)OS_OPT_TASK_STK_CHK | OS_OPT_TASK_STK_CLR | OS_OPT_TASK_SAVE_FP,				 (OS_ERR *)&err);	//Stabilizaiton任务 姿态控制	OSTaskCreate((OS_TCB *)&StabilizationTaskTCB,				 (CPU_CHAR *)"Stabilization task",				 (OS_TASK_PTR)stabilization_task,				 (void *)0,				 (OS_PRIO)STABILIZATION_TASK_PRIO,				 (CPU_STK *)&STABILIZATION_TASK_STK[0],				 (CPU_STK_SIZE)STABILIZATION_STK_SIZE / 10,				 (CPU_STK_SIZE)STABILIZATION_STK_SIZE,				 (OS_MSG_QTY)0,				 (OS_TICK

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2021年1月26日
下一篇 2021年1月26日

相关推荐