예제 #1
0
 def __init__(self, port_left, port_right, safe_time = 1, safe_option = 1, wheel_d = 100, tread = 400, button_event_cb = None):
     self.left = usbcontroller.USBController(port_left,False)
     self.right = usbcontroller.USBController(port_right,False)
     self.safe_time = safe_time
     self.safe_option = safe_option
     self.curve(0)
     self.safe_setting(True)
     self.round_num = tread / wheel_d # 360度回転するのに必要な回転数
     self.button_setting(button_event_cb)
예제 #2
0
    def motor_init(self):
        parser = argparse.ArgumentParser(description='モーターに接続し、各種情報の取得')
        parser.add_argument('port', metavar='PORT', default='/dev/ttyUSB1', nargs='?',
                            help='モーターのデバイスファイル指定 (default:/dev/ttyUSB1)')
        args = parser.parse_args()
        self.dev = usbcontroller.USBController(args.port, False, baud=1000000)  # モーターのアドレス 参照 usb-simple-connection.py
        print("tsunagatta")
        self.dev.disable_action()
        self.dev.set_max_speed(utils.deg2rad(1000))
        time.sleep(2)
        self.dev.enable_action()
        self.dev.preset_position(0.0)
        self.dev.set_curve_type(1)
        self.dev.set_acc(100)
        self.dev.set_led(2, 0, 255, 255)
        self.dev.set_speed(utils.deg2rad(180))
        for m in self.modules.values():
            m.dev = self.dev
        self.sensor.dev = self.dev
        self.dev.set_max_torque(0.03)
        #self.dev.move_to_pos(utils.deg2rad(-40), (utils.deg2rad(90) / 3))
        #time.sleep(3)
        #self.dev.move_to_pos(0.01)


        #time.sleep(3)
        """self.dev.set_acc(200)
예제 #3
0
 def connect(self, port):
     if sys.platform.startswith('win'): #detects if platform is windows and uses the input port
         # !attention assumes pyserial 3.x
         self.dev = usbcontroller.USBController(port, baud=115200) #run select port if windows
         print("Connected.")
     elif sys.platform.startswith('linux') or sys.platform.startswith('cygwin'): #if platform is linux, uses default linux port for keiganmotor
         # this excludes your current terminal "/dev/tty"
         self.dev = usbcontroller.USBController("/dev/serial/by-id/usb-FTDI_FT230X_Basic_UART_DM00KIWP-if00-port0",False)
         print("Connected.")
     self.dev.enable_action()
     self.dev.set_notify_pos_arrival_settings(False, 0, 0) #avoids position read errors
     self.dev.set_led(1, 255, 255, 255)
     self.dev.enable_continual_motor_measurement()
     self.dev.enable_continual_imu_measurement()
     self.dev.set_motor_measurement_interval(2)
     self.dev.run_at_velocity(3) #runs for troubleshooting -- can see that the motor connected
     sleep(1)
     self.dev.stop_motor()
예제 #4
0
from pykeigan import usbcontroller
from pykeigan import utils

# How to use (this sample was made for Windows)
# (this sample was made for Windows)
#
# (1) Define port 'COM?' that connected to KeiganMotor (You can see by DeviceManager)
# (2) Set index to record and do taskset (selectable from 0 to 49)
# (3) Set repeat to repeat when doing taskset (0~, 0 will repeat infinitely)
# (4) Excute this file
# (5) Press 'r' to record my_taskset in KeiganMotor
# (6) Press 'd' to do taskset

# Select port connecting to KeiganMotor
port = 'COM7'
dev = usbcontroller.USBController(port)

index = 0  # index to record and do taskset
repeat = 1  # repeating number to do taskset


# Edit this function to record your taskset
# (Recorded in KeiganMotor)
def my_taskset():
    dev.set_speed(utils.rpm2rad_per_sec(5))
    dev.set_led(1, 0, 200, 0)
    dev.run_forward()
    dev.wait_queue(5000)  # wait for 5000 ms
    dev.stop_motor()

예제 #5
0
    print('Conncted to', portdev)

    return portdev


def baud_rate_setting():
    print('Select baud rate to set')
    print('--------')
    print('0: 115200')
    print('1: 230400')
    print('2: 250000')
    print('3: 460800')
    print('4: 921600')
    print('5: 1000000 (1M)')
    print('--------')
    num = int(input())
    while num < 0 or num > 5:
        print('Invalid value!')
        num = int(input())
    return num


dev = usbcontroller.USBController(
    select_port(),
    baud=current_baud)  # Set the current baudrate to communicate
dev.set_baud_rate(baud_rate_setting())  #5: 1Mbps
dev.save_all_registers()
sleep(1)
dev.reboot()
예제 #6
0
----------------------
モーター接続、各種情報の取得
----------------------
"""
##モーター回転情報callback
def on_motor_measurement_cb(measurement):
    print("\033[2;2H\033[2K", end="")
    print('measurement {} '.format(measurement), end="", flush=True)

