所以我希望我的机器人在 webots 上到达所需的坐标

问题描述

我想让我的机器人去到世界上想要的坐标。我唯一能做到的就是让机器人每次遇到障碍物时都会前进并转弯,但这都是随机的,我无法让机器人去世界上我想去的地方。 有什么建议吗?

from controller import Robot,Motor,distanceSensor,Compass
import time

robot = Robot()


timestep = int(robot.getBasictimestep())
MAX_SPEED = 12

distanciaLimite = 0.1 

leftMotor = robot.getDevice('left wheel motor')
rightMotor = robot.getDevice('right wheel motor')

sensordistancias = []
nombreSensor = [
    'ps0','ps1','ps2','ps3','ps4','ps5','ps6','ps7'
]

izq = True


compassXY = robot.getCompass('compassXY_01')
compassXY.enable(timestep)
compassZ = robot.getCompass('compassZ_01')
compassZ.enable(timestep)

for x in range(8):
    sensordistancias.append(robot.getDevice(nombreSensor[x]))
    sensordistancias[x].enable(timestep)

def foward():
   rightMotor.setVeLocity(0.7 * MAX_SPEED)
   leftMotor.setVeLocity(0.7 * MAX_SPEED)
   rightMotor.setPosition(float('inf'))
   leftMotor.setPosition(float('inf'))

def stop():
   rightMotor.setVeLocity(0)
   leftMotor.setVeLocity(0)


def turn_right():
   tiempo=0
   tiempoInicial=time.time()
   while robot.step(timestep) != -1:
       rightMotor.setVeLocity(-0.5 * MAX_SPEED)
       leftMotor.setVeLocity(0.5 * MAX_SPEED)
       rightMotor.setPosition(float('inf'))
       leftMotor.setPosition(float('inf'))
       lecturaSensor = []
       for i in range(8):
        lecturaSensor.append(sensordistancias[i].getValue())   
       obstaculo = lecturaSensor[4] < distanciaLimite or lecturaSensor[5] < distanciaLimite
       if obstaculo:
           print("asdad")
       else:
           print("no esta aqui")
           return
       tiempoFinal=time.time()
       tiempo=tiempoFinal-tiempoInicial
   return
   

def doblarIzquierda():
   tiempo=0
   tiempoInicial=time.time()
   while robot.step(timestep) != -1:
       leftMotor.setVeLocity(-0.5 * MAX_SPEED)
       rightMotor.setVeLocity(0.5 * MAX_SPEED)
       leftMotor.setPosition(float('inf'))
       rightMotor.setPosition(float('inf'))
       lecturaSensor = []
       for i in range(8):
        lecturaSensor.append(sensordistancias[i].getValue())   
       obstaculo = lecturaSensor[2] < distanciaLimite or lecturaSensor[3] < distanciaLimite
       if obstaculo:
           print()
       else:
           return
       tiempoFinal=time.time()
       tiempo=tiempoFinal-tiempoInicial
   return
 
while robot.step(timestep) != -1:
    avanzar()
    XY = compassXY.getValues()
    Z = compassZ.getValues()
    print('compas XY',XY)
    print('compas Z',Z)
    
    
    lecturaSensor = []
    for i in range(8):
        lecturaSensor.append(sensordistancias[i].getValue())
    #print(lecturaSensor)
    
    
    obstaculo = lecturaSensor[2] < distanciaLimite or lecturaSensor[3] < distanciaLimite
    #print(lecturaSensor[2]," ",distanciaLimite)
    if obstaculo:
        detener()
        doblarIzquierda()

西班牙语中有一些东西,因为我说西班牙语,如果这会引起混淆。 我正在使用 firebird6 预制的 webots 机器人。 尝试使用指南针但没有用。请帮忙

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)