当前位置: 首页 > news >正文

STC32G 三轮车负压电磁

文章目录

  • 前言
  • 整车效果
  • 控制思路
    • 循迹
    • 环岛处理
    • 障碍处理
  • 关键代码部分
    • 差比和以及当前速度计算
    • 角速度环
    • 速度环
    • 环岛处理
    • 障碍处理

前言

年后就没怎么碰车了,到3月中旬换三轮了,可算有一点成效了,做个记录。

整车效果

三轮负压电磁

慢速元素识别

控制思路

循迹

角速度环以及速度环

差比和的结果与0做差得到的误差作为角速度环的输入。
角速度环的输出输出作为我们期望小车转向的角速度。

简单对差速小车建模,以顺时针方向的角速度为正参考方向,推导数学公式可得

vLref=vm+ωL2v_{Lref}=v_m+\frac{\omega L}{2}vLref=vm+2ωL
vRref=vm−ωL2v_{Rref}=v_m-\frac{\omega L}{2}vRref=vm2ωL

其中vLrefv_{Lref}vLref是左轮的参考速度,vRrefv_{Rref}vRref是右轮的参考速度,vmv_mvm是小车整体的运行速度,或假想小车中心有一个轮子的运行速度,LLL是车模后轮的轮距,我测量的D车模的后轮距为0.17m,ω\omegaω为小车的角速度,即角速度环的输出

得到左右两轮子的参考速度以后,经过速度环控制后得到左右电机的占空比并幅值即可。

其中角速度环用PD控制,P环节用于放大误差送入矫正环节(在这里的三轮车矫正环节即控制两个轮子的速度以矫正误差),D环节用于抑制车体的震荡;速度环用PI控制,P放大误差进行速度调节,I用于消除静差,尤其是当我们上负压以后,I尤为重要。

由于三轮车的运动轨迹完全取决于两个轮子速度之间的关系,两个轮子的速度环控制必须做到快速而精准,需花时间调节速度环的参数。

电机PID参数整定

环岛处理

  1. 检测到圆环(预圆环)(某个电感大于某个阈值)
  2. 到达最佳入环位置(强制入环,直到陀螺仪大于某个,开始园内循迹)
  3. 圆内循迹
  4. 出环。

障碍处理

  1. 识别障碍**(TOF测距小于某个限制)**
  2. 避开障碍(左右轮固定差速,直到陀螺仪积分大于某个角度)
  3. 回到赛道(左右轮固定差速,直到陀螺仪为小于某个角度)
  4. 姿态调整(让小车的姿态基本与赛道平齐,直到陀螺仪角度在某个范围内或误差在某个范围内)

关键代码部分

差比和以及当前速度计算

三电感电磁循迹小车

角速度环

void dir_loop()
{float temp;pid_steer.ek =  0 - error;temp = pid_steer.KP * pid_steer.ek+ imu660ra_gyro_z / 65.6;
//           + 300 * (pid_steer.ek - pid_steer.ek_1); // 参考角速度pid_motor_L.SetValue = speed_rate * speed_goal  -  temp * 0.0875;pid_motor_R.SetValue = speed_rate * speed_goal  +  temp * 0.0875;
}

速度环

void speed_loop()
{float inc_L, inc_R;// 限制内轮速度if(pid_motor_L.SetValue < 0)pid_motor_L.SetValue = 0;if(pid_motor_R.SetValue < 0)pid_motor_R.SetValue = 0;// 外轮速度限制if(pid_motor_L.SetValue > 2 * speed_goal * speed_rate)pid_motor_L.SetValue = 2 * speed_goal * speed_rate;if(pid_motor_R.SetValue > 2 * speed_goal * speed_rate)pid_motor_R.SetValue = 2 * speed_goal * speed_rate;inc_L = PID_Control_Inc(&pid_motor_L, 0);inc_R = PID_Control_Inc(&pid_motor_R, 0);duty_L += inc_L;duty_R += inc_R;if(duty_L > Motor_UpperLimit)duty_L = Motor_UpperLimit;if(duty_L < Motor_LowerLimit)duty_L = Motor_LowerLimit;if(duty_R > Motor_UpperLimit)duty_R = Motor_UpperLimit;if(duty_R < Motor_LowerLimit)duty_R = Motor_LowerLimit;
}

环岛处理

