From 52c3517c844d18103dbde2505cc304679a608931 Mon Sep 17 00:00:00 2001 From: Wetmelon Date: Tue, 22 Aug 2017 02:34:31 -0400 Subject: [PATCH 1/7] Slightly improve USB message handling, add quit command --- tools/test_bulk.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tools/test_bulk.py b/tools/test_bulk.py index 6b348f43..ae81ac03 100644 --- a/tools/test_bulk.py +++ b/tools/test_bulk.py @@ -38,12 +38,17 @@ def main(args): time.sleep(0.1) try: command = input("Enter ODrive command:\n") - dev.send(command) + if 'q' in command: + running = False + sys.exit() + else: + dev.send(command) except: running = False def recieve_thread(dev): global ready + while running: time.sleep(0.1) try: From 28acbedba3e6c3e52be45754ade81612268573fe Mon Sep 17 00:00:00 2001 From: Wetmelon Date: Tue, 22 Aug 2017 02:35:34 -0400 Subject: [PATCH 2/7] Add timeout to USB message reads in python script --- tools/odrive/usbbulk.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tools/odrive/usbbulk.py b/tools/odrive/usbbulk.py index e2c2d66c..1e430be1 100644 --- a/tools/odrive/usbbulk.py +++ b/tools/odrive/usbbulk.py @@ -110,7 +110,7 @@ class ODriveBulkDevice(): def recieve(self, bufferLen): try: - ret = self.epr.read(bufferLen, 0) + ret = self.epr.read(bufferLen, 100) return ret except usb.core.USBError: #return -1 @@ -120,4 +120,4 @@ class ODriveBulkDevice(): return 64 def recieve_max(self): - return 64 + return 256 From 1596c0acc7ccf4927b995dcf83f090937e5cb505 Mon Sep 17 00:00:00 2001 From: Unknown Date: Tue, 19 Sep 2017 21:38:50 -0400 Subject: [PATCH 3/7] Revert changing receive_max val --- tools/odrive/usbbulk.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/odrive/usbbulk.py b/tools/odrive/usbbulk.py index 1e430be1..21898ac5 100644 --- a/tools/odrive/usbbulk.py +++ b/tools/odrive/usbbulk.py @@ -120,4 +120,4 @@ class ODriveBulkDevice(): return 64 def recieve_max(self): - return 256 + return 64 From 47cd3e2a7eadfb3bfba93566d87b87b589f11b5b Mon Sep 17 00:00:00 2001 From: Unknown Date: Tue, 19 Sep 2017 21:42:08 -0400 Subject: [PATCH 4/7] Correct spelling of "receive" --- tools/odrive/usbbulk.py | 4 ++-- tools/test_bulk.py | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/tools/odrive/usbbulk.py b/tools/odrive/usbbulk.py index 21898ac5..cdda7641 100644 --- a/tools/odrive/usbbulk.py +++ b/tools/odrive/usbbulk.py @@ -108,7 +108,7 @@ class ODriveBulkDevice(): #return -1 raise - def recieve(self, bufferLen): + def receive(self, bufferLen): try: ret = self.epr.read(bufferLen, 100) return ret @@ -119,5 +119,5 @@ class ODriveBulkDevice(): def send_max(self): return 64 - def recieve_max(self): + def receive_max(self): return 64 diff --git a/tools/test_bulk.py b/tools/test_bulk.py index ae81ac03..8a6d83ec 100644 --- a/tools/test_bulk.py +++ b/tools/test_bulk.py @@ -32,7 +32,7 @@ def main(args): print (dev.info()) print (dev.init()) # thread - thread = threading.Thread(target=recieve_thread, args=[dev]) + thread = threading.Thread(target=receive_thread, args=[dev]) thread.start() while running: time.sleep(0.1) @@ -46,13 +46,13 @@ def main(args): except: running = False -def recieve_thread(dev): +def receive_thread(dev): global ready while running: time.sleep(0.1) try: - message = dev.recieve(dev.recieve_max()) + message = dev.receive(dev.receive_max()) message_ascii = bytes(message).decode('ascii') print(message_ascii, end='') if "ODrive Firmware" in message_ascii: From b097f589f22775ef74699b6720088503cdd90e33 Mon Sep 17 00:00:00 2001 From: Unknown Date: Tue, 19 Sep 2017 21:58:18 -0400 Subject: [PATCH 5/7] Add "Quit" command to script header --- tools/test_bulk.py | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/test_bulk.py b/tools/test_bulk.py index 8a6d83ec..d48d4b98 100644 --- a/tools/test_bulk.py +++ b/tools/test_bulk.py @@ -26,6 +26,7 @@ def main(args): print("\tPOSITION_CONTROL:\n\t\tp MOTOR_NUMBER POSITION VELOCITY CURRENT") print("\tVELOCITY_CONTROL:\n\t\tv MOTOR_NUMBER VELOCITY CURRENT") print("\tCURRENT_CONTROL:\n\t\tc MOTOR_NUMBER CURRENT") + print("\tQuit Python Script:\n\t\tq") print("---------------------------------------------------------------------") # query device dev = usbbulk.poll_odrive_bulk_device(printer=print) From 49cfc582fab5053c739cde51c6ab103887b4c03c Mon Sep 17 00:00:00 2001 From: Unknown Date: Tue, 19 Sep 2017 22:08:10 -0400 Subject: [PATCH 6/7] ODrive responds w/ motor # to indicate ctrl msg received --- MotorControl/low_level.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/MotorControl/low_level.c b/MotorControl/low_level.c index 83f284f6..2fa994dd 100755 --- a/MotorControl/low_level.c +++ b/MotorControl/low_level.c @@ -422,6 +422,7 @@ void motor_parse_cmd(uint8_t* buffer, int len) { int numscan = sscanf((const char*)buffer, "p %u %f %f %f", &motor_number, &pos_setpoint, &vel_feed_forward, ¤t_feed_forward); if (numscan == 4 && motor_number < num_motors) { set_pos_setpoint(&motors[motor_number], pos_setpoint, vel_feed_forward, current_feed_forward); + printf("M%d\n", motor_number); } } else if (buffer[0] == 'v') { // velocity control @@ -430,6 +431,7 @@ void motor_parse_cmd(uint8_t* buffer, int len) { int numscan = sscanf((const char*)buffer, "v %u %f %f", &motor_number, &vel_feed_forward, ¤t_feed_forward); if (numscan == 3 && motor_number < num_motors) { set_vel_setpoint(&motors[motor_number], vel_feed_forward, current_feed_forward); + printf("M%d\n", motor_number); } } else if (buffer[0] == 'c') { // current control @@ -438,6 +440,7 @@ void motor_parse_cmd(uint8_t* buffer, int len) { int numscan = sscanf((const char*)buffer, "c %u %f", &motor_number, ¤t_feed_forward); if (numscan == 2 && motor_number < num_motors) { set_current_setpoint(&motors[motor_number], current_feed_forward); + printf("M%d\n", motor_number); } } else if (buffer[0] == 'g') { // GET // g <0:float,1:int,2:bool,3:uint16> index From a0a6be6c4d2cacc86f819b97a0426df0005c13da Mon Sep 17 00:00:00 2001 From: Unknown Date: Tue, 19 Sep 2017 22:08:10 -0400 Subject: [PATCH 7/7] Revert "ODrive responds w/ motor # to indicate ctrl msg received" This reverts commit 49cfc582fab5053c739cde51c6ab103887b4c03c. --- MotorControl/low_level.c | 3 --- 1 file changed, 3 deletions(-) diff --git a/MotorControl/low_level.c b/MotorControl/low_level.c index 2fa994dd..83f284f6 100755 --- a/MotorControl/low_level.c +++ b/MotorControl/low_level.c @@ -422,7 +422,6 @@ void motor_parse_cmd(uint8_t* buffer, int len) { int numscan = sscanf((const char*)buffer, "p %u %f %f %f", &motor_number, &pos_setpoint, &vel_feed_forward, ¤t_feed_forward); if (numscan == 4 && motor_number < num_motors) { set_pos_setpoint(&motors[motor_number], pos_setpoint, vel_feed_forward, current_feed_forward); - printf("M%d\n", motor_number); } } else if (buffer[0] == 'v') { // velocity control @@ -431,7 +430,6 @@ void motor_parse_cmd(uint8_t* buffer, int len) { int numscan = sscanf((const char*)buffer, "v %u %f %f", &motor_number, &vel_feed_forward, ¤t_feed_forward); if (numscan == 3 && motor_number < num_motors) { set_vel_setpoint(&motors[motor_number], vel_feed_forward, current_feed_forward); - printf("M%d\n", motor_number); } } else if (buffer[0] == 'c') { // current control @@ -440,7 +438,6 @@ void motor_parse_cmd(uint8_t* buffer, int len) { int numscan = sscanf((const char*)buffer, "c %u %f", &motor_number, ¤t_feed_forward); if (numscan == 2 && motor_number < num_motors) { set_current_setpoint(&motors[motor_number], current_feed_forward); - printf("M%d\n", motor_number); } } else if (buffer[0] == 'g') { // GET // g <0:float,1:int,2:bool,3:uint16> index