滚球控制系统详解 —— (附核心代码)

2023-05-16

最近练习了17年的国赛题 —— 滚球控制系统

这里展示一下画圆:

观看完整视频点这里

接下来,我来分享一下从搭整体结构到调试完的过程。

这是我搭完的整体结构 (缩小版)

(不管什么题,结构部分还是很重要的,结构搭得好,代码上就可能会轻松很多。)

(第一次搭这种稍大型的结构,对于搭结构小白的我来说还是有点难度的)

 最顶上的板我是用来挡光的,因为白天光线强,晚上弱,openMV跟踪颜色的阈值有点难调。 

底部固定部分的是万向结 + 一些螺丝固定住。其他部分大多都是亚克力板和热熔胶固定住的。

一些要注意的点:

一开始,我把舵机的两个力臂刚刚好固定在了黑板的对角线上,像下图这样子。

 然后发现有的点控制效果很不好,如果单单想控制X或Y方向,两个舵机都得动,这样就比较麻烦,而且在代码上会很费劲,所以就把顶部黑板部分旋转了45°这样,下图所示。

 一个舵机只负责一个轴的控制,这样就简单多了。

另外我们要注意舵机的响应速度,在这道题中,舵机的响应速度快当然是更好些。我在网上看到提高舵机响应速度的方法是提高供电电压,虽说舵机的供电电压范围在5~6.8V之间,但我把供电部分弄到了差不多7V(使用起来没出现什么问题),个人觉得明显会快些。

这是我的主控和供电驱动部分

我选择的主控是MSP432P401R,先熟悉一下Ti的控制板,以至于23年国赛遇到Ti的题目不会慌。

右边部分其实就是个BUCK电路,另外我加了个TB6612模块的插座上去,这样方便其他场景需要电机使用。

这是我控制平衡的核心部分代码

if(val_1 > 0)   
{
	val_1 = (val_1 > 600) ? 600 : val_1;      
	MAP_Timer_A_setCompareValue(TIMER_A2_BASE,TIMER_A_CAPTURECOMPARE_REGISTER_1,1900 - val_1);
}
else						
{
	val_1 = -val_1;
	val_1 = (val_1 > 600) ? 600 : val_1;
	MAP_Timer_A_setCompareValue(TIMER_A2_BASE,TIMER_A_CAPTURECOMPARE_REGISTER_1,1900 + val_1);
}

if(val_2 > 0)		
{
	val_2 = (val_2 > 600) ? 600 : val_2;
	MAP_Timer_A_setCompareValue(TIMER_A1_BASE,TIMER_A_CAPTURECOMPARE_REGISTER_2,1900 + val_2);
}
else						
{
	val_2 = -val_2;
	val_2 = (val_2 > 600) ? 600 : val_2;
	MAP_Timer_A_setCompareValue(TIMER_A1_BASE,TIMER_A_CAPTURECOMPARE_REGISTER_2,1900 - val_2);
}
	

1900是我使黑板水平时,舵机需要的占空比。限幅600是舵机从最高点到最低点的占空比范围是1300~2500。正负号的话,可以根据实际运动极性改就好。

然后就是调PID的过程了,我这里P只给了2点多,然后D调到30多这样,I没有用上。

到这里我的小球就可以较好的平衡了。

想让小球在哪个点平衡,只需要把修改两个舵机PID的目标值为对应坐标点就好。

接下来,我这里讲一下本题的难点——画圆

(这部分我一开始是想通过很多个点来组成一个圆,但我实际做出来的效果不太好,经师兄指点,换了另外一种方法,效果好多了。)

画圆部分,我这里用到了正弦和余弦两个函数。高中的时候,我们学过圆的参数化方程

 x² + y² = r² ,所以我们让一个舵机做正弦运动,另外一个所余弦运动,两者叠加便是圆周运动。

如果两个舵机都做正弦或者余弦运动,两者叠加便是直线运动。

这里附上我画圆部分的核心代码, (163,123)是我的圆心

 if(draw_round1 == 1)  //正向画圆
 {
	 t++;
		p = k * t;
		set_pid_target_1( 163 + (35 * _sin(p) ));	set_pid_target_2( 123 + (35 * _cos(p)) );
		if( p >= 6.28)
			t = 0; 
 }
 
 if(draw_round2 == 1)  //逆向画圆
 {
	 t++;
		p = k * t;
		set_pid_target_1( 163 + (35 * _sin(p) ));	set_pid_target_2( 123 - (35 * _cos(p)) );
		if( p >= 6.28)
			t = 0; 
 }

