三轮全向底盘实现绘图功能
1. 功能说明
本文示例将实现R313a样机三轮全向底盘绘图(三角形、矩形、三叶草、正弦曲线)的功能。三轮全向底盘绘制图形有两种模式:第一种是自主选择模式(即通过按下开关进行模式的选项);第二种是上位机模式(即通过上位机发送坐标来完成绘制)。这里主要介绍下自主选择模式绘制图形。
2. 结构说明
R313a样机主要是由R313c样机上安装一个 舵机关节模组 组成。
三轮全向底盘采用全向福来轮作为执行轮,全向福来轮由主轮和副轮组成,主轮和副轮成垂直分布。三个轮成正三角形分布,两两夹角120度,这种结构使得全向底盘运动灵活、可以在平面内任意方向平移。
三轮全向底盘的全向移动需要三个轮之间的相互配合,具体运动方向和各个轮的转向如下图所示:
3. 三轮全向底盘的运动学逆解分析
我们先做一些必要的前提假设:
① 全向底盘质量分布均匀,每个轮子的大小和质量相同;
② 三个全向轮到中心的距离相等,且两两夹角为120度;
③ 全向底盘不会出现打滑。
首先建立一个世界坐标系X′O′Y′,然后再建立机器人自身的坐标系XOY。设中心到轮子的距离为常数L,移动平台自身的角速度为ω,设顺时针为角速度正方向,各个轮子的速度分别为Va,Vb,Vc。移动平台在自身坐标系下的分速度为Vx,Vy。夹角 θ₁ = π / 3,θ₂ = π / 6 , α是两个坐标系的夹角。
逆解:
所谓逆解,就是给定一个世界坐标系下的速度矢量,需要求出三个轮子分别需要给多少速度才可以使机器人在世界坐标系下达到该速度矢量。通过简单的速度矢量运算我们可以列出以下的线性方程组:
该线性方程组变成矩阵形式就像下面这样:
这个解是在机器人自身坐标系下的,当运用到实际场景中还需要一步转换。其实很简单,再乘上一个旋转矩阵就可以了。现在假设我们已经知道 α 的大小了,那么求旋转矩阵就没什么难度了,从X′O′Y′到XOY的旋转矩阵为:
那么从XOY到X′O′Y′的旋转矩阵就是R(α)的逆矩阵:
所以有:
将这个关系代入第一个线性方程中得:
化简得:
4. 电子硬件
本实验中采用了以下硬件:
主控板 |
STM32主控板 |
扩展板 |
STM32扩展板 |
电池 | 7.4v锂电池 |
传感器 | 触碰传感器 |
输出模块 | OLED显示屏 |
其它 |
步进电机、标准舵机 |
按下图进行电路连接:舵机连接在PD15引脚上。
5. 功能实现
编程环境:keil5
功能:当按上边的触碰传感器时,OLED显示屏上会显示出不同的选项(sin/ Triangle/ Rect/ ThreeLeaf);当按下边的触碰传感器时,开始绘制相应的内容(见下表)。
参数 |
绘制的图案 |
sin |
正弦曲线 |
Triangle |
三角形 |
Rect |
矩形 |
ThreeLeaf |
三叶草 |
三轮全向底盘绘图的参考例程(USER\test.uvprojx)如下,下面是主程序main.c:
/*------------------------------------------------------------------------------------版权说明:Copyright 2023 Robottime(Beijing) Technology Co., Ltd. All Rights Reserved.Distributed under MIT license.See file LICENSE for detail or copy athttps://opensource.org/licenses/MITby 机器谱 2023-03-10 https://www.robotway.com/------------------------------*/#include "sys.h"#include "led.h"#include "usart.h"#include "delay.h"#include "math.h"#include "stdio.h"#include "string.h"#include "stdlib.h"#include "a4988.h"#include "pwm.h"#include "key.h"#include "oled.h"#include "stdbool.h"int main(void){NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//设置系统中断优先级分组2delay_init(168);//初始化延时,168为CPU运行频率usart_init(9600); //串口初始化usart3_init(9600);LED_Init();//LED灯初始化Stepper_Motor_Init(0); //步进电机引脚初始化KEY_Init();OLED_Init(1);delay_ms(1000);TIM4_PWM_Init(20000-1,84-1);Put_Up();delay_ms(1500);int receive_touch[2] = {0,0};bool Flags_draw = false;OLED_Clear();OLED_ShowString(30,3,(unsigned char*)"Wait...",16);while(1){if(touch_keys(1) == 1){delay_ms(350);receive_touch[0] += 1;Flags_draw = false;}if(touch_keys(2) == 1){if(Flags_draw){receive_touch[1] = 0;}else{delay_ms(350);receive_touch[1] = 1;}}if(receive_touch[0]==1){//printf("data:%d",receive_touch[0]);OLED_Clear();OLED_ShowString(0,0,(unsigned char*)"Sin",16);if(receive_touch[1] == 1){OLED_Clear();OLED_ShowString(0,0,(unsigned char*)"Sin",16);OLED_ShowString(0,4,(unsigned char*)"Start",16);receive_touch[1]=0;delay_ms(1000);Put_Down();delay_ms(1000);drawSin();Put_Up();delay_ms(1000);}}if(receive_touch[0]==2){//printf("data:%d",receive_touch[0]);OLED_Clear();OLED_ShowString(0,0,(unsigned char*)"Triangle",16);if(receive_touch[1] == 1){OLED_Clear();OLED_ShowString(0,0,(unsigned char*)"Triangle",16);OLED_ShowString(0,4,(unsigned char*)"Start",16);receive_touch[1]=0;Put_Down();delay_ms(1000);drawTriangle();Put_Up();delay_ms(1000);}}if(receive_touch[0]==3){//printf("data:%d",receive_touch[0]);OLED_Clear();OLED_ShowString(0,0,(unsigned char*)"Rect",16);if(receive_touch[1] == 1){//receive_touch[0]=0;OLED_Clear();OLED_ShowString(0,0,(unsigned char*)"Rect",16);OLED_ShowString(0,4,(unsigned char*)"Start",16);receive_touch[1]=0;Put_Down();delay_ms(1000);drawRect();Put_Up();delay_ms(1000);}}if(receive_touch[0]==4){OLED_Clear();OLED_ShowString(0,0,(unsigned char*)"ThreeLeaf",16);if(receive_touch[1] == 1){OLED_Clear();OLED_ShowString(0,0,(unsigned char*)"ThreeLeaf",16);OLED_ShowString(0,4,(unsigned char*)"Start",16);receive_touch[1]=0;//Put_Down();delay_ms(1000);drawThreeLeaf();Put_Up();delay_ms(1000);}}if(receive_touch[0]==5){OLED_Clear();OLED_ShowString(8,3,(unsigned char*)"Draw Line End",16);receive_touch[0]=0;receive_touch[1]=0;Flags_draw = true;}}}
三轮全向底盘绘制三角形、矩形、三叶草、正弦曲线的详细例程可下载文末资料获取。
6. 资料下载
三轮全向底盘-绘图
①绘图-例程源代码
②绘图-样机3D文件
资料详见:三轮全向底盘-绘图(STM32)
三轮全向底盘实现绘图功能相关推荐
- 三轮全向底盘实现SLAM导航功能
1. 功能说明 本文我们将利用键盘控制三轮全向底盘(R313b)小车运动完成slam建图,并能在已建好的地图里进行自主导航.slam导航可以拆分为三步: 第一步:能用键盘控制底盘的运动: 第二步:基于 ...
- STM32三轮全向底盘
STM32三轮全向底盘 最近在实验室培训,玩过麦克纳姆四轮底盘后,玩三轮全向底盘也有一段时间了,于是来分享一下自己的心得. 附图 这是去年参加robocon的底盘,三个大疆3508电机,一个全场定位模 ...
- 里程计模型(1):两轮差分底盘和三轮全向底盘
两轮差分底盘运动学模型 目前使用最为广泛的底盘可以说就是两轮差分底盘,此类底盘具有结构简单.成本低.模型简单的特点. 1.差分底盘运动模型 差分底盘运动模型如图. 轮子到底盘中心的距离:ddd 底盘中 ...
- 三轮全向底盘小车制作 STM32主控 串口无线遥控器
使用3D打印材料制作全向轮 STM32作为主控使用HAL库 制作简单手柄并使用串口无线模块和主控进行通信 主要是第一次见到三轮全向底盘,进行全向移动对他的算法什么很感兴趣,如果能自己制作一辆全向轮底盘 ...
- 四福来轮全向底盘实现写字功能
1. 功能说明 本文示例将实现R310b样机四福来轮全向底盘绘制"探索者"空心字的功能. 2. 电子硬件 本实验中采用了以下硬件: 主控板 Basra主控板(兼容Arduino U ...
- 四福来轮全向底盘实现画图功能
1. 功能说明 本文示例将实现四轮全向底盘绘制正六边形的功能. 2. 结构说明 全向底盘具备结构简单.运动灵活等特点.四轮全向底盘采用全向福来轮作为执行轮,四个轮成正方形分布,且每个轮在斜45°方向安 ...
- 三轮全向底盘:运动学性能分析
速度分析 建立三轮底盘的速度物理学模型如图所示. 其中v1v_1v1.v2v_2v2.v3v_3v3分别为三个轮子的转速,ωωω为旋转角速度,vxv_xvx.vyv_yvy为车身坐标系中的速 ...
- 四福来轮全向底盘运动功能的实现
1. 运动功能说明 本文示例采用R310a样机,是一款十字分布型四福来轮全向底盘.它可以实现各个方向的平移运动以及转向运动. 全向福来轮底盘的一个特点是可以灵活的全向移动,四轮全向轮的全向移动需要四个 ...
- 1.三轮全向移动底盘运动学解析
三轮图片示意图 2.三轮理解 三轮全向移动底盘因其良好的运动性并且结构简单,近年来备受欢迎.三个轮子互相间隔120°,每个全向轮由若干个小滚轮组成,各个滚轮的母线组成一个完整的圆.机器人既可以沿轮面的 ...
最新文章
- UIWebView和UIActivityIndicatorView的结合使用
- java报错MalformedURLException: unknown protocol: c
- 廖的python教程_学廖老师的python教程想到的
- 关于移动端meta设置(未完待续)
- CSDN创始人蒋涛:开源吞噬世界,得开发者得天下
- MFC源码解读(一)最原始一个MFC程序,手写不用向导
- springboot集成druid_绝了!Dataway让SpringBoot不在需要Controller、Service、DAO等了
- tomcat升级步骤
- 在.net中使用鼠标手势的讲述
- Q-Fish 升级技嘉主板BIOS
- css 图片大小自适应div,css让图片自适应容器(div)大小
- 威联通nas怎么更换大硬盘_手把手教你威联通NAS怎么无损转移硬盘数据(TS-453Bmini)...
- 多媒体处理常用软件:图像、文本、音频、视频、动画、微课
- 逆向Mac版WPS(解除版本过期限制)
- 2022年终极NFT课程
- 无线路由器打印机服务器设置,newifi新路由打印机服务器设置全教程
- 鸿蒙玺绶能升级么,属性激增 《诛仙2》强力装备大集合(三)
- ZYNQ RFSoc开发板-usrp软件无线电X410mini开发板-5G评估板
- 【Java】插入排序、希尔排序详解
- 图文详解!10大高性能开发核心技术+
热门文章
- linux复制和剪切文件命令,linux下文件夹的创建、复制、剪切、重命名、清空和删除命令...
- 【MQTT学习1】MQTT协议的基本了解
- mysql常用命令和备份恢复
- 论文笔记:深度残差网络
- 【数据结构】二叉树的概念 | 满二叉树和完全二叉树 | 二叉树的基本性质
- 嵌入式之串口中断只能收到一个字节
- 信号分选c语言,一种新的雷达信号分选方法
- 交友网站如何运营盈利----谈下我的地方交友建站
- 左联右动==dome
- python怎么转换文件格式_python怎么转换数据类型