From c740e5db200813cf951b985eb3fe6f77ac380327 Mon Sep 17 00:00:00 2001 From: LSMushui Date: Thu, 9 Apr 2026 15:45:03 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E4=B8=80=E4=BA=9B=E5=BC=80?= =?UTF-8?q?=E5=8F=91=E6=96=87=E6=A1=A3=EF=BC=8C=E6=96=B9=E4=BE=BF=E7=BB=9F?= =?UTF-8?q?=E4=B8=80=E5=BC=80=E5=8F=91=E7=8E=AF=E5=A2=83=E4=B8=8E=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- doc/API.md | 4 ++ doc/LOG.md | 4 ++ doc/TODO.md | 3 + doc/appendix.md | 71 ++++++++++++++++++++++++ doc/framework.md | 46 +++++++++++++++ doc/pic/Cortex_M4.png | Bin 0 -> 17422 bytes doc/pic/magic_bar.png | Bin 0 -> 3275 bytes doc/pic/magic_bar_Utilities.png | Bin 0 -> 11018 bytes doc/pic/magic_bar_Utilities_setting.png | Bin 0 -> 35119 bytes doc/questions.md | 3 + doc/reference.md | 6 ++ doc/代码编写指南.md | 3 + doc/注意事项.md | 15 +++++ doc/碎碎念.md | 16 ++++++ doc/组合使用文档/全向轮步兵.md | 60 ++++++++++++++++++++ 15 files changed, 231 insertions(+) create mode 100644 doc/API.md create mode 100644 doc/LOG.md create mode 100644 doc/TODO.md create mode 100644 doc/appendix.md create mode 100644 doc/framework.md create mode 100644 doc/pic/Cortex_M4.png create mode 100644 doc/pic/magic_bar.png create mode 100644 doc/pic/magic_bar_Utilities.png create mode 100644 doc/pic/magic_bar_Utilities_setting.png create mode 100644 doc/questions.md create mode 100644 doc/reference.md create mode 100644 doc/代码编写指南.md create mode 100644 doc/注意事项.md create mode 100644 doc/碎碎念.md create mode 100644 doc/组合使用文档/全向轮步兵.md diff --git a/doc/API.md b/doc/API.md new file mode 100644 index 0000000..a3be08d --- /dev/null +++ b/doc/API.md @@ -0,0 +1,4 @@ +# 接口标准 + +version: v0.0.0 +> TODO \ No newline at end of file diff --git a/doc/LOG.md b/doc/LOG.md new file mode 100644 index 0000000..20c4c6c --- /dev/null +++ b/doc/LOG.md @@ -0,0 +1,4 @@ +# 更新日志&想法记录 + +## 2026-4-8 +> 创建仓库,我们Simba也要有自己的电控框架了 \ No newline at end of file diff --git a/doc/TODO.md b/doc/TODO.md new file mode 100644 index 0000000..93fa590 --- /dev/null +++ b/doc/TODO.md @@ -0,0 +1,3 @@ +# TODO + +> 完成基本框架的开发以及补全文档 diff --git a/doc/appendix.md b/doc/appendix.md new file mode 100644 index 0000000..d0a3cfd --- /dev/null +++ b/doc/appendix.md @@ -0,0 +1,71 @@ +# 附录 + +- [附录](#附录) + - [1 代码编写](#1-代码编写) + - [1.1 编辑器与IDE的选择](#11-编辑器与ide的选择) + - [1.2 代码格式](#12-代码格式) + - [1.3 编辑代码](#13-编辑代码) + - [2 科学调参](#2-科学调参) + - [3 部分问题及解决方案](#3-部分问题及解决方案) + - [3.1 Cortex\_M4 报错](#31-cortex_m4-报错) + +## 1 代码编写 + +### 1.1 编辑器与IDE的选择 + +- **IDE : Keil5** +- **编辑器 : VSCode** + +为了方便大家进行环境配置,本项目使用Keil5所带的AC6工具链进行编译 + +- 关于keil5,经典IDE,环境配置极为方便,对STM系列芯片使用者极为友好 +- 关于VSCode,现代化代码编辑器(其实就是一高级版的文本编辑器),支持各种插件进行功能拓展,能极高的提高大家的工作效率 + +### 1.2 代码格式 + +本项目代码格式主要基于Google风格,具体的格式配置信息请参照 [.clang-format](../.clang-format) 文件 + +- **如何格式化你的代码:** 右键选择 `格式化代码` (默认快捷键 `Shift + Alt + F`) +- **如何在部分区域禁用格式化:** \ + 在区域开始的位置添加注释 + + ```C + // clang-format off + ``` + + 在区域结束的位置添加注释 + + ```C + // clang-format on + ``` + + 这样在格式化代码的时候就不会使用 [.clang-format](../.clang-format) 格式化这部分代码而保持原有风格了。 + + > **关于禁用格式化的作用:** 部分地方由于格式化之后变成奇怪格式效果,这时候可以禁用格式化来保持我们所需要的格式。 + +### 1.3 编辑代码 +> TODO + +## 2 科学调参 +> TODO + +## 3 部分问题及解决方案 + +### 3.1 Cortex_M4 报错 + +如在烧录代码时出现 Cortex_M4 的报错 + +![Cortex_M4](./pic/Cortex_M4.png) + +请在魔术棒中 + +![magic_bar](./pic/magic_bar.png) + +打开 `Utilities` 选项卡,点击 `Settings` 按钮 + +![magic_bar_Utilities](./pic/magic_bar_Utilities.png) + +勾选 `reset and run` 选项 + +![magic_bar](./pic/magic_bar_Utilities_setting.png) + diff --git a/doc/framework.md b/doc/framework.md new file mode 100644 index 0000000..ab9cf93 --- /dev/null +++ b/doc/framework.md @@ -0,0 +1,46 @@ +# 框架 +## 总体介绍 +### 机器人参数 +机器人的主要选项在 [robot_typedef](../application/robot_typedef.h) 中定义。 + +在[robot_param](../application/robot_param.h)中导入个性化定义的每个机器人具体的物理参数,包括但不限于控制中要用到的物理参数、PID参数等等。 + +通过这种做法达到机器人代码通用化的目的,只需替换不同机器人的 `robot_param.h` 文件即可实现不同车型的适配。 + +### 模块划分 +本框架主要划分为以下几个模块。 +- assist 辅助模块 +- chassis 底盘模块 +- gimbal 云台模块 +- IMU 陀螺仪模块 +- referee 裁判系统模块 +- robot_cmd 机器人控制模块 +- shoot 射击模块 +- other 其他乱七八糟的东西 + +### 模块控制 +不同的模块由其对应的控制任务进行控制,如底盘为chassis_task,云台为gimbal_task,射击为shoot_task ... + +#### * 层级结构 +每个模块都做成了三层的上中下结构,上层可以调用下层的数据和函数。防止了上下层之间循环调用造成的混乱局面。 +- **上层**:task任务层\ + 该层中提供freertos的任务函数接口,用来创建本模块的控制任务。同时创建各个任务执行函数的弱定义空函数,当无需用到此模块时使用。 +- **中层**:任务执行层\ + 该层为任务函数的实体部分,根据不同的硬件条件有不同的执行方式。需对每种硬件条件编写不同的执行代码以实现适配,并通过预编译的方式选择编译对应硬件的控制代码。 +- **下层**:任务根基层\ + 该层为整个模块的根基部分,定义了在不同硬件条件下都需要用到的类型、函数、变量等等。 + + + +#### * 步骤划分 +每个控制任务都可以分成以下几个步骤: +1. **发布数据 (xxxPublish)**:发布本模块的数据以供其他模块使用。 +2. **初始化 (xxxInit)**:在进入任务循环前先行对该任务所需要的各种参数进行初始化。 +3. **获取反馈 (xxxObserver)**:获取各种传感器的反馈数据,以便接下来进行控制处理。 +4. **异常处理 (xxxHandleException)**:在任务循环中遇到异常情况时如果有处理方法则进行异常处理(通常为电机失能等等),若无法处理且会造成危险的话则尝试进行报警。 +5. **模式设置 (xxxSetMode)** :设置对应模块的模式,在不同模式下模块会有不同的动作。 +6. **更新目标 (xxxReference)**:更新各个目标值,作为控制的目标结果。 +7. **计算控制量 (xxxConsole)**:计算出各个执行机构的控制量使得模块效果达到目标。 +8. **发送控制量 (xxxSendCmd)**:将控制量发送给执行机构来执行。 + +> 后续内容待完善 \ No newline at end of file diff --git a/doc/pic/Cortex_M4.png b/doc/pic/Cortex_M4.png new file mode 100644 index 0000000000000000000000000000000000000000..0b4e75cbeb07fbf0ea49a96c7426c9c6f58f90ce GIT binary patch literal 17422 zcmcJ%byQqU_bwQMySux4fZ*=h&{zoW?ry=M@dN^a1P|_Rp>YWA?(Xh7&HH}$_syDh z*ZebcSxBEl)!tRRcI|rV)U!{Nnu;tc5)sn7ckfW;<)qZ#y@M)-d|p9-gZ#ErluCyD zfpS%sm3UV^Lb4CJfUy);7Jv7yDjxaC7#4Dk=p?7>`tBWC*V_+NpJSofyLXbg@>1eJ zFN5P>usXnb;@;&u$HtcC{ZF>WEgqB}rbecop7b90Ouy*g@7e94CfC!YsMVjYVBdm~$pY054K1y3desaB@25LXGGQN@t@W-5 zud}tFgoz1tN?KZ42~c!2vpNtcm955rGoV*cE!k~==__+YdO{%%G?8}}kD|RU&SHv| zZ~fZYDM1Mf3yXskCXwCBd4GQ&XpQZ=rRg2@yN485P@TsVpTjg*RGn}Ky12Lq-P+kf z`uq3qn^>gn*uNtqFN*1N)Fu^?+q8K2w`#uzzGB7a+@Wq@VjIe_(4K>;tE&@!{D_K) zLCGs9K$cfj%>Ack8TAdkC!!~kXS9yN#yGww;NOakS&cutO*T9!z5{G*m`+x~@kvQI zH1zb;jEwUAe|&EtO2Z_)43O;$Eg|uKV{;P|A3tJlPKT0{lk=Z`0@DROPk>TObpL4u@-0dVz9%|99y!N! zkx<%(B#X$`jjs!h&eRa2s4?*1i41I17i-)%;$)(4Y54om^ax_Yh+{}8x07~Tp565q z$2C6v)V@7$5)(<=z@rAd{gVgQ6C)FADan|ZUzmr#fhOc9wDEXcsbq`**Fh>ceX>+23LcGJsL>U?@p<4*skJ02NdQ%8p&CpQ-mktwK&QGrf;>rY^g z`(^A7W*vq_K<0n7o|2NX(f`q-sqkX+%ILUPdOLos5yrSsI)@4(#s=vmYi-SFso5Rb z-AmUetdQjy1B;kF3FhnnbdZ5Tj-jy7^wj&ktb4EV#qR*C01w_B1N~rWqG%3}btQmj zFa<*JU855K76yibit4?)5^253WL;6JpE(y@v2y4VEPsqJA70n4GWP#8JsAuJtKDly zWbO@C$aMq`gcxc>8R|umw-)~`5?$POSCf@NJkJ5IcDG#7zBLnmNjxARKw^7U7CV_D zNnp^J`JsjBTyphM5n`4=$zKBQq3Y$BVn)TbpI%4He_2!_4KL_&iAIorxjyW&~%Z_9m?oI1}rr1j1Kb; zyS%f=mqI4h1`40heErFgtgUg($uy3jy!1M4&gAHL&l~la z$O37_OWZ*yP=67e-7BSejFUM=7ow2iW8UNb8DOzd`bDxo$I`XFtm&=3SXT^S@;GWyZ0pNOxKWz6`zhN#KCdk-%?%GRT zwV7#Z0{6u$FXv+GwBfQ|=U?_bo5|_)SHg=1@uHi-sMCRGZ&T`(bVW_uu(^D~k)T*E)=5gD1+}PW*1=TnU?YY8z+Kl9oL@XOMFOQ44eKTtrp; zEgUpf+Y;5d^-+pmidsm3r^cbIP!Li=-0w4_O`SgQH)&*@`xKdhfNNREU5wLs zrW{c0OvLwR6}u_DSWTaj%BKexmZmD)T)ZKS|4a=rxBe0HPc$Dif^4e+22&Pipl{YqC=%5|C!D-L~kPwLplCWe-NU=|A}F8AO10d zL=NRYu?`FMZD4~Ftp4{^fw-DJ97n=8Cd%Y zX9D;#&M@d$f3h8@y!Dklg(*j!Q#V#$<}iCN8%h&jvv96tt#sT1C0#^f z>K8;kg$SFbRGoYoy1=PpJyM zgsz~48Ag(8Rp?Rww@7v6N|b+oL>9r8qGsSf_E3`sRyABZ4Li{D9+dSG{o&E^Hl_V; zAfm#rW(7Yk$AdGq5m8czEzaz<}DPPoM(TOpwpp@O*8D6sfM}GBY=) zr1^k@hKA zVsK=%{JQ^HVT3aC3KbL-VC21hA36B>xdBbcuW9Le?K3lIkOkZe0(t&IyiMZ$-Ii2O z!S%$%1O^5Mf}o(_++upyuqJ7FIiIn$HJYiZ#*9V$)s@>i0UpGG0X2T=IUCe@@aSY~ zGi7>C9v)$J*UBFSizq%wWyF@Fb#xeHMh&0{2s9(0p~0<^yR|}e8oz+D7)_M6Sglck;u!-cj8dIsd9y=^10f>^z-*O zw%mQk%&gJaL?&b6M=r$lj1<-si$T_mz{|V9(NNjL!^#Q+1B37wBBKd0B2OPZHIv9T zJ~8nij5(~YFFd4u)HGIX*g(l7;k)q)3} zk&JBMlfXWu&TXy2`xY}7`3^>^yYlr>jfR@8lh^>N!Kp=T3K%AP#6uV@hAum&E6~Z! zb%VOtY0z>Hh`jO)vo*rWL7uA~ov%JIKv0yI{a!e`*tLo*--x{fThYFF^fI7_xFLC# ziH{3@4=c)E>_@W=qpHe&=VLGH;>Sl<;HcY%m;X$LKi#t#e43cD@V-H^fUgp;*@BE(yb%mwm0cc#46QNk%&Ri~vYFBbozh&0?))W#lzeUAp*R$5FA(9DI zMfAivf_SQq1?^z*93CUNR>930Uzjn#U}!~Dk`C-9C?SRDOdg~Y9) zeA~FW=XTY3C%7-p*Y>&BaRf;N_aSM`fewkc6jdc`^Jk(7<x8i_43nRp0UM;vySv7dvn-e&5|*{Q4s!n{K%<~aS-^vBdENxx;iW=SG zj8eu9c-0pmHJ}!;RF69jN-Qfk z$8THNtM6oCc!A}i0iA=GM#gp&Kk?+UwbSXgE8;D<2t*EH{O0T(m+&ioW5g?vR@zFb z#^{@eN0a63+@fjAQUGU_I}&D|Ieprw{B#wkPfK7KSZjOYvX{qluXRcV>|^A{Sxw%% z0V~@a@oSIk(DIA;`^7($YVw&{6wK_28Zo5RrAJKObTrZ*80y`Rf^UgJu(Q zVyb1dA9iuP;fyre_575El}zejkREa}{Ae_z%>5a=ULIH0v!Xp~WRo)>jLihgRoY*a zmxsN0s8H9uGrnJ3}wuL-F#M@4%K+*SDdvE>iMm+*BGICrK zylTbVyU_Rla7-H?mVd<0$_Un^pnealO_$>soq68nIg#3O3nwAPhq%PulgyescJK&S zc-tqmM^nX4$q;-Q=C89-LkY)D6#H;IyU}b9qaYnUrS(#ivjL0q1loJ*XlnBAoSY|$xB&wA_9L`|LN+MbcgPRQf(PfLIwyeBk zP8Yghq*$E29%Wv$tvO11nk+=Ccx|cdVkV`PshGoSUOy$$aVv%_8-JQS$0CcY*^FH<{yo+bgGULOI{E_%uI%wxQ&H)63v$|M}g|SBA@vA ze&hKlf8QbGFWH!bOh9`^onCN5Xd48%r3LsHS zi*V*TF2U7YD5Kar`4mnG4hYZu6yKL8U65_*7?l7V)Sk&kL)}!Xhgsb-YD_(p80{s^ zo{lPJfF7OS{NwiEbYC5jnzv=DYGuE9e5<-_g~rmzO|$~zhY)#&9wlHN@$wJp1mZ>5 z)c|f{qKoNe2Clvc`GyR{8aLe9#`I3;Igc@vroE3okm~s>xj<@aXZ_66%wF5){z$NN z+x#xpK7@jno2<)x-UIbG_=UQ__>A{v$+GRsJcu$O(;G&w!t#B*#+SzA)Uh(c=3(LJ z&5RzeG!J5aJ-zH%HQ2%*KfhG<+FjjgBGsgzc6Bpu&ON)!sP2#NHHqPSrrwij;!RJ& z+u_4?$lBBGsE~(|NzOg=p@jT&ldR43LF{8ucdDR)`g@LF1v-vr>sYos$3rP%H$z5+3mG1v@}%uT_R4 zk(ja@nfD0zO}rxYswu`dE$BGBsi}0!N)^ zfs;LVj1f0X8pD>$*O_{KKR8Pgpv3ly*NHk~I=HdEM`OqBd-SZAbr|ZeQ{oKIdFznf zErF(=UN2Ll0!<<8gGHy3)U_r5XT17_@2<)j-Ho7$6sch7{Hl$9i7&qADN?S4`~EJo5S6;RA!& z(z%Iqr)lAhCLS6F6z?7Ez6^~jb6Wo;kaN!fQWjg9qbKea1fx#o*CbjvvLqerN&_2? z9X5(PO-NduNox3PxC^OUNnh_ajy#pB6VoTvm`&01#C{)}$2%*|X^=Fx@9DIKIW_BB59tJw(-~b0{Oam@mL)3{yWoh2n0T{>c_2x|q~#r)C`5 zwz96D3}8@tw8$umFp{&+S`=E1e?6jQ6S6 zS?^sADrkx1m3u&@H)4#w(B7lH{h}@6Cr7BMFXmYf0)Q$goX3Q!bRF_#I)nD@Nuu6BuBC0qD=+)KW1`^i_75gMw>7#mGQ*}_YB&N@5J8i#liig*3%f zH`hxtXwVA{omt0xS-5>OhF@X4*n0cpl*c?n=zuWymw;hYoNY5o?q>m@YFtOAJ)GFc z4lI@(uhHFA377{`{e$C7zZXU-*=5{);*_v{Tmet`%d6mi0l!g+Q&-c`A!Q z1941L{b-`jl@CCd_EU$RGfF@q9~!6}3c-9dFyTg?gme;BRHafP>Bf(Rd>T=I8`mib z9V?^CxeL{s%3?pi0sT5)!S zNlaPMowH6l?mr{)Gjh#7K8OOglxP`Bzu>r=O^~hlTnTtR?o%!@g4CD$B5-{xME{=u z;i$=mHhTEL;>=<(aIptx)+|tb(D|rtBQcJ`pVp346ic|Fm(uFcX(+W8&R0`-zSG?6 zg#ms3$3AYnAhjU+y=q2vVw)WB63^sd-Zgc6kKXMQA<|%^dQzi7_i)pZFiRamc(VqD zpgIi`Z?$g%QG{uifYF!~FVa#iGFo&o=m6Xws1AJksBU7Cb9PCZO_?1D8k04-5)vA+ z4yN}8Q;VpBqHIvGr-a`oB-ZmxmaxvERe6|(!I%~oc2j=h+ zi+WwuFV;sc&*NVU*aiQd)u+Rpxp_i#F@dfsI7BC?T_OD>@EIsMUOOyj_t)!7H@NH- zGAm$-{Itoh12^Aq!x#MK&=p3AE1HfvVDlS}Gw~@2w_0cDM&i1t@({z-o^216DstYuS)4cf4*r@LL z3{hh`V#=$uR+8vh^6+_9)}iNP`2Js)Vb{XE3)86)ZNK`ep0z`hxay%Z!@E@cse9cC z5xj4A^k{-DzFU#?Ygw9L2W{ z2lT2Q={?>m`{Z7p<420H#hY(hm?Q=>-o+$S{DdD+)0uYpVP* zo2(w^L>M(YZ}|U=-P%jx<^~-ib&VJ2Fy!OPkaLERWd=XOKa~~E6+$1lq;mV9X^~e; zRe5EKFov##Tc`Hcdym7i6(cGENjaq_v3NTv%fO)GwR-%c{MS&?gXtc0(Pt2x-6QeK z4YO}-U*4RJ_%ModBBNO1t#7X6lmtM<1pEv~)bEo4ezVhpa0c0I=mEaJ0tsist&NehWyklsHq`bUbPDSMf zzOQ)2DW+ILfwZc-$FT5I@x;ynI}mpLJC8}jO)vVd+jiD9b5_-pKRP6*f2HbrQMD@| zYe^URaj%i*U+Buyo4^nqU~)8LX{fb)X3KrQ-yNv%CvJ9?I}#m>L0Fh&jFE*i%*AqA z?x7d$5l6qYd^P(~S(#CtHP?(Xad?$x{tFYn##zHO=FnH`=nh+8HVN$qt&MAqK*k2; z%Et9ug0@+xd{9ePlMzd^5>WDoQISih5>J(UGqV7R7bud!m4S^sp7X*b)jTJ79TjdP zG@47R{3q=Fcu3XWluPZC@jEmDY3heWRP1TLt3we&___Y3&rqIgUiN}??kDl`aif@q zKzZPPLr@6mn4$&r6v|!YE$xAZugTKW;9S90*j;oq1w9`Owx?mo{$Yxf(=*JK!#FZ2 z8U&?P8>ezv322=(;IaOdm2qUtzl$#15XSH|rqt_Gt4C92FaSqF+is7wXd1c+3`r&5 z`vCOo|DbFqDxXVVHmPa->B#VXAu_6R4o-H(dCzy#5gNo@brNaxxmOTR1BZUYAWzV) z`*zSkFJru@LP;Df+|x|#?4=ZVl^_TwqVu3Q4+DATRFz8If{?EIF_LJIb6J46W{!7M zlpaqLe`u;s!h5;fP&zqq5E{?rdR)qes{R;!=CZ1z+cmL`H&K0uu>$|XhCE(BvU^vo z!rV_h*BP~{uZuar^?vQd3YpoM-}a+dC8q6(hEM<<-Za^fOLV7xitZ7zk|GMRFwDfW z*_ihli(RuuFi8V$Ds!X)CS3s0+_RRoEoo@GCgSj#{-x zIunjOD97GVLG2z@mN5Z4!d9lNFOL|T)c6q8Ey%rU&oDd{uZqTqC%wj|D z{t7)_CJ}1!MMBO?&)xh;$5f}3RQ-JV_eRk;6|q(uwXdJ@g206VCw?%l6&?^3&1jKr zItfs#Z4LSO$lX|PgOHb}Ek=LC7-~}S(`b<TS>%m~(AFV`)Ss>^ZSVhpQA)PB0%VvmszZ?%RuTF;uHQxL?If(l!K7V6f3sZ(whBGx8IzFV`aKyC|H z+mnE+UAdcw#$r(~@yk$lJyn?m>tvzxZjR<@zV$OOPPV{wWDJVn&yx^wNAUx=q}$QmRZNj2FZ~p5B118Gtik-(X@eD?`wF^TETm`mxdZeVQPA?(&x+9a9|G zz*8G3&9vZJK?5hJ3o)@B?r~sbswZ~xU~HIa0GkZ zI?wLYs}8XAz}avt=(m0C}`$$#JlXDBYrQ)*kvq1p}wx=ymx4^ z-MEsN3A~e166yNhQ2Ax!C}VFmk8A<_yU-;VHM>Ea=sImUXn>ZNNqzZ?^0$Rt;~Fr2 zGAs6@{qr=zL?hXQed`zMPji`}DZP2QK&{)tUWNvZ;%2(_qMfxC`%L(J7}P@i!q72zrpvsgj_EDRZ51Iz}H=Y6a)HNTySEy`s}JdPw9w z8qmpuC(+3%al_SC=p#=2mX-Cgs;0!Q9F~zn z@C-TtEsKr#C0{UE)1%^K-8v$#Wt~Zzj>^2rO6XNOiIlPPMbJdyL3PRmUl@`2vhGt% zfu~NLj!CFFp4ZYf`8n94#0_Gn^MX~Ge`>tFo5fmrW67-I62DuT$%f-O)Yn>8kVU;TGNvDXY`PFVvzqjqC*Ni{ zxJ7M*AZjj>l%U(e_OGMkIO?&UXHQl@HGv;qqe_c~$H(qG6GCv*O)u znl&LCtj#L%RX8@g{f!o5C%rkMiQ~Kanr*?DkR>L6WBs2x!^dg_Yzu94cA^m8l3oj2 zf}UGtYkLly9O`Y~U#QsmLO|`Pf$;k54F=oj$%RWMuR|DTAFFXYyrA8c=0PO}wGUcf zak>gd=HlZKfHBx3w*3QLelID#(E^;QkgrZ~)~~L?#k*%Y`P{N2Seg~~FT+8asXSIx zTYMJ}k}tX#2-DXZoVANmO85)Kl2eY$EG!0|NFc~D#?wzsK zqvfF<9m8QnFv3{SBi+0L{nHEIy=o*#5fpEC_xDdwkT~Rw)g+fOusf_mCP1BC$SByy z2~4W+ZE;iFMUW;`Vg2G>B$eA0MJASLkV~O|D~h_xQc?8oM}v%q9QRiEQ_#=$-u|0M zQtOOZ3=1BNb4-~?1avGUW;b{DFy?CTv-`UeaHzVE2NV)W;XKKZjX@Y0Ha;^cv*F_D zui@gy(ab9LfcgHiLK>6X#2>M(vg}Mqh-7$GyPVAUJ$5ajpOCUy;R%x;HQQg;Qq%?{ zRE({?ImK|vHpjc(Z<%dJot#1`AoawD*h4S24PCjJZ71jK0SF)8u}JYgwzPIKL(juX zGnDDbqFwwD8dTl%iN0<-rcD|k%P!@pQP9-2aG)%9GksixT7A{!@An;g*;3VYx3@ba z6ETYCOBXh{NvV9DgCE?4m+l|LyY>CD(J8cr3v4Fp4)MdWummp5xNUv^zFy@7ZwF4o zrHXbG1+xlc6SC;)&aXv$%%~PoRh+-E0Q;#-&OLH)Q$zE6hvmEvFBW2EmgIbt`2J&% zETr-)S5h)=Yjqq-ecaCrcOlEg&+YZPjlr;ouQ@tiLa=s8Lzaq}qUMWfeHncy;}6_( z@R?o;vF8uRo7&A7?hpM!%)V4dAu+T15>c`03N9rg^tjXEqnR6FYKbYaemAf&?9}ZB zo2p3nkI~nbj}#4Gjzb3QJALNbhS`iq7hUT?ep}W4ELYfTDKZ1nT6B)SlgXTekLR;$ z(pB)j1voo3^*LDMJUqIK-z2tnce1n66dBh4LJP6=m%AbUex-Xw1f1KR_4M>0ZtrDh zuPdo{AY1{&J)WGB^4zfGi=h=x+{LU-e7oTl*1wu~Dy0j-gutP8jb(RnxNONO{rd18 zzFwYstd+JJI-P<(E0LneF4Hh^|DO9~fls3FnP~~p(@c;>y%CM#mEX6mV$bpr!l)2I zsWSljEySvV&kyg)7Wu4XWjd3);cGD!!VfG-Bs*$XcIg6-&46McO z{d*%bn&CfIVJM11CIs`14y7lE^$&*C0*tN*xaz4B<{Fzz_<(xy*f)DgH^fWD zMTIoN=D@-60VkjIzVMCD;{~3w0i3^w3ox4O?Tw3~!Vt-@h(!AwR$3U>AOC>Lzb;D6 zoF~Es9UvBddMkHpK}~bo99jE>Cd(TTQGN{WnKcZIT@8FCB^7kbC!E)8zrpI>TMJO**ZQuhCu;pT6ENIwLS3qex=OlAB9hhPmXQemW z_Z-CX>Ntl`%r@b#)7qG)Ba~XW1Qt(Qi4ybsEPq0~rgAd1V70Nr-wGVljh&=9_#`=eDPUYMgANPSA5Yi-iD^-JgSa!72x-TLV!f@1`0 zi7AcQB{RzO;5~SGIe2(Na&vPz z+y@4yt!nXF$ew z=A6CQMSs9j<^M@Mv7 zdhJGj;*LolMy%y@s_DbW3sb;}k~(fK10AC!9V0zk5qsi}n!(=`vwMD%7!ldEY4-K3 zC)B48V2Rq7lt#;oFpgnuP6+$hBv`>BSOIcg5=G;#x*I6hdX9TyH4}DQ$7x5*)-m28 zkAVwr{dy6_EkoijW8qi8`a5yXmlmNGBA>^m)qFVhGWxIQOFz~YYbEzdA z%SvQL8DNT#*u05*IgsK&a!**)KvdKKfQ1oHkBy0rm^ZB&@PL)R;}=m*8Yr7GLdxmW z{m#yC1)EQmPrCKxHDO3b?{ByvhrIva3sK&$4pKGlHfTP2`j4d!%%l9u~? z;eju2&O^{&ko0XuQ-KD42NCO9Y2CZ>INnb5;^oF{)~6)|(b4GF44ztEe_y+#sDk~;^nc&Fc^l$@~+s$H?Z}NC!42$#hqaQyX=JbcGhE2LGT|FMXmO)I`!{ zD@z!5Sn82um8)?WoIoqmI!?5iU$2v| zv5WsOLqA-NnsX)4@v!mnqYiP`(hx~=vrlDJRW{&_x(v?JiUetoo`3VbN37HOZc)i4 z61?aznMf#v<82(0fZvJ5qA(`51y>DId512Rk?_)g`As~-(c8uUfpSEPXr_4LW3?`v zo>px8xjuGQ#Roj72g$^Pu}nn!ganq9j(#_?U=+aJtEE5<@5;#6p2x=OwsPos7ibJ) zF0Ai-H|+yU7&0=wc0hBg&-1^?OL97q-e}4NT9Hir{JI3nx;m*{BcJfwJkk?LI7q$M zu@mq+uzInW6e3Bm@f6j(FT!Fh2_v4`FScM~Omi!o<=jk6xQL*AhpW!U$l?)d&gEQ4 z`eaO8`fpMxXa-Gl5|jYdLUf3MmcG@Cf9R-W`(d`Kx4iyRPP@PNL&0w!SHiW(@8#g& zfB^Zsa~^{_xwmORTqgmf?4WdVataOkLrQY&hIv%_#p+fw@>(bSWBhictL1BRg_xhT z)IArx*I>Ws7DelaUWlkB}_=QBdbX`(FQSXs<7C0@Qv+_k)S21KZ67G z2{11PMc#5MPG!n4G}Y7+)V`h^9ijO866>U`eEExNPM|Lgy;)*u>=L`(j5Va2{yPq- z^oqS>Mh(?N=D_L0pZAtEwoY}8Xy~@~UJD29iw5K(H*jaJ9HHQEobP|dVy>B>1m0AD za}&o#9B->9Ln30)mdYI3r#~aB@KtoK=!7ian(Gi3cBtP{vCKU4&$pv^aHqdZPm`7vkn@fUmom_fSw!vdhY%5Bc0eFC3j~ z-QBVZO5maWq1PKRz+9nCP5dlnrADUq)SvZ#8S-@Y%)>f3oSa=n|);mUe_qp8&;@eSMY*@P9UtE-1%M)5wLX#<+Rxb7x7-IQXD zRGtOiukI!#Ww{v;?j~zymF7@gwK%O~u^E^(<$)B7Z94m9j;jUON=hX4^`Q@lw6mOl z3u#Ne+Entoqk0gxJaZimrU1+bFSgkYfabT}m`q9{14l2($?OP+f}=Afd2Vfff}yQX zf#&AhAZAS*eEeuK%(pmJKZOK1zfAc0^=l| zrHvfDLVb&x)6mc`nF;MZKQ$t zZS40Vzc1YW4M!Mng!c1&iT~gD?f<7(*Z&Vz{pC!K&-n&yhG?M5KWSaE$eyEm(ZzXr zFpyo@KY2}lwNAIKb%l5D!@|P;=SD)|TiO&=6(s-w`5>JmnUe#_!2(G|NJ+nmi9(A4 zy(Kwekz(P#WjoOb&@jE_g2}nb0pDaK?)^u=`2VW_IUpAo7i8=tip&YgiZNZRSyE{?Umed}e0_jiIdg?H)cM)i zk_#PtVi-$mF_YTh^#08herJ)=*LUZp>t~WaKFv-`AS&H;6Ua;{rUdMhM11`w%yrsK zHD}Ekpsmp(?a5whAoFHWa*<@|c6x^w?4k%f(ojg>i%)0IC=_D`ue|7ic}{i`r3Ihixy$!lG*I`H*n zY-XnS{&JU+o}OM#2J&UKNuE(*yO~=P@caPTu)^<-{OSrt#12Idw6@;2S%f@~alSdy zRr>i6Fo(C2Ur-RiZ8>5zktaW0e-1EOZS&8rs9>*E&JfbII-D$sKWi+u)c^v!lNdEZ z51Ll~_#)dwIQ@7FcQ|_P_J4e?gR`?KRelMC6=@VuF)|_w``&~mCSs~Us@pHtT2I2P zU+s-U_xARFbl!m3+TMoc{8K*M-7RI6F5=&OCY|kjdjf&_v=G-zQssjjs_%{GN|^r$ z34w;>4;Y!7hwbfIt$%r0tmhXH(5hW-axKV-)#e8m#RhVK7VkKJc-p(VxJam|#Es!$ zV{6#!Sy@?0r-z002sZEw3ToH(^!Bz@u?h;dzv{ws5{lI}fWb#BZK@SuN_n3#d_(w{FY2!+O zo%;u|yjce&HL@UU0h`ojE2e)P14z%Ls;as!S={`R6pt^$!*4l4V(g}wo3jD`{(dZZ z6nYX73~^x7HwCWl9!GNk`@kp#aWW*A$wW6%?0Np}zL^(Z{(ZU4%sR#&{Us+Jh)98K zG&!lkZ*$RxYdQ*q4}0c#Ienc{Xx2*sq5R{W@Pz&H^t<*qh|LthK|kr6v+r%}c^UD) z_CN%6<7m9OyMpqLdk;?QK}GWmPvS>a`_I}5VWp)X^{QSslt01{Zyt1_SxuJ1``i*U zE%BO<``GctNt*bOA$?mi^0(&uuEo+vHHmnf_i4RvXPGngS-5$^zDC<2q*|Nu#8Mkf zN-l_{p(Ot1<2*kW)RYo&cHXrx6IZ&I2$`8}RT%|QEjqBK{>bR63K7h%w59hb{}!en|TMDc-2;@N5<_fv5uAe?S5{hp$Z)%Eyr)HB7~d!1$v>=B0Y9`s9|wKda_!4i*+ zZV_{W`*|v$y-07SOW4l*@f>#xJ!E5hr)53q$g(w^gW>tw^*l4#68iY%t-%BInGg#D z2zKA&CoAtQS>enuIfg#9N`7p$AZ8=~)|WEuYdls7wZ}M3rZ3jZ~zEfJ; z-7DpFOSNxTBL<%oP$w^2HtrKLu%3jCGkcm$dH}?G06d>L5T&qMguw$3wru~Hi-F~< zp;BU~nyPD|!(te!;g@ldrVWY%QSCgsN}R6y zc2;wO9o!6||4b*|y4+MM#D?WzCzCU~!e(aU<%dbNR8Dl??{3|mqI^;ztAQo;shwOj zu>4gXm6O6Tl!|rp5f1MsYFsgGisKG_wb$%EeiK)5Kl~PRwwsd=V*J!!FClC0{@L~R zpNN*Ge9Vx)mNU`bVcrCKkjUvMw-}|$~mlEuU z_;2W$0+}F*17$w)8lm6-*(Ej8V+(JXjP^Y=?`XHE1yAu}8c2Iyyf1YAxKs4@yR|1> z292q$#7#baH@T)notxL`*gNuI$q+?-_Hh@#t*=meMw|>}=2V_XcD}7CnGcW8Ok>GU z6)k`_14`#0p-qRhO*)X&EPZi*IIR5S%j2XsO}UjK8kSJOo7?Y^qapK!rd@hi>s2Qnl;Jh`1EA@+O0j=6Q#hpPZn#0TuD0 z0jF+EDl6k@05PX!rcbO|T0{a?9=QXw?g&MX?+``pUl3W%S`z<(0IHC&x%<$S8J)(I zUr1HF`5^1maR3)=60+vGh)!lq=5*!RUCqP%pA`WTC;ZZi{+fW8a+m!$ph zrT7IhCuRSYM9tZQGoJWqta3RBHC(T9*-fyXz^(%>1e&113UY$@h8y0Zf-3i$CpxL? zeOTnf)nG5*+6B;VXr#hdGQv!)4||C zX}wRMh#)B+28-WQQ}5yz?%=r`H*>bgr#5&+7O(PoJw0zd9X2&=Hh9@W`0C8f%-V;C zm8}%z-di?!G#+bly*&i$RMyl;ws;(e)6)Y$_70G&!BsGH+Ocw%DW z?ASo9(M(bD$J^72`r(BIB2oc2F-SV$&Tx7JG(1}SzyK1dphx#FK~IB4kFz!L>@tl4 zmCn)lv)z5uXpmrJ`L!$r%ThTq<*)V0-JN5;5MDbj-t8_%*bEL1`m)>W>gt~UiPb(n z=M_14DzJa@ruqk?@R|V5(WOM*uTi6lyw8@?x|^c?XPmyS=LiHmeMCV;b>8a71i?h8 zN`HNGGkSbBrhum?@|2vZxU)^)H|TuvH&pw({YvW(^})_~UCmp+w)nSI8YC5#qH?(b zuW*cXE8{-8`-t!+`2UW(9ch^YObGwI%aaJk#RVt9{pSj|st}S)7*-NHwQd>o4I&K! z=oukE+Uj2nFF&vf0>%A;f3_0}%2F)FkhK5x**I806f)CY59POS-@**tY5vnHDm+|v z<=u#!gGlr4cnwXF6p$wqBO@kW)<5rqFb!*o5R4?x+~D>LhGfUT{(gJR7TAjY@9P(E z4T452@0cLjp06%0E}{FPBE=ihxK&kEot4p}m={>$A}E`#;ZN`ID|**{hdd1#larIL z&yxLVZGAJ8#Qma^rIV*qgj0%Bfl~v-+Y#E<@iW%YntgBCUeLF68O1h?P6Z+F@OURL Mts+$}VHEs-0p)+{4FCWD literal 0 HcmV?d00001 diff --git a/doc/pic/magic_bar.png b/doc/pic/magic_bar.png new file mode 100644 index 0000000000000000000000000000000000000000..91de3ccedb14ee07edc395b4322ee755d9f04279 GIT binary patch literal 3275 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 JPDHLkV1i)=dH?_b literal 0 HcmV?d00001 diff --git a/doc/pic/magic_bar_Utilities.png b/doc/pic/magic_bar_Utilities.png new file mode 100644 index 0000000000000000000000000000000000000000..0e22bcecdf1c1f938bbe7abc3ed3585867679cbe GIT binary patch literal 11018 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 literal 0 HcmV?d00001 diff --git a/doc/pic/magic_bar_Utilities_setting.png b/doc/pic/magic_bar_Utilities_setting.png new file mode 100644 index 0000000000000000000000000000000000000000..da34f86a2c6fc70a09e4278849fbc16968026b71 GIT binary patch literal 35119 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 literal 0 HcmV?d00001 diff --git a/doc/questions.md b/doc/questions.md new file mode 100644 index 0000000..1e342a3 --- /dev/null +++ b/doc/questions.md @@ -0,0 +1,3 @@ +# 解决问题 + +> TODO diff --git a/doc/reference.md b/doc/reference.md new file mode 100644 index 0000000..0a6880b --- /dev/null +++ b/doc/reference.md @@ -0,0 +1,6 @@ +# 参考资料 + +## 其他战队的嵌入式框架开源 + +- 深圳北理莫斯科大学 `北极熊` 战队 [StandardRobot++](https://gitee.com/SMBU-POLARBEAR/StandardRobotpp) +- 辽宁科技大学 `COD` 战队 [COD战队电控通用控制系统](https://gitee.com/wangcaofan/cod-h7-template) diff --git a/doc/代码编写指南.md b/doc/代码编写指南.md new file mode 100644 index 0000000..1887a10 --- /dev/null +++ b/doc/代码编写指南.md @@ -0,0 +1,3 @@ +# 代码编写指南 + +> TODO \ No newline at end of file diff --git a/doc/注意事项.md b/doc/注意事项.md new file mode 100644 index 0000000..d0ce9c9 --- /dev/null +++ b/doc/注意事项.md @@ -0,0 +1,15 @@ +# 注意事项 + +## 贡献代码 +### 代码风格 +本项目采取Google的开源代码风格 + +### 编译要求 +最终编译结果要做到 `0-error,0-warning` ,本项目启用了 `--diag_error=warning` 在编译时将 `warning` 视作 `error`。 + +### 提交要求 +禁止将自己的 **开发插件** 夹带私货上传! +如EIDE WorkSpace 等 + +## 硬件上的 +**禁止在DJI电机工作时开启调试!!!!** \ No newline at end of file diff --git a/doc/碎碎念.md b/doc/碎碎念.md new file mode 100644 index 0000000..fa89109 --- /dev/null +++ b/doc/碎碎念.md @@ -0,0 +1,16 @@ +# 碎碎念 + +## 来自木水的碎碎念 +> 老的电控代码是抄的山海机甲的,然而标准库+AC5实在是难以品鉴,尽管逻辑上没有问题,但是ST已经不给新芯片上标准库了,没法战未来(大悲),事已至此,重构吧 + +> 实际上,开源的优质代码框架并不少,但是Simba的情况特殊(~~我嗨专自有校情在此~~)我到了实验室只剩下几个C板和A板,不少C板的框架只能给AC5编译器用,过于拖慢开发效率(除非你想编译一次将近一分钟),而且拿来就用有时候不知根知底,会出现一些邪门问题 + +> (比如DJI官方例程没有缓启动,一走一个超功率) + +> (山海机甲的代码没做好PID限幅会疯车) + +> (北理莫斯科的代码用了之后开不了自校准,上位机的Release版本还是有问题的,一启动就崩溃,但是企鹅佬的代码质量还是可以的 ~~让我抄抄~~) + +> (COD的代码框架是给达妙H7的,得自己移植) + +> 综上,我受不了了,代码框架一定要自己的! diff --git a/doc/组合使用文档/全向轮步兵.md b/doc/组合使用文档/全向轮步兵.md new file mode 100644 index 0000000..278de88 --- /dev/null +++ b/doc/组合使用文档/全向轮步兵.md @@ -0,0 +1,60 @@ +# 全向轮步兵 + +## 操作指南 + +### DT7遥控器 + +- 左拨杆: + - 上档:开启摩擦轮 + - 中档:无功能 + - 下档:开启自瞄 +- 左摇杆: + - 水平:控制云台yaw轴旋转 + - 竖直:控制云台pitch轴旋转 +- 左滚轮:发射/退弹 +- 右拨杆: + - 上档:慢速小陀螺 + - 中档:无功能 + - 下档:高速小陀螺 +- 右摇杆: + - 水平:控制机体y方向速度(云台朝向为正方向) + - 竖直:控制机体x方向速度(云台朝向为正方向) + +### 键鼠 + +- W:前进 +- S:后退 +- A:向左移动 +- D:向右移动 +- SHIFT:开启/关闭超电加速 +- CTRL:开启/关闭小陀螺 +- Q:开启/关闭摩擦轮 +- E:退弹 + +> 以下按键为图传遥控时可用,目前没有编写功能 +- R: +- F: +- G: +- Z: +- X: +- C: +- V: +- B: + +### 校准 + +> TODO + +## 硬件指南 + +### C板 + +使用两块C板控制底盘和云台。 + +### 电机 + +- 底盘驱动轮电机采用GM3508,接入底盘C板CAN1,id分别为1 2 3 4 +- 云台 yaw 电机采用GM6020,接入云台C板CAN2,id为1 +- 云台pitch电机采用GM6020,接入云台C板CAN1,id为2 +- 拨弹盘电机采用GM2006,接入整车CAN2,id为 7 +- 摩擦轮电机采用GM3508,接入云台C板CAN1,id分别为1 2