2017-04-03 179 views
0

我創建了一個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() 
+0

你能告訴我們你正在使用的代碼嗎? –

+0

這是一個真實的物理機器人還是隻是一個模擬? –

+0

歡迎來到Stack Overflow!你能分享你正在使用的庫和你用來與硬件接口的東西嗎?另外考慮列出可用於控制程序的傳感器。真的沒有足夠的細節在這裏提供很多幫助。 –

回答

0

它看起來像你想開車基於時間的距離。雖然這可能以已知的速度在短距離內工作,但基於傳感器反饋進行驅動通常要好得多。你要看看的是encoders,更具體的是旋轉編碼器。編碼器只是跟蹤「滴答」的計數器。每個「嘀嗒」代表傳動軸的旋轉百分比。

formula

其中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