t是用来计数的,我这里每5ms中断一次,t也增加一次。

k的定的是浮点数0.13f,增大k可以增加画圆的速度。

这里有一点需要注意:

上面计算正弦和余弦,我这里用的是查找表法。

(可能有小伙伴没听说过这个词,我这里简单说说。查找表就是查表,我们把所有出现的结果的值用数组存起来,这样,在我们进行计算的时候,直接去读这个结果就好,而不用花太多时间去计算,这样既减轻了MCU负担又能得到更好的控制效果)

我的查找表用的是这位博主写的   ———  copy一下就能用,非常方便 0.0

就写到这了,有什么想问的可以在评论区告诉我 。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

滚球控制系统详解 —— (附核心代码) 的相关文章

  • 51单片机-定时器(简易时钟的实现)

    文章目录 前言一 定时器的功能以及定时器的结构定时器的功能定时器的结构 二 定时器的控制工作模式寄存器TMOD控制寄存器TCON写代码来初始化定时器 三 定时器引发中断简易时钟主程序main c延时函数Delay c控制LCD162模块LC
  • 用于评估婴儿认知发展的IMU内嵌式玩具

    0 5岁是神经发育的敏感时期 xff0c 对身心健康至关重要的EF xff08 执行功能 Executive functions xff09 会在这个时期出现 在现代临床和研究实践中 xff0c 编码员通过手动标记视频中婴儿在使用玩具或社交
  • yolo+ocr集装箱字符识别(pytorch版本)

    前言 这个是我们 的大创项目 当我们拿到一份数据集 xff0c 首先就是要对整个项目有个较为清晰的认识 xff0c 整体的思路是什么 xff0c 难点在哪 xff0c 怎么部署和实现 1 整体的思路 xff1a 先通过目标检测网络 xff0
  • ROS话题通信实现发布接收以及vscode编译配置(五)C++版本

    在ROS中每一个功能点都是一个单独的进程 xff0c 每一个进程都是独立运行的 ROS是进程 xff08 也称为Nodes xff09 的分布式框架 因为这些进程甚至还可分布于不同主机 xff0c 不同主机协同工作 xff0c 从而分散计算
  • CMakeList

    目录 1 简介 2 常用命令 2 1 指定 cmake 的最小版本 2 2 设置项目名称 2 3 设置编译类型 2 4 指定编译包含的源文件 2 4 1 明确指定包含哪些源文件 2 4 2 搜索所有的 cpp 文件 2 4 3自定义搜索规则
  • 多旋翼飞行器设计与控制(二)—— 基本组成

    多旋翼飞行器设计与控制 xff08 二 xff09 基本组成 一 机架 1 机身 指标参数 xff1a 重量 xff1a 尽可能轻轴距 xff1a 外圈电机组成圆的直径材料 xff1a 冲碳纤维就完了布局 xff1a 2 起落架 作用 xf
  • 多旋翼飞行器设计与控制(六)—— 动态模型和参数测量

    多旋翼飞行器设计与控制 xff08 六 xff09 动态模型和参数测量 一 多旋翼控制模型 刚体运动学模型 跟质量与受力无关 xff0c 只研究位置 速度 姿态 角速度等参量 xff0c 常以质点为模型 刚体动力学模型 它与一般刚体动力学模
  • 多旋翼飞行器设计与控制(七)—— 传感器标定和测量模型

    多旋翼飞行器设计与控制 xff08 七 xff09 传感器标定和测量模型 一 三轴加速度计 三轴加速度计是一种惯性传感器 xff0c 能够测量物体的比力 xff0c 即去掉重力后的整体加速度或者单位质量上作用的非引力 当加速度计保持静止时
  • 【STM32】stm32通过地址操作寄存器

    stm32通过地址操作寄存器 0x01 stm32数据类型所占字节数0x02 如何查看寄存器地址 xff08 基地址 43 偏移地址 xff09 0x03 操作寄存器地址控制LED闪烁 xff08 代码 xff09 0x04 通过定义结构体
  • ARM裸机开发——启用SDRAM的按键中断控制灯实验

    写在前面 本文承接前文嵌入式系统学习 嵌入式系统 Linux环境搭建和LED灯闪烁实验 以S3C2440A作为开发平台 xff0c 以Linux中ARM Linux gcc交叉编译器作为编译环境进行学习 xff0c 由于本课程为单片机基础的
  • 二维vector

    span class token macro property span class token directive keyword include span span class token string lt iostream gt s
  • 13.request-session,验证码

    使用session使得请求变成一个对象 注意登录页面隐藏的参数 爬取古诗文登录页面 span class token keyword import span requests span class token keyword from sp
  • STM32-串口通信(串口的接收和发送)

    文章目录 STM32的串口通信一 STM32里的串口通信二 串口的发送和接收串口发送串口接收 三 串口在STM32中的配置四 串口接收的两种实现方式1 需要更改的地方2 查询RXNE标志位3 使用中断 总结 STM32的串口通信 本文在于记
  • quick sort(c++)以及k选取

    include lt iostream gt include lt vector gt using rank 61 int using namespace std int dash 61 0 int swap vector lt int g
  • STLINK CONNECTION ERROR 问题的解决

    打开STLINK UTILITY 连接芯片也连接不上 在settings里面 选择这个连接模式 xff0c 按下芯片复位键的同时 xff0c 点击连接 st link的灯闪烁红蓝相间的光表示连接成功 松开芯片reset xff0c 既连接成
  • 解决ros2安装出现的问题

    Cannot locate rosdep definition for python3 pytest 解决方法是输入弹幕命令 然后输入安装功能依赖的命令 如果有占用进程问题 xff0c 就重启 http t csdn cn WwqJa
  • conda activate 出错

    问题及解决办法 1 使用conda activate出错 在cmd中使用 conda bat activate 进入环境后在进行操作 2 conda install出错 xff0c 使用pip install 3 在cmd 中使用tenso
  • 树莓派4b 安装ubuntu20.04server和图形化界面遇到的问题

    树莓派安装图形界面参考教程 树莓派4b安装Ubuntu 18 04系统及图形桌面 树莓派4B安装 ubuntu20 04 amp VNC远程桌面 amp 安装ROS noetic 树莓派4b安装Ubuntu和ROS的完整爬坑记录 2021年
  • 【STM32】串口接收任意字符串

    目录 前言cube配置usart h xff1a usart cmain xff1a 效果 前言 之前写了一篇STM32hal库串口中断接收任意字符 实际上是不完美的 xff0c 他接收到换行符就完蛋了 花了点时间深入研究了一下hal库的串