void circ_handler()
{static uint16 count_delay_R_circ_pre;static uint16 count_delay;if(flag_L_circ_pre) // 预圆环阶段{count_delay_R_circ_pre++;if(count_delay_R_circ_pre > 0.5 / speed_goal * 60 * TIM1_ISR_F) //{flag_L_circ_pre = 0;flag_L_circ_frc = 1; // force to get into circ}}if(flag_L_circ_frc){Angle_circ += imu660ra_gyro_z * 0.002 / 65.6;if(Angle_circ < -35){flag_L_circ_frc = 0;flag_L_circ_in = 1;flag_L_circ_out = 0;}else{pid_motor_L.SetValue = 0 * speed_rate * speed_goal;pid_motor_R.SetValue = 2 * speed_rate * speed_goal;}}if(flag_L_circ_in){Angle_circ += imu660ra_gyro_z * 0.002 / 65.6;if(Angle_circ <= -300)flag_L_circ_in = 0;}if(flag_L_circ_in == 0 && flag_L_circ_out == 0){count_delay++;if(count_delay > 5 * TIM1_ISR_F){flag_L_circ_out = 1; // 已出环count_delay = 0;Angle_circ = 0;}}
}

障碍处理

void block_handler()
{if(flag_block_detected){pid_motor_L.SetValue = 0 * speed_rate * speed_goal;pid_motor_R.SetValue = 2 * speed_rate * speed_goal;Angle_block += imu660ra_gyro_z * 0.002 / 65.6;}if(Angle_block < -45){flag_block_detected = 0;flag_block_back = 1;}if(flag_block_back){if(Angle_block < 50){pid_motor_R.SetValue = 0 * speed_rate * speed_goal;pid_motor_L.SetValue = 2 * speed_rate * speed_goal;}elseflag_block_adjust = 1;if(flag_block_adjust){pid_motor_L.SetValue = 0.3 * speed_rate * speed_goal;pid_motor_R.SetValue = 1.7 * speed_rate * speed_goal;}Angle_block += imu660ra_gyro_z * 0.002 / 65.6;}if(Angle_block < 10 && Angle_block > -10 && flag_block_adjust){flag_block_detected = 0;flag_block_back = 0;flag_block_adjust = 0;Angle_block = 0;}
}

相关文章:

STC32G 三轮车负压电磁

文章目录前言整车效果控制思路循迹环岛处理障碍处理关键代码部分差比和以及当前速度计算角速度环速度环环岛处理障碍处理前言 年后就没怎么碰车了&#xff0c;到3月中旬换三轮了&#xff0c;可算有一点成效了&#xff0c;做个记录。 整车效果 三轮负压电磁慢速元素识别控制思…...

【编程小记】位运算 x -x 表示含义

位运算 x & -x 表示含义一、原码反码补码二、位运算 x & -x 表示含义三、最终结论一、原码反码补码 在计算机中&#xff0c;整数的数据的存储是按照补码的方式进行存储的 按照数据与0的大小&#xff0c;数据又被分为正数与负数 正数的原码反码补码相同。负数的原码&…...

信创PC利旧管理新模式,麒麟信安助力国家某部委实现高效云办公

2022年&#xff0c;国家某部委所有桌面终端均已完成信创PC替换&#xff0c;并将日常办公所需的办公Office套件、OA无纸化办公系统、即时通讯系统等全部迁移至信创PC&#xff0c;但在进行生产业务系统迁移时&#xff0c;该单位信创PC仍存在业务系统与不同芯片PC难适配、应用难兼…...

【玩转RT-Thread】RT-Thread内核宏定义详解(rtdef.h)

