示例#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()
示例#2
0
def findDeviceType(id, devicetype):
    global ipcon
    tmp = hal.Devices.find(id)
    if tmp != None:
        return tmp.Device
    else:
        if devicetype == 13: return BrickMaster(id, ipcon)
        elif devicetype == 14: return BrickServo(id, ipcon)
        elif devicetype == 227: return BrickletVoltageCurrent(id, ipcon)
        elif devicetype == 2105: return BrickletVoltageCurrentV2(id, ipcon)
        elif devicetype == 100: return BrickletIO16(id, ipcon)
        elif devicetype == 243: return BrickletColor(id, ipcon)
        elif devicetype == 2128: return BrickletColorV2(id, ipcon)
        elif devicetype == 26: return BrickletDualRelay(id, ipcon)
        elif devicetype == 284: return BrickletIndustrialDualRelay(id, ipcon)
        elif devicetype == 225: return BrickletIndustrialQuadRelay(id, ipcon)
        elif devicetype == 2102:
            return BrickletIndustrialQuadRelayV2(id, ipcon)
        else:
            print("Warning: DeviceType " + str(devicetype) + " not found")
            return None
#!/usr/bin/env python
# -*- coding: utf-8 -*-

HOST = "localhost"
PORT = 4223
UID = "XXYYZZ"  # Change XXYYZZ to the UID of your Servo Brick

from tinkerforge.ip_connection import IPConnection
from tinkerforge.brick_servo import BrickServo

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

    # 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
        oled.write(column[i])


def line_at_angle(startx, starty, angle, length):
    radian_angle = math.pi * angle / 180.0
    x = startx + length * math.cos(radian_angle)
    y = starty + length * math.sin(radian_angle)
    return (startx, starty, x, y)


if __name__ == "__main__":
    # Create Brick/Bricklet objects
    ipcon = IPConnection()
    oled = BrickletOLED128x64('x5U', ipcon)
    poti = BrickletRotaryPoti('8Co', ipcon)
    servo = BrickServo('6e8MF1', ipcon)

    # Connect to brickd
    ipcon.connect(HOST, PORT)

    # Configure Servo so that it rotates 180°
    servo.set_pulse_width(6, 650, 2350)
    servo.enable(6)

    # Clear display
    oled.clear_display()

    # 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")