自学笔记6

1月17日

代码部分

我们先要明确下思路,我们现在想要做的是想要将小车的底盘利用遥控器控制驱动,所以我们要完成的部分是:

  1. 遥控器数据的接收
  2. 遥控器数据的处理
  3. 电机数据的接收
  4. 电机数据的处理(pid,而且只用速度环)
  5. 电机速度的发送(遥控器和电机速度的关系和遥控器和运动方向的关系)
  6. 利用的灯显示系统状态

然后接下来我先说下我的代码习惯
1.每一个功能分开写在不同的.c文件中,而且每个.c文件中都会用一个.h文件,主要用于函数的接口和相对应的结构体定义
2.结构体类型的变量会是_S_的形式,枚举类型变量将会是_e_
3.尽量使用嵌套结构体,除非实在是太麻烦的东西就不用,尤其我会用一个超级结构体把所有变量涵盖起来
4.里面我会经常使用#ifdef来选择性编译,方便所有东西的调试,
5.其中还会有一个GOD函数,来对所有参数的调试,方便操作

然后就是具体的代码部分了,我先将整体的结构体表示出来(这里只表示底盘相关的,而云台,舵机之类的将会在以后补充)
所有涉及战队机密代码的部分我会省略

/*
    ------------------------------------------------------------------------
  | 文件名     :robot.h
  | 文件描述   :本文件用于RM战车的结构体和robot.c的函数接口
  | 作者       : pinocchio
  | 创建时间   :1.18
   ------------------------------------------------------------------------
	修改日期 :1.20
	修改人   :pinocchio
   ------------------------------------------------------------------------
  **************************************************************************
	* 1. 本代码基于STM32F427IIH(2018RM开发板A型)开发,编译环境为keil,基于freetos操作系统
	* 2. 本代码只适用于Robomaster 2019步兵机器人,不建议用于其他用途
	* 3.本代码最终解释权归哈尔滨工业大学(深圳)南工晓鹰所有 
	* 4.请勿转载!!!!!!!!!!!
	* 
	* Copyright (c) 2019哈尔滨工业大学(深圳)南工晓鹰战队 版权所有
	**************************************************************************

*/
#ifndef ROBOT_H_
#define ROBOT_H_

typedef struct
{
  struct
  {
    struct
	{
	  int ch0;
	  int ch1;
	  int ch2;
	  int ch3;
	  int s1;
	  int s2;
	}Rc;
	
	struct
	{
	  int x;
	  int y;
	  int z;
	  int press_l;
	  int press_r;
	  int key;
	}Mouse;
	
	enum
	{
	 Auto,
	 Manual
	  
	}Shoot_Mode;
	
	enum
	{
	  RC_Stop,
	  RC_Remote,
	  RC_MouseKey,
	}Robot_Mode;
	
  }Remote;
  
  
  struct CHASSIS_t
  {
		struct
		{
			float KP;
			float KI;
			float KD;
			short Fd_Speed;
			int Ref_Speed;
			int output;
			int OutputMAX;
			int error[3];
		}Speed_Pid;
		
		
  }Chassis_A,Chassis_B,Chassis_C,Chassis_D;
  
}ROBOT;


extern ROBOT Robot1;

void INIT_ROBOT(void);

#endif 


然后此时我们写一个初始化函数将所有数据初始化

/*
    ------------------------------------------------------------------------
  | 文件名     :robot.h
  | 文件描述   :本文件用于战车所有数据的初始化函数,以及后续调试(当还有其他功能是会补充)
  | 作者       : pinocchio
  | 创建时间   :1.18
   ------------------------------------------------------------------------
	修改日期 :未修改
	修改人   :无
   ------------------------------------------------------------------------
  **************************************************************************
	* 1. 本代码基于STM32F427IIH(2018RM开发板A型)开发,编译环境为keil,基于freetos操作系统
	* 2. 本代码只适用于Robomaster 2019步兵机器人,不建议用于其他用途
	* 3.本代码最终解释权归哈尔滨工业大学(深圳)南工晓鹰所有 
	* 4.请勿转载!!!!!!!!!!!
	* 
	* Copyright (c) 2019哈尔滨工业大学(深圳)南工晓鹰战队 版权所有
	**************************************************************************

*/