文章目录1.RT-Thread版本信息2.RT-Thrad基础数据类型定义3.RT-Thread基本数据类型的范围4.RT-Thread系统滴答时钟最大计数值5.RT-Thread IPC数据类型范围6.RT-Thread避免未使用变量警告7.编译器相关定义8.编译器相关定义9.RT-Thread错误码定义1.RT-Thread版本信息 /* RT-Threa…...

PDF转化器免费版有哪些?这几款办公达人们都在用

在现代办公中&#xff0c;文件的排版和格式是非常重要的&#xff0c;无论是发布通知或提交策划书、投档简历或是发表论文、宣传海报或是产品说明书等&#xff0c;我们经常使用PDF文件格式发送给他人。然而&#xff0c;很多人需要对PDF进行编辑修改&#xff0c;通常会先将其转换…...

2022MathorCup赛题B

以下所有文字均基于作者的实际经验&#xff0c;并不具有完全的合理性&#xff0c;请谨慎参考 目录 一、问题分析 &#xff08;一&#xff09;问题一 &#xff08;二&#xff09;问题二 二、预处理 &#xff08;一&#xff09;训练集预处理 &#xff08;二&#xff09;测…...

适合销售使用的CRM系统特点

销售人员抱怨CRM系统太复杂&#xff0c;这是一个很重要的问题。毕竟&#xff0c;如果系统太难使用&#xff0c;会导致CRM实用率和效率下降&#xff0c;最终影响公司的运作。在这篇文章中&#xff0c;我们来探讨当销售抱怨crm客户系统太复杂了&#xff0c;企业该如何解决。 缺少…...

项目中获取resource下文件路径的方法

String filepathrequest.getServletContext().getRealPath("/")"files\\"; 获取的当前文件在实际运行的tomcat地址目录 String path ClassUtils.getDefaultClassLoader().getResource("").getPath()"tmp/files/"; 获取的是当前文件…...

Air32F103CBT6|CCT6|KEIL-uVsion5|本地编译|STClink|(6)、Air32F103编译下载

目录 一、环境搭建 准备工作 安装支持包 二、新建工程 添加外设库支持 测试代码 三、下载烧录 一、环境搭建 准备工作 安装MDK5&#xff0c;具体方法请百度&#xff0c;安装后需要激活才能编译大文件 下载安装AIR32F103的SDK&#xff1a;luatos-soc-air32f103: Air32f…...

结构(c的数据类型)

我们知道数组是相同类型元素的集合&#xff0c;那么结构就是不同类型的元素的集合&#xff0c;这些不同元素叫结构中的成员。是因为这些集合都有一定的联系才会归为一类的。 形式&#xff1a;我们知道&#xff0c;平时学习的int&#xff0c;double都叫类型&#xff0c;而结构是…...

前端常用的开工具库

常用的开发工具库 打包工具webpack webpack是现在最流行的打包工具之一&#xff0c;是javaScript的静态模块的打包器。会根据业务逻辑构建一个依赖的关系图&#xff0c;每一个依赖的单元都是一个模块&#xff0c;模块可以是js文件 可以图片资源或者css资源。在使用webpack的时…...

爬虫之数据库存储

在对于爬取数量数量较少时&#xff0c;我们可以将爬虫数据保存于CSV文件或者其他格式的文件中&#xff0c;既简单又方便&#xff0c;但是如果需要存储的数据量大&#xff0c;又要频繁访问这些数据时&#xff0c;就应该考虑将数据保存到数据库中了。目前主流的数据库有关系性数据…...

面试官:你可以用 for of 遍历 Object 吗?

本文以 用 for of遍历 Object 为引 来聊聊 迭代器模式。 什么是迭代器模式 迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素&#xff0c;而又不暴露该对象的内部表示。 ——《设计模式&#xff1a;可复用面向对象软件的基础》 可以说迭代器模式就是为了遍历存在的。提…...

蓝桥杯基础12:BASIC-3试题 字母图形

资源限制 内存限制&#xff1a;256.0MB C/C时间限制&#xff1a;1.0s Java时间限制&#xff1a;3.0s Python时间限制&#xff1a;5.0s 问题描述 利用字母可以组成一些美丽的图形&#xff0c;下面给出了一个例子&#xff1a; ABCDEFG BABCDEF CBABCDE DCBABCD EDC…...

基于PaddleOCR开发懒人精灵文字识别插件

目的 懒人精灵是 Android 平台上的一款自动化工具&#xff0c;它通过编写 lua 脚本&#xff0c;结合系统的「 无障碍服务 」对 App 进行自动化操作。在文字识别方面它提供的有一款OCR识别插件&#xff0c;但是其中有识别速度慢&#xff0c;插件大的缺点&#xff0c;所以这里将讲…...

PyTorch 深度学习实战 | DIEN 模拟兴趣演化的序列网络

01、实例&#xff1a;DIEN 模拟兴趣演化的序列网络深度兴趣演化网络(Deep Interest Evolution Network,DIEN)是阿里巴巴团队在2018年推出的另一力作,比DIN 多了一个Evolution,即演化的概念。在DIEN 模型结构上比DIN 复杂许多,但大家丝毫不用担心,我们将DIEN 拆解开来详细地说明…...

pyspark null类型 在 json.dumps(null) 之后,会变为字符串‘null‘

在将 hive 数仓数据写入 MySQL 时候&#xff0c;有时我们需将数据转为 json 字符串&#xff0c;然后再存入 MySQL。但 hive 数仓中的 null 类型遇到 json 函数之后会变为 ‘null’ 字符串&#xff0c;这时我们只需在使用 json 函数之前对值进行判断即可&#xff0c;当值为 null…...

LeetCode - 两数相加

题目信息 源地址&#xff1a;两数相加 给你两个 非空 的链表&#xff0c;表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的&#xff0c;并且每个节点只能存储 一位 数字。 请你将两个数相加&#xff0c;并以相同形式返回一个表示和的链表。 你可以假设除了数字…...

Office 2021专业版安装包及激活教程

[软件名称]: Office 2021 [软件大小]: 4.33GB [安装环境]: Win11/Win 10 [软件安装包下载]:https://pan.quark.cn/s/169ed49988b2 “Microsoft Office 2021是Microsoft推出的办公软件。2021年10月5日&#xff0c;Office 2021 for Mac发布&#xff0c;其中包含许多新功能 Micro…...

git版本规范-前端

前言 本文档适用于前端的小伙伴。针对目前前端只有测试环境和生产环境&#xff0c;为更好管理前端代码和适用于自动化部署&#xff0c;编写次文档&#xff0c;有不同意见的小伙伴可以进行讨论。 分支 由于没有目前没有预发环境&#xff0c;简化开发、测试、部署和发布流程&a…...

单细胞测序入门(一):技术概览与数据获取实战

1. 单细胞测序技术全景解读 第一次接触单细胞测序时&#xff0c;我被这项技术的精妙设计深深震撼。想象一下&#xff0c;传统测序就像把水果榨成混合果汁检测成分&#xff0c;而单细胞测序则是把每个苹果、香蕉、葡萄分开榨汁分析——这就是单细胞分辨率带来的革命性视角。 核心…...

如何降低ai率?盘点3个降ai率神器与5个手改技巧,降aigc全流程解析!

最近我发现很多同学都在苦恼ai率这件事&#xff0c;后台发来的截图里&#xff0c;那报告&#xff0c;简直红得触目惊心。 现在的系统早已是next level&#xff0c;不是看你用了什么词&#xff0c;而是在分析你的文本生成逻辑。今天这篇文章&#xff0c;我不讲虚的&#xff0c;…...

3个核心功能让Windows优化变得如此简单:Winhance中文版深度体验

3个核心功能让Windows优化变得如此简单&#xff1a;Winhance中文版深度体验 【免费下载链接】Winhance-zh_CN A Chinese version of Winhance. C# application designed to optimize and customize your Windows experience. 项目地址: https://gitcode.com/gh_mirrors/wi/Wi…...

GLM-4-9B-Chat-1M惊艳效果:碳中和白皮书(120页)中的技术路径拆解、时间节点校验与政策匹配度评分

GLM-4-9B-Chat-1M惊艳效果&#xff1a;碳中和白皮书&#xff08;120页&#xff09;中的技术路径拆解、时间节点校验与政策匹配度评分 1. 项目背景与核心能力 今天要给大家展示一个让人眼前一亮的技术应用场景——用GLM-4-9B-Chat-1M这个本地部署的大模型&#xff0c;来深度分…...

深入解析 snprintf 和 vsnprintf:安全格式化字符串的最佳实践

1. 为什么需要安全的字符串格式化 在C语言开发中&#xff0c;字符串格式化是最基础也最容易出问题的操作之一。我见过太多因为格式化字符串不当导致的缓冲区溢出漏洞&#xff0c;轻则程序崩溃&#xff0c;重则成为安全攻击的入口点。传统的sprintf函数就像个不设防的大门&#…...

技术揭秘:QtScrcpy如何实现跨平台Android投屏与低延迟控制

技术揭秘&#xff1a;QtScrcpy如何实现跨平台Android投屏与低延迟控制 【免费下载链接】QtScrcpy Android实时投屏软件&#xff0c;此应用程序提供USB(或通过TCP/IP)连接的Android设备的显示和控制。它不需要任何root访问权限 项目地址: https://gitcode.com/barry-ran/QtScr…...

如何打破微信单设备限制:WeChatPad终极指南

如何打破微信单设备限制&#xff1a;WeChatPad终极指南 【免费下载链接】WeChatPad 强制使用微信平板模式 项目地址: https://gitcode.com/gh_mirrors/we/WeChatPad 你是不是也遇到过这样的尴尬时刻&#xff1f;在电脑上登录微信工作&#xff0c;手机上的微信就被迫下线…...

PCIe金手指设计避坑指南:从硬件选型到PCB布局的5个关键细节

PCIe金手指设计避坑指南&#xff1a;从硬件选型到PCB布局的5个关键细节 在高速数字系统设计中&#xff0c;PCIe金手指接口的可靠性直接决定了扩展卡的识别成功率和数据传输稳定性。许多工程师在完成原理图设计和PCB布局后&#xff0c;常会遇到设备频繁识别失败、链路训练不通过…...

手把手教你部署DeepSeek-OCR:零基础实现多语言文字识别

手把手教你部署DeepSeek-OCR&#xff1a;零基础实现多语言文字识别 1. 为什么选择DeepSeek-OCR 在数字化时代&#xff0c;文字识别技术已经成为各行各业的基础需求。无论是扫描文档转电子版&#xff0c;还是从照片中提取文字信息&#xff0c;传统OCR工具往往在复杂场景下表现…...

Qwen3.5-9B惊艳案例:128K上下文下跨页PDF内容精准摘要

Qwen3.5-9B惊艳案例&#xff1a;128K上下文下跨页PDF内容精准摘要 1. 模型核心能力展示 Qwen3.5-9B作为一款90亿参数的开源大语言模型&#xff0c;在多个领域展现出令人印象深刻的能力。我们特别测试了其在处理长文档时的表现&#xff0c;结果令人惊喜。 1.1 长上下文处理能…...