智能小车——初步想法

news2024/9/16 9:26:23

需要参考轮趣的智能小车自己搭建一台智能机器人,这里从底层控制开始逐步搭建。

控制模式

之后要自行搭建智能小车,所以将轮趣的底盘代码进行学习,根据开发手册先大致过一遍需要的内容。

有做很多个控制方法,包括了手柄、串口、CAN、ROS等,如下所示:
控制模式总结
如上图所示,对于项目而宫,重要的是PS2控制(即迎控器控制),以及CAN控制(需要用到CAN通讯),串口控制(上位机算法的通讯),其余的关注一下就可以了。

速度单位

全部控制程序全部换算成国际单位制m/s,所以要将缉码器的原始数据转换为m/s。

这里涉及的就是轮子半径、编码器数据、控制频率、编码器精度,通过这几个数据最终完成小车速度的换算。公式如下所示:
运动速度转换关系式

串口控制

就是ROS与STM32的通讯,通过串口3来完成通讯。

这里需要自定义一个数据帧,通过这个数据帧来完成电机控制状态的传输通讯。这里发送的数据包括:机器人使能;机器人三轴速度;IMU三轴加速度、角速度;电池电压。还要加上串口通讯可以用作检验的帧头帧尾和校验位。

同时,串口发送一次只能发送8位,而目前数据为24位,所以数据需要拆成高8位和低8位来传输。这里就相当于自定义了一套encoder和decoder的密码模式

这里可以借鉴他的编码方式:帧头固定0x7B,帧尾固定0x7D,用一位fag_stop表示是否使能,数据校验通过BCC校验(所有数据为异或)
具体的编码方式,也就是串口一次所传输的数据是可以自定义的,这里就不展开了,在自己做项目的时候可能还要修改一下。

APP调参

可以通过蓝牙/WIFI来完成控制,实质也是自定义数据,然后通过串口2来完成数据传输。

PS2控制

这里因为是专门的控制手柄,有自己做好的底层信号处理,对于应用层开发者而言,需要做的就是解析传输过来的信号,并完成对应的控制状态选择就可以了。

CAN控制

数据传输直接通过CAN总线来完成,需要先配置好CAN,然后自定义数据来完成传输,总体逻辑是类似的,只不过只需要关心具体的传输数据了,因为CAN是自带数据校验等的(CAN数据中自己就有校验等等的位)。

OLED显示

通过IIC总线来完成内容显示。只需要通过OLED的通讯协议,来完成画点就可以了。

陀螺仪零点漂移消除

IMU的数据存在零点漂移,需要设计一定的算法来完成滤波。

设置一定的延时,在刚上电的时候并不读取角速度值,直到超过了这个时间,才会去读取角速度值并将其作为漂移值。

运动学解算

这个就是两轮差速小车、麦轮小车等的运动学模型,将电机与机器人的运动联系起来。

这里之后的项目是需要四驱车模型,这里就记录一下四驱车的运动模型。

四驱车模型
其中VA、VB、VC、VD分别为 A、B、C、D四个轮子的转速,也就是电机的转速;Vx为小车沿着X轴平移速度,w为小车沿Z轴的旋转速度;a=D/2为小车轮距D的一半,b=H/2为小车轴距H的一半。

最终就可解算出如下的运动学公式,将机器人运动转化为电机旋转:
运动学公式

PID控制

这里直接就是一个速度闭环控制,只用PI就差不多了,增量式或者位置式PI都可以。

整体程序结构图

整体流程

现根据运动学模型来选择具体的计算公式,然后完成一系列外设的初始化,最后接到RTOS的任务接口,开始循环执行对应的任务。

对于遥控命令,都是通过串口/CAN的中断来获取。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1919572.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

选择TPM管理咨询公司时需要考虑哪些因素?

在选择TPM(全面生产维护)管理咨询公司时,企业通常需要经过深思熟虑的过程,以确保所选择的咨询公司能够真正帮助企业实现生产效率和设备可靠性的提升。以下是在选择TPM管理咨询公司时需要考虑的关键因素: 一、行业经验和…

【Linux】Windows平台使用gdb调试FFmpeg源码

FFmpeg是一个跨平台的多媒体库,有时需要在别的平台上进行开发和调试,记录一下在linux环境下使用gdb来调试FFmpeg源码的基本方式 1.可执行文件 在windows平台使用linux环境来调试FFmpeg源码,需要编译生成一个后缀有_g的exe文件,参…

国漫推荐10

玄幻、恋爱 1.《两不疑》古风、恋爱 2.《中国古诗词动漫》 3.《武神主宰》 4.《百妖谱》 5.《灵剑尊》 6.《万界仙踪》 7.《万界神主》 8.《武庚纪》 9.《无上神帝》

Python实战:拥有设闹钟功能的可视化动态闹钟的实现

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

14 - matlab m_map地学绘图工具基础函数 - 一些数据转换函数(一)

14 - matlab m_map地学绘图工具基础函数 - 一些数据转换函数(一) 0. 引言1. 关于m_ll2xy和m_xy2ll2. 关于m_lldist3. 关于m_xydist4 关于m_fdist5 关于m_idist6. 总结 0. 引言 通过前面篇节已经将m_map绘图工具中大多绘图有关的函数进行过介绍&#xff0…

