机器人的距离

问题描述 投票:0回答:1

我创建了一个基于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()
python robot
1个回答
0
投票

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

其中d是行进距离,cir是轮周长res是编码器'分辨率'(每次旋转的刻度数),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

© www.soinside.com 2019 - 2024. All rights reserved.