技能创作坊
Last updated
Last updated
下载完成压缩文件(.zip)后,请对其解压缩后再使用。
Windows用户,请不要将 UI.exe 移动到其他文件目录。
打开桌面应用程序后,点击“技能创作坊”按钮,即可打开技能创作界面。
界面分为“关节控制器”,“状态开关”,“预设姿态”,“技能编辑器”四个区域:
在使用桌面应用程序前,请使用电池给机器人正常上电。桌面应用程序启动后,会自动检测电脑连接的串口(“状态开关”区域从左数第一个按钮中显示“检测中” ),使用串口连接机器人时,请先将USB上载器接到机器人主板上,再使用数据线将USB上载器连接到电脑的USB接口。此时桌面应用程序给串口发送一个信号,如果串口所连设备正在运行OpenCat机器人程序,收到这个信号后,就会应答。如果二者匹配,桌面应用程序就会自动连接到该串口(此按钮中文字变为“已连接” )。当串口连接成功后,如果您需要断开串口连接,您可以通过点击“此按钮来断开串口连接(按钮中文字变为“连接” )。
在“预设姿态区域中, 为方便用户创作动作行为设计了9个简单的动作姿态按钮(比如“站立”,“蹲坐”,”休息“……)。在将“技能编辑器”区动作帧列表中任意动作帧激活为当前动作帧后,您可以通过点击这些姿态按钮将动作帧内容直接设置为预设姿态。比如您可以将某个预设姿态作为您创作动作的起始点(“技能编辑器”区中编号为0的第一帧动作)。点击这些姿态按钮后,可以看到“关节控制器”区中每个关节舵机序号下对应的滑块会滑动到相应的角度值。
在”技能编辑器“区域中可以看到一个类似动画帧一样的结构——动作帧列表,表中一行代表一个动作帧。
如上图(技能创作界面)所示。
在添加新的动作帧后,有以下四种方式对该帧动作(当前动作帧)内容进行编辑:
通过按下鼠标左键并拖动“关节控制器”区域中的滑块来调节机器人的身体姿态
界面中左侧“关节控制器”区域中“俯仰”、“横滚”、“脊向”、“高度”滑块用来调节机器人身体整体的姿态,每个关节舵机序号下对应的滑块用来调节对应关节的旋转角度。通过按下鼠标左键并拖动这些滑块可以修改当前动作帧内容(拖动滑块时,可以看到机器人会实时做出相应的姿势动作)。为了提高调节舵机的效率,我们在“关节控制器”区域每个关节舵机序号下还设计了两个联动按钮(“+” 和 “-”),用来实现多个关节同时联动的效果。在程序启动后的初始状态下,所有联动按钮呈现凸起状态,表示未被选中;单击联动按钮后,按钮呈现凹陷状态,表示此关节已被选中;再次单击已被选中的联动按钮,按钮呈现凸起状态,表示此关节未被选中,即取消联动。当某个关节舵机的“+”联动按钮被选中时,用鼠标左键按下并拖动其他关节舵机的滑块,该关节舵机会随之同时同向转动;当某个关节舵机的“-”联动按钮被选中时,用鼠标左键按下并拖动其他关节舵机的滑块,该关节舵机会随之同时反向转动。当然对于同一个关节舵机, “+” / “-” 联动按钮只能选择其一。如果想取消所有的已选中联动关节,可以直接点击“关节控制器”区域中央的“取消所有联动”按钮。“关节控制器”区域中有些滑块导轨背景色为米黄色,表示该关节舵机暂不支持,因此对应滑块是不可调节的。
通过点击“预设姿态”区域中的各种动作按钮
如果需要将当前帧的动作行为按机器人左右对称的方式,左右两边关节动作进行互换,可以点击“技能编辑器”区域中镜像按钮(>|<),可以看到机器人会实时做出相应的动作,同时动作帧序号后面的 “ = ” 按钮中的符号变为 “!”, 表示当动作帧的内容已被修改,但未保存。
修改动作帧中的其它参数(比如速度、延时……),这部分内容将在进阶操作详细介绍。
注意:修改完成当前动作帧后,如果 “ = ” 按钮中的符号变为“!”,记得点击此按钮(“!”)保存该动作帧内容。
编辑完动作帧列表中的动作,可以通过点击”技能编辑器“区域中的“播放”按钮查看动作帧列表中多个连续动作帧的运动效果。点击“播放”按钮后,机器人会简单复现一遍动作帧列表中从当前动作帧开始往后的所有动作(动作不做循环,而且所有动作帧只是1倍速运动)。如果当前动作帧是最后一个动作帧,那么点击“播放”按钮后,就会从动作帧列表的第一帧动作开始复现一遍动作帧列表中所有动作。在播放过程中,按钮中的文字会变为“停止”,点击“停止”后,可以使机器人在做完动作帧列表中的某个动作帧后暂停运动,同时按钮中的文字会恢复为“播放”。再次点击“播放”后,机器人会继续执行后续的动作帧。
如果删除的动作帧为当前动作帧,删除后,之前紧挨在所删动作帧上方的一个动作帧自动激活为当前动作帧
如果删除的动作帧不是当前动作帧,删除后,当前动作帧内容保持不变(如果当前动作帧之前在删除的动作帧下方,删除动作帧后,只是当前动作帧的序号会自动减1)
对动作帧列表中动作调整好后,点击“技能编辑器”区域中“导出”按钮,可以将动作帧列表中从当前动作帧开始往后的动作一起导出。如果当前动作帧是最后一帧动作时,导出的是动作帧列表中所有动作帧。
点击“导出”按钮后,会弹出一个*.md文件另存窗口, 您可以给创作好的动作行为命名并点击“保存”按钮将其保存为Markdown文本文件;即使您点击“取消”按钮,不保存动作技能文件,您也可以看到机器人会实时按照设计好的动作(按照真实的循环设置,运动速度)做出相应的技能动作。
在导出动作行为时,如果想将动作帧列表中的所有动作按照镜像(动作帧列表中每一帧动作都将按机器人左右对称的方式,左右两边关节动作进行互换)一起导出,可以先点击“镜像导出”按钮(选中后按钮呈现凹陷状态 ),再点击“导出”按钮。如果想取消镜像导出,可以再次点击已选中的“镜像导出”按钮(取消后按钮呈现凸起状态 )。
导出动作技能后,可以通过以下几种方式来调用:
技能编辑器导出的技能存储在EEPROM中。 它可以在关闭电源并重新启动后保留,但会被新的导出技能覆盖。
从版本V1.1.3开始,导出技能时,桌面应用程序会自动将其备份到 /Users/{用户名}/.config/Petoi/SkillLibrary/目录中。 请注意:.config 是一个隐藏目录,但可以在命令行界面中或通过特定的视图设置进行访问。 这样,您可以轻松地在Mind+中编写程序时调用多个导出技能。
技能创作章节重点介绍代码和数据结构,以便您可以将任意数量的新技能集成到源代码中。 导出的文件(.txt或.md)内容中的技能数据数组可以复制粘贴到Instinct***.h文件中,作为技能数组使用。
将技能导出为手机App中的自定义按钮。 这样即使您创造了多个技能,它们都永久性的保存到你的手机App中。
点击”技能编辑器“区域中“导入”按钮后,会弹出一个带有文本编辑功能的对话框,如下图所示:
导入动作帧时,有以下两种方式:
点击对话框中的“打开文件”按钮,通过选取之前导出保存的文本文件来导入动作行为:选中动作文件,点击“打开”后,对话框中的文本编辑区自动显示动作文件中的内容,如下图所示:
如果你了解动作数组的结构和数值含义,可以在文本编辑区域修改数组中数值。
按照文本编辑区域中的提示信息,先点击对话框中的“清空”按钮,再从Instinct***.h (***代表Bittle或者Nybble)复制技能数组后, 再粘贴到文本编辑区域中。
注意:复制时至少要保留数组的大括号!
确认无误后,点击对话框中的“确认”按钮即可导入动作。如果数组格式有误(比如数组中缺失了一些数值,或者表示循环次数的值不正确等),点击对话框中的“确认”按钮后,程序会弹出一个“格式有误”消息提示框,提示用户更正文本编辑区域中动作数组内容。
导入成功后,机器人会自动简单复现动作帧列表中的第一帧动作。
点击对话框中的“取消”按钮,即取消当前导入操作。
Github中的SkillLibrary文件夹是OpenCat 机器人的新技能的集合,可以供您参考,使用(下载后,使用导入功能可以将单个技能保存到机器人的内存中,再通过使用播放功能或导出功能查看具体效果)。
同时欢迎您通过向此文件夹发送合并请求来分享您的新技能。
点击”技能编辑器“区域中“重置”按钮后,会清除掉动作帧列表中所有的动作帧,并自动添加一个预设姿态是zero的动作帧,并将其激活为当前动作帧(动作帧列表回到程序启动后的初始状态)。
如果您通过按下鼠标左键并拖动“关节控制器”区域中的滑块来调节修改动作帧列表中某一帧动作的某些关节角度值后,在动作帧列表中,点击“!”按钮保存此帧动作时,为保持动作的稳定、连贯性,程序会自动同步修改并保存此帧动作之后的所有帧中相同关节的角度值(前提是:此帧动作之后的动作帧中相同关节的角度值之前未曾被修改过)。
您也可以在循环次数文本框中输入-1,这样所选取的循环动作帧就会一直不断循环下去,除非您按下机器人主板上的复位键。
1,2,4,8,12,16,32,48,最快
注意:
您也可以在速度选项框中输入 0~125(0表示最大运行速度)范围内的任意整数值来自定义运行速度。
点击”技能编辑器“区域中的“播放”按钮,看不到动作的真实运行速度效果;只有点击“导出”按钮后,才可以看到真实运行速度效果。
长时间以最快的速度运动会对舵机造成损坏,所以一般情况下建议不要设置为“最快”。
在“状态开关”区域中“陀螺仪”按钮处于开启状态(字体颜色为绿色)时,调节动作帧中的关节角度值或者动作帧的运行速度后,播放查看调试效果,或者导出动作行为, 机器人会实时试图保持自身身体平衡,因此可能会看到机器人在做预设动作(尤其是运行比较剧烈的动作)时,身体会来回晃动,甚至会发生身体倾翻,这时机器人自动会做复原的动作,可能会打乱您原来的操作步骤。因此建议您在设计动作时点击“陀螺仪”按钮,关闭陀螺仪(字体颜色为红色), 机器人就不会实时做平衡反馈动作了。当需要开启陀螺仪时,再次点击“陀螺仪”按钮即可。
有17个预设值供您选择: 0,50,100,200,300,400,500,600,700,800,900,1000,2000,3000,4000,5000,6000
当然您也可以在延时文本框中手动输入 0~6000范围内的任意整数值,单位是:毫秒(ms)。
None 表示无触发轴,解发角条件设置
Pitch 表示正俯仰,机器人身体向前俯下方向旋转
-Pitch 表示负俯仰,机器人身体向后仰起方向旋转
Roll 表示正横滚,机器人身体向自身左侧翻滚
-Roll 表示负横滚,机器人身体向自身右侧翻滚
触发角设置范围是:-125 ~ 125 之间的整数值。
当动作帧中设置了具体的触发轴,触发角时,只有当机器人在完成此帧关节动作后,并按照预设的身体旋转方向旋转越过触发角时,才会触发下一帧动作。如果此动作帧还设置了延时时长,那么机器人在运行此动作帧时,不但要满足触发轴,触发角设置的触发条件,还要达到延时设置时长,才会触发执行下一帧动作。
当创作与机器人身体旋转相关的动作行为(比如后空翻,做单杠运动等)时,尤其是需要在机器人身体转到某个角度时发力,结合触发轴、触发角合理设置,效果可能会更好些。因为在运动过程中,我们可以通过陀螺仪来实时监测机器人身体旋转角度,这样就可以使机器人做到当身体旋转到最理想的角度时来触发关节舵机做动作,从而更高效地做动能势能转换。
如果想在动作帧列表的第一帧动作之前插入动作帧列表中的某帧动作,操作会稍微复杂一些:首先将第一帧动作激活为当前动作帧,然后点击第一个动作帧中的“添加”按钮, 这样就在第一个动作帧下方新增一个与该动作帧内容相同的动作帧,然后再将想要插入的动作帧激活为当前动作帧, 然后再次点击第一个动作帧中的“添加”按钮,这样就在第一个动作帧下方插入了想要插入的动作帧,最后点击第一个动作帧中的“删除”按钮,将第一个动作帧删除。
在导出动作帧前,选择“技能编辑器”区域中的“行为”、“步态”选项为 “行为”,点击“导出”按钮后,程序会自动在这些动作帧之间插值,使机器人动作看上去会更加平缓一些,并且所有动作帧只执行一轮;选择“步态”选项 ,点击“导出”按钮后,机器人会不停地循环执行所有帧,并且每帧动作都会以最快速度运行,动作帧之间不做插值,不会加平滑处理。因此建议初学者尽量使用“行为”模式开发新动作技能。
在导入动作帧后,程序会按照所导入的动作数组格式,自动识别并变更行为、步态选项。机器人会自动简单复现动作帧列表中的第一帧动作。
有时桌面应用程序会进入一种类似死机的状态,可能因为程序没有收到命令执行完毕的回馈信息。这时最好不要关掉程序(因为当动作帧列表中已编辑了很多动作帧,而且如果没有进行导出保存操作,直接关掉程序,再次打开程序后,之前编辑的动作帧程序是无法自动恢复的),这时可以直接按下机器人主板上的复位键,如果程序还是没反应,你可以再点一下预设姿态区域一个动作姿态按钮。当桌面应用程序捕捉到命令执行完毕的回馈信息后,就会自动跳出循环等待回馈状态,也就可以接着正常运行了。
在设计动作行为的过程中,有时可能你想大致比划一下关节舵机接下来会运动到什么位置比较合适。一般情况下,“状态开关”区域中的“舵机”开关按钮是处于开启状态(字体颜色为绿色)的,这时所有关节舵机在执行完一个动作帧之后,是处于锁死状态的,不能用手直接掰动(否则会损坏舵机),遇到这种情况,您可以点击“舵机”开关按钮将其改为关闭状态(字体颜色为红色),这时所有关节舵机就会卸力,您就可以任意掰动机器人所有运动关节了。再次“舵机”开关按钮,就会将将其改为开启状态,所有关节舵机就会再次锁死。
“状态开关”区域中的“随机行为”按钮, 是用来开启或关闭机器人在开机状态下是否做随机动作的状态开关。只有在上传了随机模式的程序固件后,此按钮才能有效控制机器人是否做随机动作。这个功能在设计动作时用处不大,建议在上传了随机模式的程序固件的情况下,点击此按钮,关闭“随机行为”(字体颜色为红色)。
如果您在电脑端拔掉一个USB串口(或者在在蓝牙设置界面选择断开此蓝牙模块), 这时串口下拉列表也会随之实时更新(减少对应的串口名称)。
如果您想让桌面应用程序停止检测串口连接,可以点击“已连接”按钮(按钮中文字变为“连接” ),就会断开所有的串口连接。再次点击“连接”按钮,将恢复串口实时检测功能。
您可以修改OpenCat/pyUI/中的技能创作坊的源代码SkillComposer.py来进行二次开发。
可以通过点击每个动作帧中的“添加”按钮( v )或“删除”按钮( < )来增减动作帧从而形成完整连贯的动作行为。
动作帧序号()后面的 “ = ” 按钮()的主要功能是:通过点击此按钮可以把所在行的动作帧激活为当前动作帧(当前动作帧的 “ = ” 按钮呈现凸起状态, 且明显大于其它动作帧中的此按钮),此时就可以对该动作帧的内容进行编辑。按钮中显示 “=” 表示当前动作帧为已保存好的动作;当此动作帧的内容被修改时(比如修改了某个关节舵机的角度值,调整了机器人的身体姿态等)此按钮中的符号会变为“!”。对当前动作帧修改完成后,记得再次点击此按钮以保存当前动作帧内容(此时按钮中的符号会再次变为“=” )。
点击动作帧列表中某个动作帧中最后一个按钮(“添加”按钮 v )后,就会在该动作帧的下方(表示做完该动作之后紧接着要做的动作)新增一个与当前动作帧内容完全相同的动作帧,并且自动将新增动作帧激活为当前动作帧(注意新增动作帧的内容是与当前动作帧内容相同,并不一定与“添加”按钮所在的动作帧内容相同,除非“添加”按钮所在的动作帧即为当前动作帧)。例如在程序初始状态:动作帧列表中只有一个动作帧(只有一行),且为当前动作帧。点击该动作帧中的“添加”按钮后,会在该动作帧下方新增一个与该动作帧内容相同的动作帧,并且自动将新增的动作帧激活为当前动作帧。
点击动作帧列表中某个动作帧中的“删除”按钮(< )后,可以删除该帧动作。删除后,之前在该动作帧下方的所有动作帧依次上移(动作帧序号自动减1),紧接在所删动作帧上方的动作帧下面。
如果您需要动作帧列表中某些连续动作帧多次循环运行,可以先在动作帧列表上方的文本框( 在标签 “设置” 的左侧)中输入循环次数,然后再用鼠标左键依次选中想要实现循环运动的连续动作帧首尾两帧的序号(选中后序号按钮呈现凹陷状态),如下图所示:
在动作帧列表中,您可以修改每一帧动作的运行速度(),有以下9种选项供您选择(按数值大小依次调快运行速度):
动作帧列表中,每个动作帧中的延时选项()表示:做完此帧动作后,机器人延时多长时间再做下一帧动作。
动作帧中的触发轴()是用来设置机器人触发下一帧动作时的身体旋转方向,有以下5个设置选项:
触发角()参考极坐标系角度定义,如上图所示,身体水平时,极坐标轴角度为 0 度,如果极坐标轴逆时针旋转,角度为正值且逐渐增大。
当动作帧列表中的动作帧数量很多时,可以使用“标记”文本框()来给每个动作帧命名,方便更直观的理解动作帧所表示的具体动作。
您可以在动作帧列表中任意位置插入动作帧列表中的某帧动作。具体方法是:首先将要插入的动作帧激活为当前动作帧(通过点击“=”按钮 ),然后点击插入位置的上一个动作帧中的“添加”按钮(v )即可。
桌面应用程序支持多个机器人通过各自串口(甚至可以通过蓝牙通讯模块)进行连接,实现多机同时操控。这个操作的要点就是:一定要在机器人正常上电后,先把USB上载器接到机器人主板上,再使用数据线将之连接到电脑的USB接口(使用蓝牙通讯模块时,先把蓝牙模块插到机器人主板上,在电脑端开启蓝牙功能,在蓝牙设置界面完成与蓝牙模块配对,并选择连接此蓝牙模块),因为这时程序会自动检测到有新的串口连接,当有多个串口连接成功后,在“状态开关”区域中串口选项按钮变为显示“全部”(),点击此按钮可以打开下拉列表查看此时连接成功的所有串口 。这样在操控机器人时,所有机器人都会实时同步动作。当然您也可以在串口下拉列表中选择其中任意一个串口进行连接,这时就可以单独只控制这个串口对应的机器人做动作。
如果拔掉所有USB串口(断开所有蓝牙模块),串口选项按钮中显示“无”,左侧按钮显示“检测中”(),说明程序仍在自动检测有无串口连接,当使用数据线将之前的USB上载器重新连接到电脑的USB接口时,串口选项按钮左侧按钮显示“已连接”(),串口选项按钮中显示对应串口名称(单独只连接一个机器人时,显示串口名称,连接多个时,显示“全部”)。