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' 即可。