#include "robot.h"

ROBOT Robot1;
void INIT_ROBOT()
{

	Robot1.Chassis_A.Speed_Pid.error[0] =0;
	Robot1.Chassis_A.Speed_Pid.error[1] =0;
	Robot1.Chassis_A.Speed_Pid.Fd_Speed  =  0;
	Robot1.Chassis_A.Speed_Pid.KD=  0;
	Robot1.Chassis_A.Speed_Pid.KI=  0;
	Robot1.Chassis_A.Speed_Pid.KP=  0;
	Robot1.Chassis_A.Speed_Pid.output=  0;
	Robot1.Chassis_A.Speed_Pid.OutputMAX=  0;
	Robot1.Chassis_A.Speed_Pid.Ref_Speed=  0;
	
	Robot1.Chassis_B.Speed_Pid.error[0] =0;
	Robot1.Chassis_B.Speed_Pid.error[1] =0;
	Robot1.Chassis_B.Speed_Pid.Fd_Speed=  0;
	Robot1.Chassis_B.Speed_Pid.KD=  0;
	Robot1.Chassis_B.Speed_Pid.KI=  0;
	Robot1.Chassis_B.Speed_Pid.KP=  0;
	Robot1.Chassis_B.Speed_Pid.output=  0;
	Robot1.Chassis_B.Speed_Pid.OutputMAX=  0;
	Robot1.Chassis_B.Speed_Pid.Ref_Speed=  0;
	
	Robot1.Chassis_C.Speed_Pid.error[0] =0;
	Robot1.Chassis_C.Speed_Pid.error[1] =0;
	Robot1.Chassis_C.Speed_Pid.Fd_Speed=  0;
	Robot1.Chassis_C.Speed_Pid.KD=  0;
	Robot1.Chassis_C.Speed_Pid.KI=  0;
	Robot1.Chassis_C.Speed_Pid.KP=  0;
	Robot1.Chassis_C.Speed_Pid.output=  0;
	Robot1.Chassis_C.Speed_Pid.OutputMAX=  0;
	Robot1.Chassis_C.Speed_Pid.Ref_Speed=  0;
	
	Robot1.Chassis_D.Speed_Pid.error[0] =0;
	Robot1.Chassis_D.Speed_Pid.error[1] =0;
	Robot1.Chassis_D.Speed_Pid.Fd_Speed=  0;
	Robot1.Chassis_D.Speed_Pid.KD=  0;
	Robot1.Chassis_D.Speed_Pid.KI=  0;
	Robot1.Chassis_D.Speed_Pid.KP=  0;
	Robot1.Chassis_D.Speed_Pid.output=  0;
	Robot1.Chassis_D.Speed_Pid.OutputMAX=  0;
	Robot1.Chassis_D.Speed_Pid.Ref_Speed=  0;
	
	Robot1.Remote.Mouse.key=  0;
	Robot1.Remote.Mouse.press_l=  0;
	Robot1.Remote.Mouse.press_r=  0;
	Robot1.Remote.Mouse.x=  0;
	Robot1.Remote.Mouse.y=  0;
	Robot1.Remote.Mouse.z=  0;
	
	Robot1.Remote.Rc.ch0=  0;
	Robot1.Remote.Rc.ch1=  0;
	Robot1.Remote.Rc.ch2=  0;
	Robot1.Remote.Rc.ch3=  0;
	Robot1.Remote.Rc.s1=  0;
	Robot1.Remote.Rc.s2=  0;
	
	Robot1.Remote.Robot_Mode=  RC_Stop ;
	Robot1.Remote.Shoot_Mode=  Manual ;
	
}

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值