CLI completion
This commit is contained in:
parent
9d6d68efc1
commit
dfcf050761
10
tools/ugv.py
10
tools/ugv.py
@ -9,18 +9,18 @@ import time
|
|||||||
import binascii
|
import binascii
|
||||||
from base64 import b64decode, b64encode
|
from base64 import b64decode, b64encode
|
||||||
|
|
||||||
from e32 import E32
|
|
||||||
import messages_pb2 as messages
|
import messages_pb2 as messages
|
||||||
from google.protobuf.message import Message
|
from google.protobuf.message import Message
|
||||||
|
|
||||||
log = logging.getLogger("ugv")
|
log = logging.getLogger("ugv")
|
||||||
|
|
||||||
class UGVComms(E32):
|
|
||||||
|
class UGVComms:
|
||||||
MAX_WRITE_RETRY = 5
|
MAX_WRITE_RETRY = 5
|
||||||
RETRY_TIME = 3.0
|
RETRY_TIME = 3.0
|
||||||
|
|
||||||
def __init__(self, serial_port: serial.Serial):
|
def __init__(self, serial_port: serial.Serial):
|
||||||
E32.__init__(self, serial_port)
|
self.ser = serial_port
|
||||||
self.msg_acks = []
|
self.msg_acks = []
|
||||||
self.ack_cv = threading.Condition()
|
self.ack_cv = threading.Condition()
|
||||||
self.next_command_id = 1
|
self.next_command_id = 1
|
||||||
@ -118,7 +118,7 @@ class UGVComms(E32):
|
|||||||
msg = self.read_message()
|
msg = self.read_message()
|
||||||
self.process_message(msg)
|
self.process_message(msg)
|
||||||
except serial.SerialException:
|
except serial.SerialException:
|
||||||
if not self.ser.is_open or not self.is_running: # port was probably just closed
|
if not self.ser.is_open or not self.is_running: # port was probably just closed
|
||||||
return
|
return
|
||||||
log.error("serial error", exc_info=True)
|
log.error("serial error", exc_info=True)
|
||||||
return
|
return
|
||||||
@ -146,7 +146,7 @@ def main():
|
|||||||
# ugv.write_command(cmd)
|
# ugv.write_command(cmd)
|
||||||
cmd.type = messages.CMD_SET_CONFIG
|
cmd.type = messages.CMD_SET_CONFIG
|
||||||
cmd.config.angle_pid.kp = 0.10
|
cmd.config.angle_pid.kp = 0.10
|
||||||
cmd.config.angle_pid.ki = 0#.00005
|
cmd.config.angle_pid.ki = 0 # .00005
|
||||||
cmd.config.angle_pid.kd = 0.4
|
cmd.config.angle_pid.kd = 0.4
|
||||||
cmd.config.angle_pid.max_output = 0.5
|
cmd.config.angle_pid.max_output = 0.5
|
||||||
cmd.config.angle_pid.max_i_error = 15.0
|
cmd.config.angle_pid.max_i_error = 15.0
|
||||||
|
@ -55,6 +55,7 @@ class UGV_CLI:
|
|||||||
'get_status': self.get_status,
|
'get_status': self.get_status,
|
||||||
's': self.get_status,
|
's': self.get_status,
|
||||||
}
|
}
|
||||||
|
self.ugv = None
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@cli_cmd(names=["help", "h", "?"], description="Print this help message")
|
@cli_cmd(names=["help", "h", "?"], description="Print this help message")
|
||||||
@ -128,12 +129,21 @@ class UGV_CLI:
|
|||||||
log.info("last status (%.4f seconds ago): %s",
|
log.info("last status (%.4f seconds ago): %s",
|
||||||
last_status_delay, self.ugv.last_status)
|
last_status_delay, self.ugv.last_status)
|
||||||
|
|
||||||
def find_command(self, name):
|
@staticmethod
|
||||||
|
def find_command(name):
|
||||||
for cmd in cli_commands:
|
for cmd in cli_commands:
|
||||||
if name in cmd.names:
|
if name in cmd.names:
|
||||||
return cmd
|
return cmd
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def complete_command(text, state):
|
||||||
|
options = [name for cmd in cli_commands for name in cmd.names if name.startswith(text)]
|
||||||
|
if state < len(options):
|
||||||
|
return options[state]
|
||||||
|
else:
|
||||||
|
return None
|
||||||
|
|
||||||
def start(self):
|
def start(self):
|
||||||
self.is_running = True
|
self.is_running = True
|
||||||
|
|
||||||
@ -144,6 +154,10 @@ class UGV_CLI:
|
|||||||
ser = serial.serial_for_url(ser_url, baudrate=9600, parity=serial.PARITY_NONE,
|
ser = serial.serial_for_url(ser_url, baudrate=9600, parity=serial.PARITY_NONE,
|
||||||
stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS,
|
stopbits=serial.STOPBITS_ONE, bytesize=serial.EIGHTBITS,
|
||||||
timeout=0.5)
|
timeout=0.5)
|
||||||
|
|
||||||
|
readline.parse_and_bind("tab: complete")
|
||||||
|
readline.set_completer(self.complete_command)
|
||||||
|
|
||||||
self.ugv = UGVComms(ser)
|
self.ugv = UGVComms(ser)
|
||||||
self.ugv.start()
|
self.ugv.start()
|
||||||
time.sleep(0.2)
|
time.sleep(0.2)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user