首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

机甲大师机器人控制(三):软件架构设计

  • 23-09-22 01:03
  • 2316
  • 8334
blog.csdn.net

本文是机甲大师机器人控制的系列博客之一。在功能分析的基础上,本文设计软件的架构以及定义输入输出接口。

系列博客:
机甲大师机器人控制(一):概念与流程
机甲大师机器人控制(二):功能分析
机甲大师机器人控制(三):软件架构设计
机甲大师机器人控制(四):软件单元
机甲大师机器人控制(五):软件单元测试
机甲大师机器人控制(六):集成测试
机甲大师机器人控制(七):购买清单

文章目录

  • 1 开发阶段
  • 2 软件架构设计
    • 2.1 顶层子系统
      • 2.1.1 子系统模型
      • 2.1.2 输入接口
    • 2.2 电机控制子系统
      • 2.2.1 子系统模型
      • 2.2.2 输入接口
      • 2.2.3 输出接口
    • 2.3 舵机控制子系统
      • 2.3.1 子系统模型
      • 2.3.2 输入接口
      • 2.3.3 输出接口
    • 2.4 水弹枪控制子系统
      • 2.4.1 子系统模型
      • 2.4.2 输入接口
      • 2.4.3 输出接口
  • 3 数据字典定义
  • 4 总结

1 开发阶段

软件架构设计阶段在功能分析阶段之后,会按照功能分析中的每一条来设计架构和输入输出接口。软件架构设计阶段会在Simulink模型中搭建输入输出端口和子系统,但是还不会开始设计最内层子系统中的控制逻辑。
在这里插入图片描述

2 软件架构设计

在软件架构设计这个阶段,博主主要做了两件事。首先,根据功能分析阶段提出的4个功能划分模型的子系统和内层子系统;然后,根据子系统功能来确定输入输出接口。Simulink模型文件命名为MTSR_MotionSolve.slx,含义为运动解算,简写为MTSR。

2.1 顶层子系统

2.1.1 子系统模型

在模型最顶层是一个使能子系统,对应功能分析阶段的第1条功能:按键锁定。使能信号为1的时候,子系统被激活;使能信号为0的时候,子系统不被激活,也就达到了锁定按键的效果。如图所示。子系统名为MTSR。
在这里插入图片描述

2.1.2 输入接口

虽然顶层的子系统连接了所有输入输出信号,但是从功能分类的角度来说,Mode按键对应的信号以外的其他信号都是和内层子系统相关的,所以本小节只研究使能信号输入接口VeINPR_uint8_PS2MODE。

序号信号名数据类型范围存储类型
1VeINPR_uint8_PS2MODEuint8[0,1]ImportFromFile

这里对几个属性做一些简单的解释:

  • 信号名:对应的就是在代码中的变量名。这里的命名规范是博主从一个MBD的公众号上看到一名通用的工程师使用的。VeINPR代表它是输入信号,uint8表示了它的数据类型,PS2MODE是它的物理含义,也就是对应着Mode按键;
  • 数据类型:Simulink中的常用类型;
  • 范围:这里指的不是数据类型所对应的范围,而是底层所允许的范围;
  • 存储类型:也就是Simulink中的StorageClass,可以看看博主以前的博客介绍;

VeINPR_uint8_PS2MODE这个信号只有0和1两个取值,当按一下手柄的Mode键的时候,就从0跳转到1或者1跳转到0,同时绿色指示灯也会亮起(1)或者熄灭(0)。ImportFromFile的存储类型表示了这个信号是外部引入的,因为这个变量依赖于STM32工程中的其他文件,把PS2的传输协议解析出来,然后提供接口给模型。

双击进入顶层子系统后,可以看到第二层中又包含了三个子系统,分别是电机控制子系统、舵机控制子系统和水弹枪控制子系统。

2.2 电机控制子系统

2.2.1 子系统模型

电机控制子系统对应功能分析中的第2条:底盘平面运动。该子系统根据4路摇杆通道的输入,控制4个直流电机的转速和转向,从而带动麦轮转动,实现底盘平面运动的功能。子系统名为Motor_Ctrl。
在这里插入图片描述