后仿真中《SDF反标必懂连载篇》之 反向提取SDF反标延迟

今天,整理一下最近工作中遇到的一个问题,及解决问题的办法,仅分享给大家。 我们知道,我们在完成SDF时序反标之后,首先要做的事情:检查sdfannotation 文件。文件中记录了每个sdf 文件,每个实例的…

【C语言】C语言-宾馆客房管理系统(源码+论文)【独一无二】

👉博__主👈:米码收割机 👉技__能👈:C/Python语言 👉公众号👈:测试开发自动化【获取源码商业合作】 👉荣__誉👈:阿里云博客专家博主、5…

20240711编译友善之臂的NanoPC-T6开发板的Buildroot

20240711编译友善之臂的NanoPC-T6开发板的Buildroot 2024/7/11 21:02 百度:nanopc t6 wiki https://wiki.friendlyelec.com/wiki/index.php/NanoPC-T6/zh NanoPC-T6/zh 4.4 安装系统 4.4.1 下载固件 4.4.1.1 官方固件 访问此处的下载地址下载固件文件 (位于网盘的&q…

可道云teamOS,用个人标签和公共标签,文件分类更多样

在信息爆炸的时代,我们每天都在与海量的数据和信息打交道。如何在这些纷繁复杂的信息中快速找到我们需要的,成为了摆在我们面前的一大难题。 为大家介绍一下可道云teamOS个人标签和公共标签功能,让信息的整理与搜索变得简单高效。 一、个人…

YOLOv10训练自己的数据集(交通标志检测)

YOLOv10训练自己的数据集(交通标志检测) 前言相关介绍前提条件实验环境安装环境项目地址LinuxWindows 使用YOLOv10训练自己的数据集进行交通标志检测准备数据进行训练进行预测进行验证 参考文献 前言 由于本人水平有限,难免出现错漏&#xff…

【益起童行】我与孩子一起挺过的日子

今天不谈技术,只想讲讲我的故事,但并不是想寻求同情,目前过得很幸福,但并不是所有人的情况都是这么乐观! 我就只是想呼吁大家能和我【‘益’起‘童’行】,帮助更多家庭的点亮希望之光。而我也一定也会坚持尽…

LangChain框架详解

LangChain框架详解 LangChain是一个基于语言模型开发应用程序的强大框架,旨在帮助开发人员简化与大模型交互、数据检索以及将不同功能模块串联起来以完成复杂任务的过程。它提供了一套丰富的工具、组件和接口,使开发人员能够轻松构建上下文感知和具备逻…

Fast DDS library windows 下源码编译(cmake)

目录 编译环境: 编译需要的源码文件: Fast DDS编译: 注意事项: 参考文档: 基于Fast DDS 的源码来编译相关的库,然后可以通过python 来调用库文件实现dds 数据通信,本文就详细的介绍编译过程…

评估指标:精确率(Precision)、召回率(Recall)、F1分数(F1 Score)

评估指标:精确率(Precision)、召回率(Recall)、F1分数(F1 Score) 前言相关介绍1. 准确率(Accuracy)2. 精确率(Precision)3. 召回率(Re…

react学习——26react-redux实现求和案例(完整版)

1、目录结构 2、components/count/index.js import React, {Component} from "react"; export default class Count extends Component {//加法increment()>{const {value} this.selectNumthis.props.jia(Number(value))}//减法decrement()>{const {value} …

发行自己的ERC20代币

发行自己的代币 步骤1 从https://etherscan.io/tokens 查找一个代币 步骤2 复制其合约代码 步骤3 在remix中编译合约代码 步骤4 部署合约(需要提前安装Metamask, 并获取一些测试币), 这里Rinkeby测试为例 可以在 https://faucet.rinkeby.io/ 获取 Rinkeby的测试币 其中的…

关于delete和delete[ ]混用的未定义问题解释

我们知道delete用于释放一个动态空间,而delete[ ]用于释放多个动态空间,但是如果我们混用的话会导致什么问题?我在博客上看了许多文章,但不尽人意,因此写下这篇文章让你知其然知其所以然(浅薄的解释&#x…

招采全流程电子化优势及重要功能环节(数智化招采系统)

招投标全流程电子化,是加速招标采购领域数字化转型、创新招标采购交易机制的重要举措。它在构建高效规范、公平竞争、充分开放的大市场环境中起着至关重要的作用。 招采电子化历史沿革 2013年2月,国家发展改革委等八部门发布了《电子招标投标办法》&am…

基于React 实现井字棋

一、简介 这篇文章会基于React 实现井字棋小游戏功能。 二、效果演示 三、技术实现 import {useEffect, useState} from "react";export default (props) > {return <Board/> }const Board () > {let initialState [[, , ], [, , ], [, , ]];const [s…

Linux C embed development (personal rveiew)

1. 如何快速去bring up bcm 的wifi chipset a. 首先的确认 编译的BSP profile b. 其次要先用 default 的kernel config 去编译 c. 现在我们的一些 PCIE/GPIO/driver 总线的设置 都在dts 中&#xff0c;有错就去改dts 2. BCM 的板子bring up 注意事项 a. fw: bcm…