Пример #1
0
def main():
    global speed, direction, timeout, ser
    rospy.init_node('ros_servo')

    ipcon = IPConnection()  # Create IP connection
    servo = BrickServo(UID, ipcon)  # Create device object
    ipcon.connect(HOST, PORT)

    rospy.Subscriber("/cmd_vel", Twist, callback)
    r = rospy.Rate(100)  # Hz
    vel_tp = [0] * 50  # 50 sample low-pass for speed
    dir_tp = [0] * 10  # 10 sample low-pass for steering

    while not rospy.is_shutdown():
        vel_tp[len(vel_tp) - 1] = speed  #if not timeout > TIMEOUT else 0
        vel_tp[:-1] = vel_tp[1:]

        dir_tp[len(dir_tp) - 1] = direction
        dir_tp[:-1] = dir_tp[1:]

        tx_speed = (sum(vel_tp) / len(vel_tp)) * 18000
        tx_dir = (sum(dir_tp) / len(dir_tp)) * -90000

        rospy.loginfo("Speed: %f", tx_speed)
        rospy.loginfo("Steering: %f", tx_dir)

        #motorR = tx_speed + tx_dir
        #motorL= tx_speed - tx_dir

        servo.set_degree(0, -9000, 9000)

        servo.set_velocity(0, 65535)
        servo.set_position(0, tx_dir)
        servo.enable(0)

        servo.set_degree(1, -9000, 9000)
        servo.set_velocity(1, 65535)
        servo.set_position(1, tx_speed)
        servo.enable(1)

        timeout += 1
        r.sleep()
    # Configure two servos with voltage 5.5V
    # Servo 1: Connected to port 0, period of 19.5ms, pulse width of 1 to 2ms
    #          and operating angle -100 to 100°
    #
    # Servo 2: Connected to port 5, period of 20ms, pulse width of 0.95
    #          to 1.95ms and operating angle -90 to 90°
    servo.set_output_voltage(5500)

    servo.set_degree(0, -10000, 10000)
    servo.set_pulse_width(0, 1000, 2000)
    servo.set_period(0, 19500)
    servo.set_acceleration(0, 1000) # Slow acceleration
    servo.set_velocity(0, 65535) # Full speed

    servo.set_degree(5, -9000, 9000)
    servo.set_pulse_width(5, 950, 1950)
    servo.set_period(5, 20000)
    servo.set_acceleration(5, 65535) # Full acceleration
    servo.set_velocity(5, 65535) # Full speed

    servo.set_position(0, 10000) # Set to most right position
    servo.enable(0)

    servo.set_position(5, -9000) # Set to most left position
    servo.enable(5)

    raw_input("Press key to exit\n") # Use input() in Python 3
    servo.disable(0)
    servo.disable(5)
    ipcon.disconnect()
    # Configure two servos with voltage 5.5V
    # Servo 1: Connected to port 0, period of 19.5ms, pulse width of 1 to 2ms
    #          and operating angle -100 to 100°
    #
    # Servo 2: Connected to port 5, period of 20ms, pulse width of 0.95
    #          to 1.95ms and operating angle -90 to 90°
    servo.set_output_voltage(5500)

    servo.set_degree(0, -10000, 10000)
    servo.set_pulse_width(0, 1000, 2000)
    servo.set_period(0, 19500)
    servo.set_acceleration(0, 1000)  # Slow acceleration
    servo.set_velocity(0, 65535)  # Full speed

    servo.set_degree(5, -9000, 9000)
    servo.set_pulse_width(5, 950, 1950)
    servo.set_period(5, 20000)
    servo.set_acceleration(5, 65535)  # Full acceleration
    servo.set_velocity(5, 65535)  # Full speed

    servo.set_position(0, 10000)  # Set to most right position
    servo.enable(0)

    servo.set_position(5, -9000)  # Set to most left position
    servo.enable(5)

    raw_input("Press key to exit\n")  # Use input() in Python 3
    servo.disable(0)
    servo.disable(5)
    ipcon.disconnect()
Пример #4
0
        servo.set_position(servo_num, -9000)
    elif position == -9000:
        print('Position: -90°, going to 90°')
        servo.set_position(servo_num, 9000)
    else:
        print('Error') # Can only happen if another program sets position

if __name__ == "__main__":
    ipcon = IPConnection() # Create IP connection
    servo = BrickServo(UID, ipcon) # Create device object

    ipcon.connect(HOST, PORT) # Connect to brickd
    # Don't use device before ipcon is connected

    # Register position reached callback to function cb_position_reached
    servo.register_callback(servo.CALLBACK_POSITION_REACHED, cb_position_reached)

    # Enable position reached callback
    servo.enable_position_reached_callback()

    # Set velocity to 100°/s. This has to be smaller or equal to the
    # maximum velocity of the servo you are using, otherwise the position
    # reached callback will be called too early
    servo.set_velocity(0, 10000)
    servo.set_position(0, 9000)
    servo.enable(0)

    raw_input("Press key to exit\n") # Use input() in Python 3
    servo.disable(0)
    ipcon.disconnect()
    # Draw text once at beginning, the window in draw_matrix does not overwrite
    # the last line of the display
    oled.write_line(7, 5, "tinkerforge.com")

    # We just use an endless loop here, press ctrl + c to abort the script
    while True:
        # With position 110 poti is at 90°
        angle = poti.get_position() * 90 // 110
        if angle > 90:
            angle = 90
        elif angle < -90:
            angle = -90

        # Set servo position according to angle
        servo.set_position(6, angle * 100)

        # Create angle text
        angle_str = str(angle) + u'°'
        if angle >= 0:
            angle_str = ' ' + angle_str

        # Draw servo position line
        img = Image.new('1', (128, 64), 0)
        draw = ImageDraw.Draw(img)
        draw.line(line_at_angle(32, 32, angle - 90, 32), 1, 6)

        # Draw bar graph
        draw.line((90, 4, 90 + angle * 30 // 90, 4), 1, 6)

        # Draw angle text
    # Draw text once at beginning, the window in draw_matrix does not overwrite
    # the last line of the display
    oled.write_line(7, 5, "tinkerforge.com")

    # We just use an endless loop here, press ctrl + c to abort the script
    while True:
        # With position 110 poti is at 90°
        angle = poti.get_position()*90//110
        if angle > 90:
            angle = 90
        elif angle < -90:
            angle = -90

        # Set servo position according to angle
        servo.set_position(6, angle*100)

        # Create angle text
        angle_str = str(angle) + u'°'
        if angle >= 0:
            angle_str = ' ' + angle_str

        # Draw servo position line
        img = Image.new('1', (128, 64), 0)
        draw = ImageDraw.Draw(img)
        draw.line(line_at_angle(32, 32, angle - 90, 32), 1, 6)

        # Draw bar graph
        draw.line((90, 4, 90 + angle*30//90, 4), 1, 6)

        # Draw angle text