2.2.2 输入接口

电机控制子系统的输入接口是摇杆的4个通道:左摇杆的X通道、左摇杆的Y通道、右摇杆的X通道、右摇杆的Y通道,分别简写为LX,LY,RX,RY。其属性如下表:

序号信号名数据类型范围存储类型
1VeINPR_uint8_PS2LXuint8[0~255]ImportFromFile
2VeINPR_uint8_PS2LYuint8[0~255]ImportFromFile
3VeINPR_uint8_PS2RXuint8[0~255]ImportFromFile
4VeINPR_uint8_PS2RYuint8[0~255]ImportFromFile

这4路输入信号和Mode按键的信号一样,都是由STM32中其他的文件解析手柄的通信协议后所输出给模型的,所以也都是ImportFromFile。

4路通道的数据范围都是0~255的整数。0对应着X通道的最左或者Y通道的最上,255对应着X通道的最右或者Y通道的最下,如图所示。
在这里插入图片描述

2.2.3 输出接口

研究输出接口之前,首先先研究一下电机接口函数。电机接口函数是STM32驱动板的配套程序中给出的,如下表所示。

序号函数名含义参数类型参数范围
1MotA_Interface(PWM)电机A调速接口int32[-1000~1000]
2MotB_Interface(PWM)电机B调速接口int32[-1000~1000]
3MotC_Interface(PWM)电机C调速接口int32[-1000~1000]
4MotD_Interface(PWM)电机D调速接口int32[-1000~1000]

电机接口函数内部封装了控制电机的PWM波控制,调用函数只需要传入一个-1000~1000的整型数即可控制直流电机的正反转和转速。绝对值为1000时,电机两端电压等于电源电压。打个比方,如果电机由两节18650电池驱动,那么电池端电压就是7.4V。MotA_Interface(1000)函数就代表给电机加上正向电压7.4V,轮子就会以7.4V所对应的转速正转。

模型的输出接口正是电机接口函数中传入的参数,因此可以很好的将下表和上表对照。

序号信号名数据类型范围存储类型
1VeOUTR_int32_FLWheelint32[-1000~1000]ExportedGlobal
2VeOUTR_int32_FRWheelint32[-1000~1000]ExportedGlobal
3VeOUTR_int32_BLWheelint32[-1000~1000]ExportedGlobal
4VeOUTR_int32_BRWheelint32[-1000~1000]ExportedGlobal

以VeOUTR_int32_FLWheel为例,FLWheel代表左前轮(Front-Left),这里的范围-1000~1000只是为了方便调用的一个虚拟值,不代表电压或者转速这样的实际物理含义,也不是真正的PWM波的数值。ExportedGlobal表示这个信号在生成代码对应的变量是在模型对应的源文件定义的,输出给其他文件使用。

在执行完模型的step函数后,4个输出接口就会赋值成解算出来的数值。然后调用4个MotX_Interface(PWM)函数,将输出变量作为参数,就可以控制电机转速和方向。

2.3 舵机控制子系统

2.3.1 子系统模型

电机控制子系统对应功能分析中的第3条:舵机云台二自由度运动。该子系统根据手柄右手的4个按键的输入,控制双舵机的正反转。子系统名为Servo_Ctrl。
在这里插入图片描述

2.3.2 输入接口

舵机控制子系统的输入接口是右手4个按钮对应的信号:右手左按键、右手右按键、右手上按键、右手下按键,分别简写为RL,RR,RU,RD。其属性如下表:

序号信号名数据类型范围存储类型
1VeINPR_uint8_PS2RLuint8[0,1]ImportFromFile
2VeINPR_uint8_PS2RRuint8[0,1]ImportFromFile
3VeINPR_uint8_PS2RUuint8[0,1]ImportFromFile
4VeINPR_uint8_PS2RDuint8[0,1]ImportFromFile

这四个按键的属性和摇杆的四个通道类似,只是范围只有0和1。按下按键的时候,信号值是1,松开的时候,信号值是0。
在这里插入图片描述
按下RL或RR时,0号舵机左右转动;按下RU或RD时,1号舵机上下转动。

2.3.3 输出接口

