当前位置: 首页>>代码示例>>Python>>正文


Python Driver.goStraight方法代码示例

本文整理汇总了Python中driver.Driver.goStraight方法的典型用法代码示例。如果您正苦于以下问题:Python Driver.goStraight方法的具体用法?Python Driver.goStraight怎么用?Python Driver.goStraight使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在driver.Driver的用法示例。


在下文中一共展示了Driver.goStraight方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。

示例1: __init__

# 需要导入模块: from driver import Driver [as 别名]
# 或者: from driver.Driver import goStraight [as 别名]

#.........这里部分代码省略.........
        print "=================  ACTION ", action, "================="
        print "battery:", self.robot.battery
        while not row.endOfRow:
#          sprayer( self.robot, True, True )
          for (speed, angularSpeed) in self.driver.followLineG( row.line ):
#            print "TEST %.2f" % (math.degrees(normalizeAnglePIPI(row.line.angle - self.robot.localisation.pose()[2])))
            if abs(normalizeAnglePIPI(row.line.angle - self.robot.localisation.pose()[2])) > SLOW_DOWN_ANGLE:
              speed *= 0.9
            if self.robot.laserData:
              self.robot.toDisplay = 'OK'
            else:
               self.robot.toDisplay = '--'
               speed, angularSpeed = 0.0, 0.0            
#            if detectBlockedRow and row.collisionAhead[1] < 0.25:

            blockedCamCount = 0
            if detectBlockedRow and self.robot.cameraData:
              camDat, fileName = self.robot.cameraData
              if camDat:
                blockedCamCount = int(camDat.split()[0])
                if blockedCamCount > RED_ALERT:
                  print "CAMERA BLOCKED!!", blockedCamCount

#            print  self.robot.cameraData
#            if detectBlockedRow and row.collisionAhead[2]:
            if detectBlockedRow and row.collisionAhead[3] and blockedCamCount > RED_ALERT:
#            if detectBlockedRow and blocked:
              print "---------- COLLISON -> TURN 180 -------------"
              self.robot.beep = 1
              self.driver.stop()
#              self.driver.goStraight( -0.5 )
              self.driver.turn( math.radians(90), radius = 0.12, angularSpeed=math.radians(120), withStop=False )
              self.driver.turn( math.radians(90), radius = -0.12, angularSpeed=math.radians(120) )
              self.robot.beep = 0
#              self.driver.turn( math.radians(180), radius = 0.075 )
#              self.driver.turn( math.radians(180), radius = 0.0 )
#              self.driver.turn( math.radians(20), radius = 0.37, angularSpeed=math.radians(20) )
#              self.driver.turn( math.radians(70), radius = 0.08, angularSpeed=math.radians(20) )
#              self.driver.turn( math.radians(70), radius = -0.08, angularSpeed=math.radians(20) )
#              self.driver.turn( math.radians(20), radius = -0.37, angularSpeed=math.radians(20) )
              self.robot.setSpeedPxPa( 0.0, 0.0 )
              row.reset( self.robot.localisation.pose(), offsetDeg = None ) # instead of turning shift search
            else:
#              if detectBlockedRow and (row.collisionAhead[0] < 0.5 or row.collisionAhead[1] < 0.7):
#                if self.verbose:
#                  print "!!SLOW DOWN!!"
#                speed, angularSpeed = speed/2.0, angularSpeed/2.0 # slow down
              self.robot.setSpeedPxPa( speed, angularSpeed )
            self.robot.update()
            if row.newData:
              row.newData = False
              break
#          sprayer( self.robot, False, False )

        # handle action after row termination
        self.robot.insideField = False
        self.robot.beep = 1
        self.driver.stop()
        self.robot.beep = 0
        if action == 0:
          self.driver.goStraight( 0.2 )
          prevAngle = self.robot.localisation.pose()[2]
          if not self.driver.turn( math.radians(180), timeout=7.0 ):
            self.driver.goStraight( -0.2 )
            currAngle = self.robot.localisation.pose()[2]
            print "TIMEOUT", math.degrees(normalizeAnglePIPI(math.radians(180)-currAngle+prevAngle))
            if not self.driver.turn( normalizeAnglePIPI(math.radians(180)-currAngle+prevAngle), timeout=5.0 ):
              currAngle = self.robot.localisation.pose()[2]
              print "TIMEOUT2 - GIVING UP", math.degrees(normalizeAnglePIPI(math.radians(180)-currAngle-prevAngle))            
        elif action == -1:
          self.driver.turn( math.radians(160), radius = 0.75/2.0, angularSpeed=math.radians(40) )
        elif action == 1:
          self.driver.turn( math.radians(-160), radius = 0.75/2.0, angularSpeed=math.radians(40) )
        else:
          if action < 0:
            self.driver.turn( math.radians(90), radius = self.rowWidth/2.0, angularSpeed=math.radians(40) )
          else:
            self.driver.turn( math.radians(-90), radius = self.rowWidth/2.0, angularSpeed=math.radians(40) )
#          self.driver.goStraight( (math.fabs(action)-1) * (self.rowWidth+self.rowPotsWidth)+self.rowPotsWidth )
          self.crossRows( row, math.fabs(action)-1, rowsOnLeft = (action < 0) )
          self.driver.stop()
          if action < 0:
            self.driver.turn( math.radians(90), radius = self.rowWidth/2.0, angularSpeed=math.radians(40) )
