[灯哥开源—四足机器人]程序算法讲解与STM32移植——运行框架(两个主线程)

写在前面(核心思想!!!)

之前有幸参加过国内的机器人比赛,对阅读机器人控制算法有自己一定的心得。

在我看来控制机器人的程序是由一个主循环(主线程)和多个“次”循环(子线程)组成

主循环负责实时监测机器人的姿态数据反馈,并经过一步一步的算法计算,得出相应的值输出到执行器件。

次循环有多个,他们的作用往往是负责实时接收传感器或者遥控器传入的数据,并将此数据反馈到主循环的某个环节。

找到了主循环之后,我们的需要了解一份程序的第一次循环是怎样开始的?中间的循环是怎样重复的?最后一个循环是怎样停止的

以下是我认为实现控制机器人的一般框架,如图所示:

 我们如果要阅读一份程序,所要做的东西就非常清楚了

1.弄清主循环,次循环分别是什么?

2.主循环里的每个模块的功能分别是什么?它所用的算法背后的物理数学基础?

3.主循环里的每个模块的输入量和输出量是什么?

4.全局变量,形参和实参的“生命周期”?

V6.0版本的main.py

在有了上述的方向指引之后,我们便可以开始阅读整份程序,我们都知道main.py是一份文件的开始的地方。因此,我们首先将目光放在main.py文件中。

在此文件中,除了一些库的引入,就是以下这几段代码,注释如下:

#函数功能:执行打开并阅读web_c.py的操作
#变量作用:None
#返回值:None
def app_1():
  exec(open('web_c.py').read())

#函数功能:执行打开并阅读web_c.py的操作
#变量作用:None
#返回值:None
def loop2(t):
  padog.mainloop()

#打开第一个线程,执行函数app_1  
_thread.start_new_thread(app_1, ())
#打开第二个线程(循环),执行函数loop2
t.init(period=10,mode=Timer.PERIODIC,callback=loop2)

当我们点进web_c.py,可以发现整个文件的可以分成三块,头部的引入,变量的定义和一个while循环程序。

我们可以暂且不去理会while循环里面的内容(它的主要功能是接收遥控器的数据,具体哪篇文会讲到),只要明白这是进入了一个循环的程序即可,也即是对应开头框架图中的一个次循环。

而main.py里t.init(period=10,mode=Timer.PERIODIC,callback=loop2)这句话的作用是每10毫秒调用一次padog.py文件里面的mainloop这个函数,此函数是整个狗姿态控制的核心,也是整份程序的主循环。狗狗能稳定不倒,能按预期行走全依赖于这个不断自我检测,自我调整的主循环。

综上所述,我们可以明白main.py里面有一个不断调整狗姿态的主循环,和一个接受遥控数据的次循环。保持狗姿态的主循环是弄懂四足机器人原理的基础,所以下一篇文章会按照这条主线,将主循环中的每一个环节弄清楚,再讲述次循环部分。

  • 10
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值