随机推荐

  • 使用封装的axios发送请求

    使用封装的axios发送请求 1 src api api js 定义请求路由方法 span class token function import span URLS from span class token string 39 conf
  • STM32串口驱动

    首先了解串口通信的一些基本原理 xff1a 串口通信 xff1a 串口通信是指数据通过一条数据线 xff08 或者两条差分线 xff09 一位接着一位的传输出去 串口通信的优点是占用硬件资源少 xff0c 且传输距离较远 xff0c 缺点是
  • IIC 驱动OLED

    IIC总线可以驱动很多器件 xff0c 比较常见的有OLED EEPROM存储器 xff08 AT24C02 xff09 温度传感器 xff08 LM75A xff09 温湿度传感器 xff08 DHT11 xff09 等 有关IIC总线协
  • Stm32-使用TB6612驱动电机及编码器测速

    这里写目录标题 起因一 电机及编码器的参数二 硬件三 接线四 驱动电机1 TB6612电机驱动2 定时器的PWM模式驱动电机 五 编码器测速1 定时器的编码器接口模式2 定时器编码器模式测速的原理3 编码器模式的配置4 编码器模式相关代码5
  • CAN总线协议入门基础原理

    CAN 是 Controller Area Network 的缩写 xff08 以下称为 CAN xff09 xff0c 是 ISO 1 国际标准化的串行通信协议 CAN 通过 ISO11898 及 ISO11519 进行了标准化 xff0
  • SPI总线协议基本原理及相关配置

    单片机应用中 xff0c 最常用的通信协议主要有三个 xff0c 即USART IIC和SPI 关于前两个的介绍在之前文章学习过 xff0c 这次介绍一下第三个通信协议 SPI SPI Serial Peripheral Interface
  • 利用定时器的输出比较功能产生PWM驱动舵机

    一 定时器基本原理 首先我们来看一下ST官方给出的关于定时器的相关介绍 xff1a xff08 以STM32F103C8T6为例 xff09 STM32F103C8T6 含有 4 个 16 位定时器 xff0c 分别是一个高级定时器 TIM
  • ST-LINK固件升级

    关于st link固件升级注意的问题 在下载调试的过程中 xff0c 程序可能由于st link版本过旧而提示 command not supported 的错误 xff0c 这就要求我们升级st link固件才可以正常下载 但是在升级的过
  • 关于英伟达jetson nano的搭配双目摄像头跑ORB_SLAM2

    1 安装系统 按照商家给的资料安装 xff0c 将Ubuntu18 04LTS镜像拷贝到tf卡中 xff0c 插上jetson nano就可以安装了 2 系统设置 进入系统我先把系统语言设置为中文 xff0c 在右上角的设置中找到系统设置中
  • 双目摄像头(CSI-IMX219)的标定

    1 介绍 网上关于这类标定有挺多教程的 xff0c 但由于这个摄像头的特殊性 xff0c 所以不可能完全安装教程来走 目前来说有3种标定方法 xff1a ROS操作系统来标定 matlab标定 opencv标定 这三种方法我先试了用ROS来
  • 小学生学AD16(入门级别,看这篇就够了)

    1 软件安装 xff1a AD16的安装我就不多介绍了 xff0c csdn一搜一大把 要学一个软件 xff0c 那么软件安装是必经之路 xff0c 不要认为软件安装不重要 xff08 如果你的安装完之后桌面没快捷方式 xff0c 那么可以
  • Arduino串口绘图器双通道绘制

    Serial print val Serial print 34 34 Serial println muBiao 其实只用在两个变量之间加个 xff0c 就行了 参考网址 https www norwegiancreations com
  • 关于神舟笔记本TX8连副屏经常蓝屏的问题

    大概率是3060显卡驱动的问题 xff0c 可以试试重新安装显卡驱动 若还是不行就换个接口 xff0c 不要用hdim的接口 xff0c 那个是直接连3060的 换剩下两个的minidp接口其中一个 xff0c 第一个不要接 xff0c 那
  • 51单片机入门(小学生都能学会)

    序 xff1a 时隔一年 xff0c 我终于从二年级到三年级了 xff01 由于小学三年级这学期要学单片机 xff0c 故写下这篇笔记留下些什么 由于自己也是新手 xff0c 欢迎各位指出本文的各种错误 1 什么是51单片机 为什么要说这个
  • 解决使用WinScp连接Ubantu系统失败的问题---SSH无法连接

    起因 为了互通Linux系统和Windows系统的文件 xff0c 以更好的实现文件管理和资源共享 所以在查阅资料后 xff0c 使用WinScp xff0c WinSCP是一个Windows环境下使用SSH的开源图形化SFTP客户端 它的
  • 小学生51系列之基础知识

    1 单片机的基本结构 说到基本结构 xff0c 就是指51单片机的硬件组成 51单片机由中央处理器CPU 储存器 定时器 I O端口 组成 其中储存器包含数据储存器 xff08 RAM xff09 和程序储存器 xff08 ROM xff0
  • ros 接入Livox Mid-70

    最近在研究3d避障激光 大疆Livox mid 70 xff0c 记录下接入过程 环境信息 xff1a Ubuntu 18 04 ros melodic 1 livox view 点云可视化 xff08 1 xff09 根据livox mi
  • ROS+opencv实践-二维码识别

    一 安装二维码识别的功能包 sudo apt span class token operator span get install ros span class token operator span melodic span class
  • C语言简单链表详细步骤详解

    43 链表 gt 小阿豪带你写链表 xff01 xff01 xff01 xff01 进入正文 span class token number 1 span 首先 xff0c 先想好自己要创建的链表格式以及最后的的显示界面 xff01 xff
  • 滚球控制系统详解 —— (附核心代码)

    最近练习了17年的国赛题 滚球控制系统 这里展示一下画圆 xff1a 观看完整视频点这里 接下来 xff0c 我来分享一下从搭整体结构到调试完的过程 这是我搭完的整体结构 xff08 缩小版 xff09 不管什么题 xff0c 结构部分还是