##ログ情報callback
def on_motor_log_cb(log):
    print("\033[5;2H\033[2K", end="", flush=True)
    print('log {} '.format(log), end="", flush=True)

#接続
dev=usbcontroller.USBController(args.port,False)
dev.on_motor_measurement_value_cb=on_motor_measurement_cb
dev.on_motor_log_cb=on_motor_log_cb


"""
----------------------
モーター動作 絶対位置往復運動
----------------------
"""
is_forward=False
cnt=0
#位置を監視して反転
def direction_measurement_cb(measurement):
    on_motor_measurement_cb(measurement)
    global is_forward,cnt
예제 #7
0
import sys
import pathlib
from time import sleep

current_dir = pathlib.Path(__file__).resolve().parent
sys.path.append(str(current_dir) + '/../')

from pykeigan import usbcontroller
from pykeigan import utils
"""
----------------------
モーターを5rpmで 正転(10秒) -> 逆転(10秒) -> 停止(トルクあり) -> 停止(トルク無し)
----------------------

"""
dev = usbcontroller.USBController(
    '/dev/ttyUSB0', False)  #モーターのアドレス 参照 usb-simple-connection.py
dev.enable_action()  #安全装置。初めてモーターを動作させる場合に必ず必要。
dev.set_speed(utils.rpm2rad_per_sec(5))  #rpm -> radian/sec

dev.set_led(1, 0, 200, 0)
dev.run_forward()

sleep(10)

dev.set_led(1, 0, 0, 200)
dev.run_reverse()

sleep(10)

dev.set_led(1, 200, 0, 0)
dev.stop_motor()
예제 #8
0

##モーター回転情報callback
def on_motor_measurement_cb(measurement):
    print("\033[2;2H\033[2K", end="")
    print('measurement {} '.format(measurement), end="", flush=True)


##ログ情報callback
def on_motor_log_cb(log):
    print("\033[5;2H\033[2K", end="", flush=True)
    print('log {} '.format(log), end="", flush=True)


#接続
dev = usbcontroller.USBController('/dev/ttyUSB0', False)
dev.on_motor_measurement_value_cb = on_motor_measurement_cb
dev.on_motor_log_cb = on_motor_log_cb
"""
----------------------
モーター動作 相対移動
----------------------
"""
dev.set_led(2, 255, 255, 0)
sleep(3)
dev.enable_action()
dev.set_speed(utils.rpm2rad_per_sec(10))  #rpm-> rad/sec

dev.move_by_dist(utils.deg2rad(180), None)  #Degree-> rad
sleep(5)
dev.move_by_dist(utils.deg2rad(-180), None)
예제 #9
0
    print('speed    gain I: ',speedI)
    print('speed    gain D: ',speedD)
    print('position gain P: ',positionP)
    print('position gain I: ',positionI)
    print('position gain D: ',positionD)
    print('position PID threshold [rad]: ', threshold)
    print('position PID threshold [deg]: ', utils.rad2deg(threshold))
    print('-------')

