机器人的距离

时间:2017-04-03 02:48:17

标签: python robot

我创建了一个基于robot运行的python。对于它的自主程序,我需要它运行一定距离(比如说10英尺)。目前我正在利用时间让它走得更远,但是有没有办法在代码中实现距离以使其更精确。谢谢。

这是我所做的旧机器人竞赛的代码,我想通过改进来学习。我使用了这些库:

import sys
import wpilib
import logging
from time import time

这是代码:

def autonomous_straight(self):
    '''Called when autonomous mode is enabled'''

    t0 = time()

    slow_forward = 0.25

    t_forward_time = 6.5
    t_spin_time = 11
    t_shoot_time = 11.5


    while self.isAutonomous() and self.isEnabled():
        t = time() - t0

        if t < t_forward_time:

            self.motor_left.set(slow_forward)
            self.motor_right.set(-slow_forward)
            self.motor_gobbler.set(1.0)

        elif t < t_spin_time:
            self.motor_left.set(2 * slow_forward)
            self.motor_right.set(2 * slow_forward)
            self.motor_shooter.set(-1.0)

        elif t < t_shoot_time:
            self.motor_mooover.set(.5)

        else:
            self.full_stop()
            self.motor_gear.set(-1.0)

        wpilib.Timer.delay(0.01)

    self.full_stop()

1 个答案:

答案 0 :(得分:0)

看起来你正试图根据时间开车。虽然这可以在已知速度下在短距离上工作,但是基于传感器反馈来驱动通常要好得多。您想要查看的是encoders,更具体地说是旋转编码器。编码器只是跟踪&#39;滴答的计数器。每个&#39;勾选&#39;表示驱动轴的旋转百分比。

formula

其中d是行进距离,cir是车轮周长res是编码器的分辨率&#39; (每次旋转的刻度数),num是当前刻度计数(读取编码器)

# Example Implementation
import wpilib
import math

# Some dummy speed controllers
leftSpeed = wpilib.Spark(0)
rightSpeed = wpilib.Spark(1)

# Create a new encoder linked to DIO pins 0 & 1
encoder = wpilib.Encoder(0, 1)

# Transform ticks into distance traveled
# Assuming 6" wheels, 512 resolution
def travelDist (ticks):
  return ((math.pi * 6) / 512) * ticks

# Define auto, takes travel distance in inches
def drive_for(dist = 10):
  while travelDist(encoder.get()) < dist:
    rightSpeed.set(1)
    leftSpeed.set(-1)  # negative because one controller must be inverted

这个简单的实现方式允许您调用drive_for(dist)以相当准确的程度行驶所需的距离。但它确实存在很多问题。在这里,我们尝试设置线性速度,注意没有加速控制。这将导致错误在较长距离上建立,解决方案是PID控制。 wpilib有简化数学的结构。只需取出设定值和当前行程距离之间的差值,并将其作为错误插入PID控制器。 PID控制器将吐出一个新值来设置电机控制器。 PID控制器(带有一些调整)可以解释加速度,惯性和过冲。

关于PID的文档: http://robotpy.readthedocs.io/projects/wpilib/en/latest/_modules/wpilib/pidcontroller.html