#            self.driver.turn( math.radians(90), radius = 0.0, angularSpeed=math.radians(40) )
          else:
            self.driver.turn( math.radians(-90), radius = self.rowWidth/2.0, angularSpeed=math.radians(40) )
#            self.driver.turn( math.radians(-90), radius = 0.0, angularSpeed=math.radians(40) )

        # clear flag for detection
#        row.reset( self.robot.localisation.pose() )
        row.reset( self.robot.localisation.pose(), offsetDeg=None ) # init with search for center
      self.robot.setSpeedPxPa( 0.0, 0.0 )
      self.robot.update() 
    except EmergencyStopException, e:
      print "EmergencyStopException"
    sprayer( self.robot, 0, 0 )         
    print "battery:", self.robot.battery
    self.robot.camera.requestStop()
#    self.robot.gps.requestStop()
    self.robot.laser.requestStop()
开发者ID:robotika,项目名称:eduro,代码行数:104,代码来源:fre.py

示例2: __init__

# 需要导入模块: from driver import Driver [as 别名]
# 或者: from driver.Driver import goStraight [as 别名]
class SICKRobotDay2016:
    def __init__(self, robot, code, verbose = False):
        self.random = random.Random(0).uniform 
        self.robot = robot
        self.verbose = verbose
        self.code = code
        self.robot.attachEmergencyStopButton()

        # change robot wheel calibration
        wd = 427.0 / 445.0 * 0.26/4.0 # with gear  1:4
        delta = -0.00015
        self.robot._WHEEL_DIAMETER = {SIDE_LEFT: wd+delta, SIDE_RIGHT: wd-delta}

        self.robot.attachCamera(sleep=0.5)
        self.robot.attachLaser( remission=True, pose=((0.24, -0.13, 0.08), (0,math.radians(180),0)) )
        self.robot.attachRFU620()
        
        self.driver = Driver( self.robot, maxSpeed = 0.5, maxAngularSpeed = math.radians(180) )
        self.robot.localisation = SimpleOdometry()

        self.robot.last_valid_rfid = None, None  # tag, position
        self.robot.addExtension(draw_rfu620_extension)

        self.robot.addExtension(draw_cubes_extension)

        self.robot.laser.stopOnExit = False    # for faster boot-up


    def load_cube(self):
        print "load cube (time = {:.1f}s)".format(self.robot.time - self.start_time)
        self.driver.goStraight(0.3, timeout=30)
        gripperClose(self.robot)

    def place_cube(self):
        pos = combinedPose(self.robot.localisation.pose(), (0.2, 0, 0))[:2]  # TODO check proper offset
        print "place cube at ({:.2f}, {:.2f} (time = {:.1f}))".format(pos[0], pos[1], self.robot.time - self.start_time)
        viewlog.dumpBeacon(pos, color=(255, 255, 255))
        viewlog.dumpObstacles([[pos]])
        gripperOpen(self.robot)
        self.driver.goStraight(-0.4, timeout=30)

    def game_over(self):
        print 'Game over (battery status = {}V)'.format(self.robot.battery)
        for k in xrange(10):
            self.robot.setSpeedPxPa(0.0, 0.0)
            self.robot.update()
        raise EmergencyStopException() # TODO: Introduce GameOverException as in Eurobot


    def find_cube(self, timeout):
        print "find_cube-v1"
        prev = None
        cd = CubeDetector(self.robot.laser.pose)
        startTime = self.robot.time
        while self.robot.time < startTime + timeout:
            self.robot.update()
            if prev != self.robot.laserData:
                prev = self.robot.laserData
                cubes = cd.detect_cubes_xy(self.robot.laserData, limit=4)
                if len(cubes) > 0:
                    for i, (cube_x, cube_y) in enumerate(cubes):
                        goal = combinedPose(self.robot.localisation.pose(), (cube_x, cube_y, 0))[:2]
                        viewlog.dumpBeacon(goal, color=(200, 200, 0) if i > 0 else (255, 255, 0))
                    cube_x, cube_y = cubes[0]
                    cube_y += 0.05  # hack for bended(?) laser
                    print "{:.2f}\t{:.2f}".format(cube_x, cube_y)
                    speed = 0.0

                    tolerance = 0.01
                    if cube_x > 0.5:
                        tolerance = 0.05

                    angle = math.atan2(cube_y, cube_x)
                    turnStep = math.radians(10)
                    if abs(angle) > math.radians(10):
                        turnStep = math.radians(50)

                    if cube_y > tolerance:
                        angularSpeed = turnStep
                    elif cube_y < -tolerance:
                        angularSpeed = -turnStep
                    else:
                        angularSpeed = 0
                        speed = 0.1
                        if cube_x > 0.5:
                            speed = 0.3  # move faster toward further goals
                        if cube_x < 0.30:
                            return True
                    self.robot.setSpeedPxPa(speed, angularSpeed)
                else:
                    self.robot.setSpeedPxPa(0.0, 0.0)

        print "TIMEOUT"
        return False



    def ver0( self, verbose=False ):
        # Go straight for 2 meters
        print "ver0", self.robot.battery
#.........这里部分代码省略.........
开发者ID:robotika,项目名称:eduro,代码行数:103,代码来源:sickday2016.py


注:本文中的driver.Driver.goStraight方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。