def read_device_name(motor):
    name = motor.read_device_name()
    print('Device Name: ', name)


if __name__ == '__main__':
    dev = usbcontroller.USBController(select_port())
    read_device_name(dev)
    read_pid_settings(dev)
    try:
        while True:
            sleep(0.01)
            if msvcrt.kbhit():
                c = msvcrt.getwch()
                print(c)

                if c == 'r':
                    read_pid_settings(dev)
                elif c == 'n':
                    read_device_name(dev)
                elif c == 's':
                    dev.save_all_registers()
예제 #10
0
    if portnum in range(len(portlist)):
        portdev = portlist[portnum].device

    print('Conncted to', portdev)

    return portdev


def baud_rate_setting():
    print('Select baud rate')
    print('--------')
    print('0: 115200')
    print('1: 230400')
    print('2: 250000')
    print('3: 460800')
    print('4: 921600')
    print('5: 1000000 (1M)')
    print('--------')
    num = int(input())
    while num < 0 or num > 5:
        print('Invalid value!')
        num = int(input())
    return num


port = select_port()
baud_rate = baud_rates[baud_rate_setting()]
dev = usbcontroller.USBController(port, baud=baud_rate)
dev.enable_action()  #5: 1Mbps
dev.run_at_velocity(utils.rpm2rad_per_sec(10))
    print('imu_measurement {} '.format(measurement), end="", flush=True)

##ログ情報callback
def on_motor_log_cb(log):
    print("\033[12;2H\033[2K", end="", flush=True)
    print('log {} '.format(log), end="", flush=True)

##エラー情報callback
def on_motor_connection_error_cb(e):
    print("\033[16;2H\033[2K", end="", flush=True)
    print('error {} '.format(e), end="", flush=True)


#接続
#dev=usbcontroller.USBController('/dev/ttyUSB0',False)#モーターのアドレス 参照 usb-simple-connection.py
dev=usbcontroller.USBController(args.port,False)#モーターのアドレス 参照 usb-simple-connection.py
dev.on_motor_measurement_value_cb=on_motor_measurement_cb
dev.on_motor_imu_measurement_cb=on_motor_imu_measurement_cb
dev.on_motor_log_cb=on_motor_log_cb
dev.on_motor_connection_error_cb=on_motor_connection_error_cb

dev.enable_continual_imu_measurement()#IMUはデフォルトでOFFの為、取得する場合Onにする

#モーター動作
dev.set_led(2,255,255,0)
sleep(3)
dev.enable_action()
dev.set_speed(1.0)
dev.run_forward()
sleep(10)
dev.disable_action()
##ログ情報callback
def on_motor_log_cb(log):
    print("\033[12;2H\033[2K", end="", flush=True)
    print('log {} '.format(log), end="", flush=True)


##エラー情報callback
def on_motor_connection_error_cb(e):
    print("\033[16;2H\033[2K", end="", flush=True)
    print('error {} '.format(e), end="", flush=True)


#接続
#dev=usbcontroller.USBController('/dev/ttyUSB0',False)#モーターのアドレス 参照 usb-simple-connection.py
dev = usbcontroller.USBController(
    select_port())  #モーターのアドレス 参照 usb-simple-connection.py
dev.on_motor_measurement_value_cb = on_motor_measurement_cb
dev.on_motor_imu_measurement_cb = on_motor_imu_measurement_cb
dev.on_motor_log_cb = on_motor_log_cb
dev.on_motor_connection_error_cb = on_motor_connection_error_cb

dev.enable_continual_imu_measurement()  #IMUはデフォルトでOFFの為、取得する場合Onにする

#モーター動作
dev.set_led(2, 255, 255, 0)
sleep(3)
dev.enable_action()
dev.set_speed(1.0)
dev.run_forward()
sleep(10)
dev.disable_action()