EV3:陀螺仪传感器走直线
  1. 陀螺仪传感器走直线

    1. 录播
      效果展示
      1分钟
    2. 录播
      程序简介
      10分钟
    3. 录播
      函数简析
      11分钟

对课程感兴趣?

点击报名,听课时长可兑换余额哦~

EV3:陀螺仪传感器走直线免费

最近在学 30 累计报名 24 好评度 -
咨询老师

课程概述

目录

评论

老师介绍

  • 张启亮

    张启亮

    乐高老师 乐高培训师 机器人竞赛教练员 2010年起从事乐高教育行业 喜欢基础学科的乐高老师
简  介 一种运用陀螺仪传感器走直线的程序分享
本次给大家分享一个简单好用的陀螺仪传感器走直线的方法。

优点:小车可以延固定方向前进,不产生偏移。即使用手推它,也能调整回来。

缺点:存在轻微晃动,但并不大。偶尔陀螺仪读数漂移。

程序简介

上图就是程序。本程序的设计出发点跟比例巡线类似。当小车向左侧偏移时,就让左边的轮子功率大一些,小车就会转回来。当小车向右侧偏移时,就让左边的轮子功率小一些,小车也会转回来。

运算公式为:左电机功率=ax陀螺仪传感器读数+b

其中比较关键的是以下几点:

1.参数a与参数b:

参数a是比例系数,它要与陀螺仪的读数做乘法。参数a的实际意义是表示陀螺仪的读数对电机功率的影响力的大小。a比较大的时候,陀螺仪读数的微小改变,就会让电机的功率出现比较大的改变。a比较小的时候,即使陀螺仪的读数改变很大,电机功率的变化不会太大。

白话解释:当你使用该程序的时候,如果车子晃动厉害,就把a变小。如果车子无法走直线,就把a变大。

参数b是电机的初始功率。就是你的电机模块上功率那一格的数。车子前进的时候,你希望功率是多少,b就设成多少。50啊,100啊之类的。

参数a=1,b=50的时候,程序是很好用的,但是要注意a的正负。

2.参数a的正负:

本程序里是将陀螺仪传感器的数值与b端口电机的功率联系在一起的,且a是正数。因为,我的小车b电机在左侧。且小车向左偏移的时候,陀螺仪传感器的读数变大,向右偏移的时候,陀螺仪传感器的读数变小(变成负数)。

所以,当小车向左偏移时,陀螺仪读数变大,为了回归正方向,b(左侧)电机的功率要变大。当小车向右偏移时,陀螺仪读数变小(变成负数),为了回归正方向,b(左侧)电机功率要变小。

即,读数变大,功率变大。读数变小(负数),功率变小。所以参数a的数值为正。程序内为a=1。

所以,a取值的正负,与你的小车上陀螺仪安装的方向以及电机的位置是有关系的。要根据自己的情况进行调整。

白话解释:先看自己车子上两个电机的端口插的是哪个,然后把程序里的运动模块的端口调整为跟你小车一样。在运行的时候,如果不能走直线,而且越偏越多(不是陀螺仪数值漂移的话),就把参数a的正负号改一下。之前是1,就改成-1。之前是-2,就改成2。

3.端口:

端口问题很简单。但是容易被忽略,我就在这里提醒一下大家。陀螺仪传感器的端口,两个电机的端口,一定要调整为跟你的小车上面的端口位置相同。很重要!

恩。。。。。。提醒完了。谁错了,就自打尻鼓!

函数解析

就像之前说的,为了建立b电机功率与陀螺仪读数之间的关系。我们需要构造一个函数。那么,问题来了,我们要构造一个什么函数呢?太复杂的函数咱们先不管,就先看一些中学会涉及到的函数,离散函数、一次函数、二次函数、指数函数、对数函数、三角函数等等。这么多函数,我们要如何选择呢?

我们要从实际问题入手来分析。寻找问题与函数之间共通的性质。

首先,我们希望当车子左偏时候,左电机功率变大。车子右偏时,左电机功率变小。这样我们就可以构筑一个简单的分段函数,如下图。

上图是函数表达式和函数图像。右电机功率不变为50。当陀螺仪读数为0时,表示小车未发生偏转,此时左电机功率也是50。当陀螺仪读数大于0时,表示小车左偏,此时左电机功率为60,小车向右转进行回调。当陀螺仪读数小于0时,表示小车右偏,此时左电机功率为40,小车向左转进行回调。

以此函数制作的程序是:

上面的过程就是构造函数来解决问题的过程。

但是这个离散函数在解决本问题时,存在一些问题。

例如,当陀螺仪传感器读数为1的时候,表明车子已经左偏了,但是偏移量非常小,此时需要小幅度回调。但是,此时左电机的功率会变成60,小车回调的幅度会非常大,矫枉过正,小车会右偏更大的角度。因此小车会左右摆动前进,非常不稳定。

当陀螺仪读数为60或更大的一些大数的时候,表明车子左偏幅度很大,此时需要大力度的回调。但是,此时左电机功率会变成60,回调幅度没有那么大,造成小车无法回归原方向。

为了解决以上问题,我们可以让左电机功率与陀螺仪的读数存在比例关系。陀螺仪读数小,左电机的改变也小;陀螺仪的读数大,左电机的改变也大。

大家可以注意到,这个性质跟一次函数的性质非常类似。因此我们可以构建一个一次函数来解决这个问题。如下图:

这正是本程序所使用的函数。函数对应的程序如下图:


请先订阅再学习哦~~~

* 课程提供者:张启亮

老师还为你推荐了以下几门课程