麦克纳姆轮小车控制平台之QT上位机开发之路

   

 

  我的上位机布局是这样的

目前只完成了串口通信和图像处理,两个界面可以来回切换,其他界面有待开发,图像处理部分可以接收4路摄像头图像,鼠标在窗口点选出感兴趣的矩形框区域,然后上位机进行跟踪目标,同时发送目标坐标数据给小车进行控制。这个图像处理功能我和之前的毕设有些相似。串口通信可以收发字符和16进制,可以正常和单片机进行串口通信,很多网上的QT串口通信代码是不能进行正确的16进制数据收发的,我的上位机串口收发16进制部分亲测可用。

再来说一下麦克纳姆轮小车

https://www.bilibili.com/video/av33712472/

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 13
    评论
本课程详细、全面地介绍了 Qt 开发中的各个技术细节,并且额外赠送在嵌入式端编写Qt程序的技巧。整个课程涵盖知识点非常多,知识模块囊括 Qt-Core 组件、QWidgets、多媒体、网络、绘图、数据库,超过200个 C++ 类的分析和使用,学完之后将拥有 Qt 图形界面开发的非常坚实的功底。 每个知识点不仅仅会通过视频讲解清楚,并且会配以精心安排的实验和作业,用来保证学习过程中切实掌握核心技术和概念,通过实验来巩固,通过实验来检验,实验与作业的目的是发现问题,发现技术盲点,通过答疑和沟通夯实技术技能。注意:本套视频教程来源于线下的实体班级,因此视频中有少量场景对话和学生问答,对此比较介意的亲们谨慎购买。注意:本套视频教程包含大量课堂源码,包含对应每个知识点的精心编排的作业。由于CSDN官方规定在课程介绍中不能出现作者的联系方式,因此在这里无法直接给出QQ答疑号,视频中的源码、资料和作业文档链接统一在购买后从CSDN平台跟我沟通,我会及时回复跟进。注意:本套视频教程包含全套10套作业题,覆盖所有视频知识点,循序渐进,各个击破,作业总纲如下:下面是部分作业题目展示,每道题都有知识点说明,是检验学习效果的一大利器:(部分作业展示,为了防止盗图盗题对题干做了模糊处理)(部分作业展示,为了防止盗图盗题对题干做了模糊处理)(部分作业展示,为了防止盗图盗题对题干做了模糊处理)(部分作业展示,为了防止盗图盗题对题干做了模糊处理)(部分作业展示,为了防止盗图盗题对题干做了模糊处理)…… ……
以下是一个简单的麦克纳姆轮小车的 PID 控制程序,使用 STM32 微控制器实现: ```c #include "stm32f10x.h" #include "math.h" // 定义 PID 控制器参数 #define KP 0.1 #define KI 0.01 #define KD 0.05 // 定义麦克纳姆轮小车的参数 #define L 0.2 // 小车轴距 #define R 0.05 // 小车轮半径 // 定义电机的最大转速和最小转速 #define MAX_SPEED 1000 #define MIN_SPEED -1000 // 定义电机的输出 int motor1, motor2, motor3, motor4; // 定义 PID 控制器的变量 float error, last_error, sum_error, derivative, output; // 定义小车控制参数 float vel_x, vel_y, vel_w; // PID 控制器函数 void pid_controller(float target, float current) { error = target - current; sum_error += error; derivative = error - last_error; output = KP * error + KI * sum_error + KD * derivative; last_error = error; } // 计算电机的输出 void calculate_motor_output() { motor1 = round(vel_x - vel_y - L * vel_w); motor2 = round(vel_x + vel_y + L * vel_w); motor3 = round(vel_x + vel_y - L * vel_w); motor4 = round(vel_x - vel_y + L * vel_w); // 限制电机的输出在最大转速和最小转速之间 if (motor1 > MAX_SPEED) motor1 = MAX_SPEED; if (motor1 < MIN_SPEED) motor1 = MIN_SPEED; if (motor2 > MAX_SPEED) motor2 = MAX_SPEED; if (motor2 < MIN_SPEED) motor2 = MIN_SPEED; if (motor3 > MAX_SPEED) motor3 = MAX_SPEED; if (motor3 < MIN_SPEED) motor3 = MIN_SPEED; if (motor4 > MAX_SPEED) motor4 = MAX_SPEED; if (motor4 < MIN_SPEED) motor4 = MIN_SPEED; } int main(void) { // 初始化 PWM 输出 // ... while (1) { // 读取小车的运动参数 // ... // 计算 PID 控制器的输出 pid_controller(0, vel_x); motor1 += output; motor3 += output; pid_controller(0, vel_y); motor1 += output; motor2 += output; pid_controller(0, vel_w); motor1 += output; motor2 -= output; motor3 -= output; motor4 += output; // 计算电机的输出 calculate_motor_output(); // 输出 PWM 信号到电机 // ... } } ``` 需要注意的是,这只是一个简单的示例程序,实际上在实现麦克纳姆轮小车的 PID 控制时,需要考虑更多的细节问题,例如电机的响应速度、控制参数的调整等等。同时,由于不同的麦克纳姆轮小车的设计参数可能不同,因此需要根据实际情况进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值