2 Star 3 Fork 0

ICR18-NEUQ-BTL143 / NEUQ_ICR_1801_TC264_Slave

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

NEUQ 第十八届智能车 - 完全模型组 - 下位机工程

A wise man does not fall in love, but a fool is trapped by his feelings.

说明

该代码是十七届备赛较早期使用的验证代码(众所周知后面规则先是灵动微电子,然后次年三月份的时候零时更改为沁恒),所以很多内容都比较不成熟。

私以为完全模型下位机主要需要实现的就是 通信 + PID

通信

通信部分当时还使用最为简单的 串口接收中断 + 状态机(标志位) 的方式,通信帧为自定义定长帧。该方式的局限性在于需要在中断中实现解析,如果操作复杂耗时过多,可能会导致错过下一个有效数据的接收时机。后面更换为性能较差的 mm32spin27ps 之后该问题显得尤为明显。

后期比赛版本的代码中,仍然使用的是串口接收中断加状态机的方式。虽然修改了部分判断条件,但在 Edgeboard 高速下发的情况下,仍然存在丢帧的问题,只不过使用中一直在更新舵机打角和速度值,所以确实处于一个能用的状态。

对于上行数据,主要实现的功能是下位机一键发车功能(本仓库代码应该不包含)。下位机通过旋转编码器和操作手交互,当切换到发车菜单时,直接按下旋转编码器,下位机就会向上位机发送发车指令,这使得我们在比赛中发车流程显得比较方便,可以专注于发车过程而不是需要同时操作电脑,减少了由于忙乱而忘记按下计时器按钮等类似的问题。在 Linux 中解析串口协议帧要方便的多,由于设备即文件的思想,以及实现了接收缓冲区,使得我们可以异步地进行串口通信帧的解析。上行数据线被送入缓冲区中,然后解析程序按需读取并解析即可。需要注意的问题是 read 后数据即从缓冲区弹出,所以如果所取数据中不仅仅包含了当前帧的数据,可能会导致下一帧解析时丢失帧头等,需要做额外的处理。(如果有必要的话后面给出例子吧,也不知道些这些有没有人看)

后面做过一些项目后,对自定义的串口通信协议的发送和解析有了一些新的认识。后面的实现中主要采用 串口接收中断 + 环形缓冲区 + 状态机(标志位) 的方式解析,这样能够实现较高负载下较低的通信出错率。同时还看到有很多不一样的思路,如 dma + 双 buffer 或者 串口空闲中断 + dma 的方式,不过实现要复杂很多,没有深入探 9 究。

有一些可以参考的项目或者教程,可以参考:

/*                                                                                        
                  .........              ...mm*****=m..
              ..xm**""""""""**mmuueWWWu.um""`         `"*mu
            um""                $$$$$$$$`                 "*u.
          .@"                   $$$$$$$$                    `*u
         .$`                    `*$$$$**mu..ueeu.             *x
        .$`              ....      ``    "I$$$$$$u             $
        !!             :W$$$$$e           $$$$$$$$             ?X
        `$              "****""           "$$$$$$$e.      .    ~$-
        m*U                                 """"  "*e.    TWe.  "W
         e$x                                        `T@- u$$$$e  *:
         ""*u.                                      e"  e$$$$$$U `$
            "*mu..                                 :*  x$$$$$$$$  "x
               """*mme....                         !! u$$$$$$$$$!  $
                     ``""""**m..                   $`:$$$$$$$$$$!  $!
                              "*@.              ...$ U$$$$$$$$$$!  $~
                                 W        ..um****** *$$$$$$$$$$!  $
                                 $Weeu..x@""`     !!  $$$$$$$$$*  xT
                                 $**$$$$$!        `*u `*$$$$$$*  :$
                       ...m*u..e"?xmx`"*$!          "*x. """""  u@"
                    ...$""W `$"U=" .@m: !!            `"***mmm=""
                   -$``*  " :S.$   `-"?:U!
                    $u      ~$""    .u` $!
                   .$"*W.    "@.m***""  ~$
                   "u  `"e.   `"         *
                  .m"*m**""e       .m    ~U
                .e"        "@. ..m*"      $:
                X"           "@""         ~$
               :*                         .$
        eem**. !!                         W!
        $`   "*W!                        u$!
        $      ?!                       x$$
        $      !X                      .$$$
        $       $                      `*$~
        $       `@.                     x?
        $         `                    .$
        $                             .@*@u
        $                            x*W  *u
        $      e.                  .u" "W  "@u
        *:     "*u.            ..m*"`   "W   "@.
    ...m****mmmmmW$e.....   .u@T"        "mu.m@**
  u*""`          ````""""***"` "m.         ``
:$"  x*` ..                      "*m.
!$  u"  .$                          $
`**********************************""
*/

空文件

简介

完全模型TC264下位机代码 展开 收起
C 等 2 种语言
取消

发行版

暂无发行版

贡献者

全部

近期动态

加载更多
不能加载更多了
C
1
https://gitee.com/icr18-neuq-btl143/NEUQ_ICR_1801_TC264_Slave.git
git@gitee.com:icr18-neuq-btl143/NEUQ_ICR_1801_TC264_Slave.git
icr18-neuq-btl143
NEUQ_ICR_1801_TC264_Slave
NEUQ_ICR_1801_TC264_Slave
master

搜索帮助