纪检委网站的建设/怎么网络推广
目录
一、题目要求
二、参考资源获取
三、TI板子可能用到的资源
1、环境搭建及工程移植
2、相关模块的移植
四、控制参考方案
1、整体控制方案+视频演示
2、视频演示部分核心代码
五、总结
一、题目要求
小编自认为:此次控制类类型题目的H题,相较于往年较为简单,功能也算单一,四个题目的时间要求都不是很高,容易得分,其中主要难点可能是TI芯片了,但是资源丰富,那也就不是问题了。
二、参考资源获取
嘉立创官方为了助力电赛,特地推广了一款TI的开发板——MSP0系列(刚好是题目要求的),其中覆盖开发环境的搭建(直接最熟悉的用Keil进行开发,同时搭配图形化配置,简直就是Keil+STM32Cube的开发模式),同时配套各种外设的开发教程以及各类传感器等模块的开发教程,附加源码示例,直接移植即可。
嘉立创电赛开发板x2https://lceda001.feishu.cn/wiki/JNu0wa35pi4feikXbmlcJRwLnGl
MSPM0G3507开发板https://wiki.lckfb.com/zh-hans/dmx/
三、TI板子可能用到的资源
1、环境搭建及工程移植
参考立创平台,搭建开发平台,使用Keil进行开发:
环境配置流程https://wiki.lckfb.com/zh-hans/dmx/beginner/install.html
重点是:在Keil环境下安装SysConfig 工具。SysConfig 是一个直观而全面的图形实用程序集合,用于配置引脚、外设、子系统和其他组件。它可助我们直观地管理、发现和解决配置冲突,以便有更多时间去编写核心逻辑代码。如下,其配置界面:
2、相关模块的移植
1、移植MPU6050模块
该模块主要用来转向角度控制等,可以使小车走直,平稳角度转向等。
2、移植TB6612电机驱动模块
用以驱动电机。
控制电机时,最好加上速度环控制,所以需要对编码器进行测速,可以通过配置定时器和外部中断实现测速,可以参考esp32测速方式。
参考内容:编码器相关知识及ESP32-Arduino程序_esp32解算ab编码器-CSDN博客
其他模块根据需要自行移植。。。。。。
四、控制参考方案
1、整体控制方案+视频演示
这里只是为了验证控制方案,小编没有电赛器材,所以就以STM32为主控,OpenMV摄像头巡线的方案进行演示。但控制方案、巡线原理都一样,都是通过控制黑线与中心线的偏差关系,只是电赛官方要求不准用摄像头,但用灰度传感器也一样。通过灰度传感来获取偏差,灰度优点是点位准确,只是数据相对摄像头获取的较为离散,但只用比列控制,也完全足够了。
最后根据速度环、转向环、巡线环的控制方式验证一下方案。以速度环为整体控制内环,外环由转向环和巡线环选择作用,在遇到黑线时开启巡线环,脱离黑线时开启转向环,其中转向环主要控制小车转向,并且按照某一方向直线行驶,如果转向不稳定,或者要求更高,可以引入角速度环。
基本控制流程框图如下:
方案改进:如果转向不稳,则可以引入角速度环,以控制转向时的速度稳定。。。。。。
以下为相关演示视频(原视频,关闭原声):
2024电赛H题方案演示一
2024电赛H题方案演示二
方案基本可行,速度稳定且并未到达该车上限,需要进一步的优化控制逻辑,这里使用的是统一速度行驶,可采取变速行使,可进一步提高稳定性和减少整体耗时。明显缺陷:MPU6050存在零漂等,准确度不好,如能用算法解决,稳定性可进一步提高,其次该车的初始摆放位置较为重要, 初始角度为后续转向的参考。若采用四轮小车,只需将左边两轮和右边两轮进行分别同步即可,可能还需要微调参数。
2、视频演示部分核心代码
#define limit_180_Z(n) ((n>0)?(n-360):n)
#define limit_180_F(n) ((n<0)?(n+360):n)int base_speed = 70;// cm/s
int Target_angle = 0;#define OpenMV_Kp 1.1
#define Line_Kp 2
uint8_t ABCD_flag = 0;
uint8_t TI_flag = 2;void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{float angle_Err = 0;static uint8_t last_line_flag = 0;if(htim->Instance == TIM2 ){motorA.speed = get_speed_motorA();motorB.speed = get_speed_motorB();
// motorA.S += motorA.speed*0.01;//路程等于速度积分,单位:cm
// motorB.S += motorB.speed*0.01;//cmif(last_line_flag != line_flag) {ABCD_flag++;}last_line_flag = line_flag;if(line_flag == 1)//巡线{motorA.Target_Speed = base_speed - rho_org * OpenMV_Kp;motorB.Target_Speed = base_speed + rho_org * OpenMV_Kp;}else //转向和直线行使{ if(TI_flag == 1)//视频一演示,不交叉走圈{ if(ABCD_flag == 2||ABCD_flag == 6||ABCD_flag == 10||ABCD_flag == 14){Target_angle = -180;angle_Err = limit_180_Z(MPU6050.yaw)-(Target_angle+ABCD_flag*0.6);}else{Target_angle = 0;angle_Err = MPU6050.yaw-(Target_angle+ABCD_flag*0.5);}}else if(TI_flag == 2)//视频二演示,交叉走圈{if(ABCD_flag == 0||ABCD_flag == 4||ABCD_flag == 8||ABCD_flag == 12){Target_angle = -33;angle_Err = MPU6050.yaw-Target_angle;}if(ABCD_flag == 2||ABCD_flag == 6||ABCD_flag == 10||ABCD_flag == 14){Target_angle = 215;angle_Err = limit_180_F(MPU6050.yaw)-Target_angle; } }motorA.Target_Speed = base_speed - angle_Err * Line_Kp;motorB.Target_Speed = base_speed + angle_Err * Line_Kp; if(ABCD_flag == 16) //走完四圈停下来{motorA.Target_Speed = 0;motorB.Target_Speed = 0;} }motorA.out = pid_control(POSITION_PID,motorA.speed,motorA.Target_Speed,200,18,15);motorB.out = pid_control(POSITION_PID,motorB.speed,motorB.Target_Speed,200,18,15); Load(motorA.out, motorB.out);}
}
其中,代码较为粗糙,可以进一步改善:
1、交叉走圈时,可以先转到指定角度,然后再加基础速度,稳定性可能要好的多,方便提速。
2、再经过ABCD点一定距离或时间时,可以加快速,快到ABCD点时或到ABCD点时减速,甚至去掉基础速度,整体采用变速运行,前提是巡线和直线行驶部分要稳。
3、MPU6050零漂处理,有条件直接换更好的陀螺仪使用,如果要继续使用,可以采用:
(1)在小车运行前,要等待其初始化完成,并稳定读取初始值,然后再启动小车的运动控制。
(2)更好的是,等待其初始化完成后,多次进行数据读取并采用均值滤波,将处理后的值作为初始值,最后再进行小车运动控制。
4、等待大家发言,有更好方法欢迎评论留言。
其他相关代码请查看:2024电赛H题可能用到的代码——自动行驶小车-CSDN博客小编分享了2024电赛H题参考方案(+视频演示+核心控制代码)——自动行驶小车文章后,于是根据其中问题写了一些可能用到的参考代码,希望能帮助大家,有问题欢迎大家指出。代码仅作参考,有误之处多担待。https://blog.csdn.net/qq_67319052/article/details/140805365
五、总结
控制的难点就在与ABCD四点之间的丝滑连接,如何让小车又快又稳的运行,最后比拼的就是时间了,可能也是比赛现场的重点评判标准,毕竟选择该题的人多,水涨船高。
相关文章:
2024电赛H题参考方案(+视频演示+核心控制代码)——自动行驶小车
目录 一、题目要求 二、参考资源获取 三、TI板子可能用到的资源 1、环境搭建及工程移植 2、相关模块的移植 四、控制参考方案 1、整体控制方案视频演示 2、视频演示部分核心代码 五、总结 一、题目要求 小编自认为:此次控制类类型题目的H题,相较于往年较…...

设计模式14-享元模式
设计模式14-享元模式 由来动机定义与结构代码推导特点享元模式的应用总结优点缺点使用享元模式的注意事项 由来动机 在很多应用中,可能会创建大量相似对象,例如在文字处理器中每个字符对象。在这些场景下,如果每个对象都独立存在,…...

Javascript中canvas与svg详解
Canvas 在JavaScript中,<canvas> 元素用于在网页上绘制图形,如线条、圆形、矩形、图像等。它是一个通过JavaScript和HTML的<canvas>元素来工作的绘图表面。<canvas> 元素自身并不具备绘图能力,它仅仅提供了一个绘图环境&a…...

【BUG】已解决:No Python at ‘C:Users…Python Python39python. exe’
No Python at ‘C:Users…Python Python39python. exe’ 目录 No Python at ‘C:Users…Python Python39python. exe’ 【常见模块错误】 【解决方案】 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰,211科班…...

Flink SQL 的工作机制
前言 Flink SQL 引擎的工作流总结如图所示。 从图中可以看出,一段查询 SQL / 使用TableAPI 编写的程序(以下简称 TableAPI 代码)从输入到编译为可执行的 JobGraph 主要经历如下几个阶段: 将 SQL文本 / TableAPI 代码转化为逻辑执…...

[AI Mem0] 源码解读,带你了解 Mem0 的实现
Mem0 的 CRUD 到底是如何实现的?我们来看下源码。 使用 先来看下,如何使用 Mem0 import os os.environ["OPENAI_API_KEY"] "sk-xxx"from mem0 import Memorym Memory()# 1. Add: Store a memory from any unstructured text re…...

【LLM】-10-部署llama-3-chinese-8b-instruct-v3 大模型
目录 1、模型下载 2、下载项目代码 3、启动模型 4、模型调用 4.1、completion接口 4.2、聊天(chat completion) 4.3、多轮对话 4.4、文本嵌入向量 5、Java代码实现调用 由于在【LLM】-09-搭建问答系统-对输入Prompt检查-CSDN博客 关于提示词注入…...

C语言 之 理解指针(4)
文章目录 1. 字符指针变量2. 数组指针变量2.1 对数组指针变量的理解2.2 数组指针变量的初始化 3. 二维数组传参的本质4. 函数指针变量4.1 函数指针变量的创建4.2 函数指针变量的使用 5. 函数指针数组 1. 字符指针变量 我们在前面使用的主要是整形指针变量,现在要学…...

Java设计模式—单例模式(Singleton Pattern)
目录 一、定义 二、应用场景 三、具体实现 示例一 示例二 四、懒汉与饿汉 饿汉模式 懒汉模式 五、总结 六、说明 一、定义 二、应用场景 单例模式的应用场景主要包括以下几个方面: 日志系统:在应用程序中,通常只需要一个日…...

AV1帧间预测(二):运动补偿
运动补偿(Motion Compensation,MC)是帧间预测最基础的工具,AV1支持两种运动补偿方式,一种是传统的平移运动补偿,另一种是仿射运动补偿。下面分别介绍这两种运动补偿方法。 平移运动补偿 平移运动补偿是最传统的运动补偿方式,H.26…...

数学建模(5)——逻辑回归
一、二分类 import numpy as np import matplotlib.pyplot as plt from sklearn import datasets from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LogisticRegression from sklea…...

【C++高阶】:深入探索C++11
✨ 心似白云常自在,意如流水任东西 🌏 📃个人主页:island1314 🔥个人专栏:C学习 🚀 欢迎关注:👍点赞 Ǵ…...

6. 自定义Docker镜像
如何自定义Docker镜像:从基础到实践 Docker作为一个容器化平台,使得应用的打包、分发和运行变得更加高效和便捷。本文将详细介绍如何自定义一个Docker镜像,包括镜像的构成、分层原理、创建自定义镜像的具体步骤,并演示如何打包和…...

「12月·长沙」人工智能与网络安全国际学术会议(ISAICS 2024)
人工智能与网络安全国际学术会议(ISAICS 2024)将于2024年12月20日-2024年12月22日在湖南长沙召开。会议中发表的文章将会被收录,并于见刊后提交EI核心索引。会议旨在在为国内与国际学者搭建交流平台,推进不同学科领域的融合发展,就当今人工智能与网络安全范畴内各学…...

【技术支持案例】使用S32K144+NSD8381驱动电子膨胀阀
文章目录 1. 前言2. 问题描述3. 理论分析3.1 NSD8381如何连接电机3.2 S32K144和NSD8381的软件配置 4.测试验证4.1 测试环境4.2 测试效果4.3 测试记录 1. 前言 最近有客户在使用S32K144NSD8381驱动电子膨胀阀时,遇到无法正常驱动电子膨胀阀的情况。因为笔者也是刚开…...

第二期:集成电路(IC)——智能世界的微观建筑大师
嘿,小伙伴们!👋 我是你们的老朋友小竹笋,一名热爱创作和技术的工程师。上一期我们聊了聊AI芯片,这次我们要深入到更微观的层面,来探究集成电路(IC)的世界。准备好一起探索了吗&#…...

基于物联网的区块链算力网络,IGP/BGP协议
目录 基于物联网的区块链算力网络 IGP/BGP协议 IGP(内部网关协议) BGP(边界网关协议) 内部使用ISP的外部使用BGP的原因 一、网络规模和复杂性 二、路由协议的特性 三、满足业务需求 四、结论 基于物联网的区块链算力网络 通 过 多个物联网传感器将本地计算…...

每日一题~960 div2 A+B+C(简单奇偶博弈,构造,观察性质算贡献)
A题意: N 长的数组。 一次操作: 最开始的mx 为零。 选出一个数(使得这个数>mx) ,之后将mx 更新为这个数,将这个数置为零。 不能做这个操作的,输。 问是否有先手赢的策略。有的话,输出yes 否则no 当时一…...

音视频入门基础:H.264专题(17)——FFmpeg源码获取H.264裸流文件信息(视频压缩编码格式、色彩格式、视频分辨率、帧率)的总流程
音视频入门基础:H.264专题系列文章: 音视频入门基础:H.264专题(1)——H.264官方文档下载 音视频入门基础:H.264专题(2)——使用FFmpeg命令生成H.264裸流文件 音视频入门基础&…...

Aboboo一些操作
常用快捷键⌨ 快捷键/操作方式 功能 鼠标中键/Esc 进入/退出全屏 空格/Tab 暂停/恢复播放 左/右箭头 快退/快进 Ctrl-左/右箭头 30秒快退/快进 Alt-左/右箭头 60秒快退/快进 Ctrl-Alt-左/右箭头 播放速率调节 PageUp/PageDown 上一句/下一句 上下箭头/滚轮 …...

获取行号LineNumberReader
(每日持续更新)jdk api之LineNumberReader基础、应用、实战-CSDN博客...

python数据结构与算法
0.时间复杂度和空间复杂度 快速判断算法时间复杂度:算法运行时间 1.确定问题规模n 2.循环减半 logn 3.k层关于n的循环 n^k 空间复杂度:评估算法内存占用大小 使用几个变量 O(1) 使用长度为n的一维列表 O(n)…...

大数据学习之Flink基础(补充)
Flink基础 1、系统时间与事件时间 系统时间(处理时间) 在Sparksreaming的任务计算时,使用的是系统时间。 假设所用窗口为滚动窗口,大小为5分钟。那么每五分钟,都会对接收的数据进行提交任务. 但是,这里有…...

C++基础语法:友元
前言 "打牢基础,万事不愁" .C的基础语法的学习."学以致用,边学边用",编程是实践性很强的技术,在运用中理解,总结. 以<C Prime Plus> 6th Edition(以下称"本书")的内容开展学习 引入 友元提供了一种特别的方式,访问对象私有数据. 友元有三…...

【大模型系列】Video-LaVIT(2024.06)
Paper:https://arxiv.org/abs/2402.03161Github:https://video-lavit.github.io/Title:Video-LaVIT: Unified Video-Language Pre-training with Decoupled Visual-Motional TokenizationAuthor:Yang Jin, 北大&#x…...

【总结】nacos作为注册中心-应用启动失败:NacosDiscoveryProperties{serverAddr=‘127.0.0.1:8848‘……
问题现象 启动springboot应用时报错,能够读取到nacos配置,但是使用nacos作为注册中心,应用注册到nacos失败。 应用配置bootstrap.properties如下: # 应用编码,安装时替换变量 spring.application.namedata-center #…...

C语言——数组和排序
C语言——数组和排序 数组数组的概念数组的初始化数组的特点 排序选择排序冒泡排序插入排序 二分查找 数组 数组的概念 数组是一组数据 ; 数组是一组相同类型的数据或变量的集合 ; 应用场景: 用于批量的处理多个数据 ; 语法&…...

QEMU 新增QMPHMP指令【原文阅读】
文章目录 0x0 QEMU原文0x10x11 How to write monitor commands0x12 Overview0x13 Testing 0x20x21 Writing a simple command: hello-world0x22 Arguments 0x30x31 Implementing the HMP command 0x40x41 Writing more complex commands0x42 Modelling data in QAPI0x43 User D…...

【Linux】全志Tina配置屏幕时钟的方法
一、文件位置 V:\f1c100s\Evenurs\f1c100s\tina\device\config\chips\c200s\configs\F1C200s\sys_config.fex 二、文件内容 三、介绍 在此处可以修改屏幕的频率,当前为21MHz。 四、总结 注意选择对应的屏幕的参数,sdk所支持的屏幕信息都在此文件夹中…...

探索WebKit的CSS表格布局:打造灵活的网页数据展示
探索WebKit的CSS表格布局:打造灵活的网页数据展示 CSS表格布局是一种在网页上展示数据的强大方式,它允许开发者使用CSS来创建类似于传统HTML表格的布局。WebKit作为许多流行浏览器的渲染引擎,提供了对CSS表格布局的全面支持。本文将深入探讨…...