29 自定义命令行功能
来自Waveshare Wiki
自定义命令行功能
为了方便对产品进行二次开发,我们在 WEB 应用中添加了一个命令行输入窗口,你可以在这个窗口里面输入命令,点击 SEND 按键后可以将这条命令发送给上位机应用,上位机应用根据你所发送的指令来执行相应的功能或调参。
我们有一共一些现成的命令,你可以参考后续的 WEB 命令行应用章节来学习那些命令,在本章节中,我们会在介绍如何实现自定义命令行功能的同时,介绍这个功能是如何实现的,这样你可以更容易理解后续的章节。
添加功能
命令行功能的例程写在产品主程序的 robot_ctrl.py 中,由 cmd_process() 函数来处理命令行指令。以下是我们默认的命令行指令处理函数,这个函数是不完整的,因为产数后面的内容是其它功能的处理,省略掉那部分不影响对函数本身的理解。
注意:下面的代码块不能在 JupyterLab 中运行,仅用于原理展示。
def cmd_process(self, args_str): global show_recv_flag, show_info_flag, info_update_time, mission_flag global track_color_iterate, track_faces_iterate, track_spd_rate, track_acc_rate # 将输入的参数字符串分割成一个列表 args args = args_str.split() if args[0] == 'base': self.info_update("CMD:" + args_str, (0,255,255), 0.36) if args[1] == '-c' or args[1] == '--cmd': base.base_json_ctrl(json.loads(args[2])) elif args[1] == '-r' or args[1] == '--recv': if args[2] == 'on': show_recv_flag = True elif args[2] == 'off': show_recv_flag = False elif args[0] == 'info': info_update_time = time.time() show_info_flag = True elif args[0] == 'audio': self.info_update("CMD:" + args_str, (0,255,255), 0.36) if args[1] == '-s' or args[1] == '--say': audio_ctrl.play_speech_thread(' '.join(args[2:])) elif args[1] == '-v' or args[1] == '--volume': audio_ctrl.set_audio_volume(args[2]) elif args[1] == '-p' or args[1] == '--play_file': audio_ctrl.play_file(args[2])
我们以 audio -s hey hi hello 为例,这条指令用于文字转语音功能,audio代表这是一个音频相关的功能,-s 或 --say 是音频的文字转语音,后面接的参数是你想让它说话的内容,发送上面的指令后机器人会说 hey hi hello。
首先当该函数接收到命令行指令后,由于命令行指令是一串字符串,所以需要先使用 args = args_str.split() 来将这个字符串转换为列表,再去判断列表中的每个值来执行相应的功能。
如果你需要扩展其它的自定义功能,只需要再增加一个 eilf args[0] == 'newCmd' 即可。