遥控转向 您所在的位置:网站首页 遥控小车网站 遥控转向

遥控转向

2023-08-16 00:16| 来源: 网络整理| 查看: 265

前面我们讲了如何遥控小车前进后退,以及使用传感器自动停止。但是,细心的童鞋可能发现了,这个小车不能拐弯,只能走直线,这样就少了很多乐趣。

为啥这个小车不能拐弯呢?因为要拐弯,需要控制前轮转向,或者控制两个轮子的转速,通过转速差实现转向。

控制前轮转向比较麻烦,而控制两个轮子的转速比较简单。我们把小车升级一下,用两个马达搭建一个坦克:

这个坦克除了有两个马达控制左右轮之外,还有一个马达控制炮台转动。

通过两个马达控制转速实现转向时,我们只要根据轮子的直径、轮距,就可以计算出在给定速度和转向角度时两个马达的转速,计算过程如下:

$#%&^@!&$#;!~%¥%:(……

因为计算过程比较繁琐,所以EV3直接提供了一个DriveBase类自动计算并设定两个马达的转速。我们用一个Driver类包装一下,实现如下:

class Driver(): def __init__(self, leftMotor, rightMotor, diameter, axle): self.driver = DriveBase(leftMotor, rightMotor, diameter, axle) self.x = 0 self.y = 0 self.speed = 0 self.steering = 0 def drive(self, speed, steering): self.speed = speed self.steering = steering if self.speed == 0: self.driver.stop() else: self.driver.drive(self.speed, self.steering)

在Robot类中,我们需要传入必要的参数以构造Driver:

class Robot(): def __init__(self, leftMotor, rightMotor, diameter, axle, maxSpeed=300, maxSteering=180): self.driver = Driver(leftMotor, rightMotor, diameter, axle) self.speedStep = 32767 // maxSpeed self.steeringStep = 32767 // maxSteering ... def drive(self, x, y): speed = -y // self.speedStep steering = x // self.steeringStep self.driver.drive(speed, steering)

当我们从摇杆接收到x、y坐标后,先转换成速度和转向角度,再调用DriveBase.drive(speed, steering)方法,即可按指定速度和角度转向。注意到x、y坐标先处理成以(0, 0)为原点的坐标,以便于计算。

最后来看看实际效果:

参考源码

tank



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有