研究舵机控制子系统输出接口之前,首先先研究一下舵机的接口函数。舵机接口函数也是STM32驱动板的配套程序中给出的,如下表所示。

序号函数名含义参数1类型参数1范围参数2类型参数2范围
1SSenvo(Num,PWM)舵机接口uint8[0,1,2,3]uint16[500~2500]

舵机控制原理很简单,给舵机输入一个周期为20MS 的PWM波,其中脉冲宽度从0.5到2.5ms,舵机对应的位置为0度到180度。表中的第一个参数是舵机编号,从0到3;第二个参数是舵机的PWM控制参数,从500到2500,也就是us为单位的脉宽。

模型的输出接口就是舵机控制函数的第二个参数,对照表格如下:

序号信号名数据类型范围存储类型
1VeOUTR_uint16_Srv0PWMuint16[500~2500]ExportedGlobal
2VeOUTR_uint16_Srv1PWMuint16[500~2500]ExportedGlobal

在执行完模型的step函数后,2个舵机输出接口就会赋值成解算出来的数值。然后调用2次SSenvo(Num,PWM)函数,将输出变量作为第二个参数,就可以控制舵机在这个周期内的目标位置。

2.4 水弹枪控制子系统

2.4.1 子系统模型

水弹枪控制子系统对应功能分析中的第4条: 发射器控制。该子系统根据手柄右手顶部的R1按键的输入,控制继电器的断开和闭合。子系统名为Gun_Ctrl。
在这里插入图片描述

2.4.2 输入接口

水弹枪控制子系统的输入接口是右手顶部的按键,简写为R1。这里的名称直接沿用了按键上面刻的字样。其属性如下表:

序号信号名数据类型范围存储类型
1VeINPR_uint8_PS2R1uint8[0,1]ImportFromFile

这里的按键采用了右手顶部的第一个按键R1,当按下按键的时候,VeINPR_uint8_PS2R1为1,松开的时候,VeINPR_uint8_PS2R1为0。
在这里插入图片描述

2.4.3 输出接口

在STM32中,可以配置引脚的GPIO寄存器,来实现该引脚输出高电平或者低电平。这里博主偷了个懒,没有在底层做这样的配置,而是直接沿用了舵机接口函数SSenvo(Num,PWM),来控制引脚输出高低电平给继电器(3.3v或0v)。

上一小节提到了,舵机接口函数的第二个参数PWM的范围是500~2500。事实上,如果对舵机控制和PWM输出比较了解的话,可以将这个参数设为接近20000的数,然后舵机引脚就会输出接近3.3v的高电平。具体原因博主就不再展开说,有兴趣可以自己做做舵机实验。

根据上面的思路,就可以定义模型的输出接口:

序号信号名数据类型范围存储类型
1VeOUTR_uint16_Srv2PWMuint16[500,19500]ExportedGlobal

从命名上看,还是把接口做成2号舵机的名称。但是,取值范围是500和19500两个整数。取值为500的时候,引脚输出0.1v左右的低电平,继电器保持断开;取值为19500时,引脚输出3.2v左右的高电平,继电器闭合。也就是说,继电器处于常断开的状态,按下R1按键的时候,继电器闭合,水弹枪开始连续发射。

3 数据字典定义

在第二章中,根据架构划分,建立好了各个子系统和输入输出端口。根据其中对输入输出的属性描述,可以在这个阶段顺便建立一下输入输出接口的数据字典。关于数据字典的建立方法,可以参考博主以前的博客《Simulink代码生成:数据字典的建立、关联模型》。
数据字典中如图所示,主要是需要定义名称、类型和存储类型(StorageClass)。对于范围(最大最小值)只是一个概念性的,不需要在数据字典中定义。
在这里插入图片描述

4 总结

本文是MBD开发机甲大师控制策略的第三篇,主要设计了模型的架构以及定义了接口相关的属性。下一步会在每个子系统中建立具体的控制策略,也就是软件单元设计阶段。

>>返回个人博客总目录

注:本文转载自blog.csdn.net的chhttty的文章"https://blog.csdn.net/u013288925/article/details/109166052"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

101
推荐
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2024 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top