RoArm-M2-S 步骤录制和重现

步骤录制和重现

想让机械臂实现步骤的录制和重现,可以通过对存储在ESP32的Flash文件系统中格式为.mission的任务文件进行操作来实现。在任务文件中,可以存储不同的JSON指令,来实现JSON指令批量化地录制和重现。

本章的JSON指令用于操作存储在ESP32 FLASH中的任务文件,包括新建任务文件、读取文件内容、编辑任务文件内容等。可以实现机械臂多功能自动化操作。

注意:本章与RoArm-M2-S_FLASHA文件系统操作的区别在于,本章仅用来对任务文件进行操作,而FLASH文件系统操作可以对所有的文件进行操作。


新建任务文件

{"T":220,"name":"mission_a","intro":"test mission created in flash."}
  • 220:这条指令为CMD_CREATE_MISSION,用来新建一个任务文件。
  • name:要新建的任务文件的名称。
  • intro:关于该任务文件的简要介绍。

注意:有关任务文件的操作大部分基于FLASH文件系统操作的函数封装而来,因此在本章节中输入的文件名都不需要格外输入带“.mission”文件后缀的名称。


读取任务文件的内容

{"T":221,"name":"mission_a"}
  • 221:这条指令为CMD_MISSION_CONTENT,用来读取任务文件的具体内容。
  • name:要读取的任务文件的名称。

读取到的任务文件为mission_a.mission,返回值如下:

{"T":221,"name":"mission_a"}

---=== File Content ===---
reading file: [mission_a] starts:

{"name":"mission_a","intro":"test mission created in flash."}
[StepNum: 1 ] - {"T":104,"x":235,"y":0,"z":234,"t":3.14,"spd":0.25}
[StepNum: 2 ] - {"T":104,"x":104.3172406,"y":-112.6415887,"z":65.13450799,"t":2.448233337,"spd":0.25}
[StepNum: 3 ] - {"T":114,"led":155}
[StepNum: 4 ] - {"T":104,"x":-163.7763876,"y":-138.2353466,"z":105.0922663,"t":2.466641107,"spd":0.5}
[StepNum: 5 ] - {"T":114,"led":0}
[StepNum: 6 ] - {"T":114,"led":255}
[StepNum: 7 ] - {"T":104,"x":156.428798,"y":40.20501586,"z":76.68339473,"t":3.052621768,"spd":0.25}
[StepNum: 8 ] - {"T":111,"cmd":3000}
[StepNum: 9 ] - {"T":114,"led":0}
[StepNum: 10 ] - {"T":1,"mode":1}
^^^ ^^^ ^^^ reading file: mission_a.mission ends. ^^^ ^^^ ^^^

注意:任务文件的第一行内容为任务文件的名称和简要介绍,从第二行起才是需要执行的第一步JSON指令,上述读取到的内容会标注出来每个步骤的序号。


实际该任务文件案例的内容如下:

{"name":"mission_a","intro":"test mission created in flash."}
{"T":104,"x":235,"y":0,"z":234,"t":3.14,"spd":0.25}
{"T":104,"x":104.3172406,"y":-112.6415887,"z":65.13450799,"t":2.448233337,"spd":0.25}
{"T":114,"led":155}
{"T":104,"x":-163.7763876,"y":-138.2353466,"z":105.0922663,"t":2.466641107,"spd":0.5}
{"T":114,"led":0}
{"T":114,"led":255}
{"T":104,"x":156.428798,"y":40.20501586,"z":76.68339473,"t":3.052621768,"spd":0.25}
{"T":111,"cmd":3000}
{"T":114,"led":0}
{"T":1,"mode":1}


编辑任务文件

任务文件末尾新增JSON指令

{"T":222,"name":"mission_a","step":"{\"T\":104,\"x\":235,\"y\":0,\"z\":234,\"t\":3.14,\"spd\":0.25}"}
  • 222:这条指令为CMD_APPEND_STEP_JSON,使用该指令会直接在指定任务文件的末尾添加新的JSON指令。
  • name:要编辑的任务文件的名称。
  • step:要添加的新JSON指令。上方例子添加的指令为{"T":104,"x":235,"y":0,"z":234,"t":3.14,"spd":0.25}。注意添加的新JSON指令中的每个 " 引用符号前面需要添加 \ 反斜杠符号,具体添加格式请参照上方例子。

输入该指令后,会输出任务文件的原始内容和增加了JSON指令后的新文件内容。


文件末尾新增运动至当前位置的JSON指令

{"T":223,"name":"mission_a","spd":0.25}
  • 223:这条指令为CMD_APPEND_STEP_FB,使用该指令,机械臂会将当前机械臂所处的位置当作目标位置来生成一条运动至当前机械臂所处位置的JSON指令,并且将该指令添加至任务文件的末尾。
  • name:要编辑的任务文件的名称。
  • spd:设置机械臂运动到该目标位置的速度。

输入该指令后,机械臂会输出当前机械臂所处位置的信息,且输出任务文件的原始内容和增加了JSON指令后的新文件内容。


任务文件的末尾添加新的延时指令

{"T":224,"name":"mission_a","delay":3000}
  • 224:这条指令为CMD_APPEND_DELAY,用于在任务文件的步骤与步骤之间实现延时效果。
  • name:要编辑的任务文件的名称。
  • delay:设置的延时时间,单位ms。

输入该指令后,会在任务文件的末尾添加一条新的延时指令。


在任务文件中插入新的JSON指令

{"T":225,"name":"mission_a","stepNum":3,"step":"{\"T\":114,\"led\":255}"}
  • 225:这条指令为CMD_INSERT_STEP_JSON,表示在任务文件中的指定步骤处插入新的JSON指令。
  • name:要编辑的任务文件的名称。
  • stepNum:指定步骤数。例如stepNum设置为3时,则会在第3步插入新输入的指令,新插入的指令作为第3步来执行。
  • step:要插入的新JSON指令。上方例子中添加的指令为{"T":114,"led":255}。注意添加的新JSON指令中的每个"引用符号前面需要添加\符号,具体添加格式请参照上方例子。

注意:在本条指令和后续指令中,给的stepNum值是为JSON指令执行的步数,而非行数。也就是说,如果给定的stepNum值为3,则在该任务文件中为第3步要执行的JSON指令,但是显示为第4行。


在文件插入运动至当前位置的JSON指令

{"T":226,"name":"mission_a","stepNum":3,"spd":0.25}
  • 226:这条指令为CMD_INSERT_STEP_FB,使用该指令,机械臂会将当前机械臂所处的位置当作目标位置来生成一条运动至当前机械臂所处位置的JSON指令,并且将该指令插入至任务文件的指定步骤中。
  • name:要编辑的任务文件的名称。
  • stepNum:指定步数。例如stepNum设置为3时,则会在第3步插入新的JSON指令,新插入的JSON指令为第3步来执行。
  • spd:设置机械臂运动到该目标位置的速度。


在文件中插入新的延迟指令

{"T":227,"name":"mission_a","stepNum":3,"spd":3000}
  • 227:这条指令为CMD_INSERT_DELAY,用来在任务文件中指定步骤处插入新的延迟指令。
  • name:要编辑的任务文件的名称。
  • stepNum:指定步数。例如stepNum设置为3时,则会在第3步插入新的JSON指令,新插入延迟指令作为第3步来执行。
  • spd:设置的延时时间,单位ms。


替换任务文件中的某一步指令

{"T":228,"name":"mission_a","stepNum":3,"step":"{\"T\":114,\"led\":255}"}
  • 228:这条指令为CMD_REPLACE_STEP_JSON,用于将指定行数的后一行替换为新插入的JSON指令。
  • name:要编辑的任务文件的名称。
  • stepNum:指定步数。例如stepNum设置为3时,则会在第3步插入新的JSON指令,新插入延迟指令作为第3步来执行。
  • step:要插入的新JSON指令。上方例子中添加的指令为{"T":114,"led":255}。注意添加的新JSON指令中的每个 " 引用符号前面需要添加 \ 反斜杠符号,具体添加格式请参照上方例子。


替换任务文件中的某一步为运动至当前位置指令

{"T":229,"name":"mission_a","stepNum":3,"spd":0.25}
  • 229:这条指令为CMD_REPLACE_STEP_FB,使用该指令,机械臂会自动将目前机械臂所处的位置当作目标位置来生成新的指令,并使用它来替换掉任务文件中的指定步数的内容,你需要为该位置设置一个速度。
  • name:要编辑的任务文件的名称。
  • stepNum:指定步数。例如stepNum设置为3时,则会在第3步插入新的JSON指令,新插入延迟指令作为第3步来执行。
  • spd:设置机械臂运动到该目标位置的速度。


使用新的延时指令来替换任务文件中的某一步指令

{"T":230,"name":"mission_a","stepNum":3,"delay":3000}
  • 230:这条指令为CMD_REPLACE_DELAY,使用新的延时指令来替换指定任务文件中的所指定步骤的内容。
  • name:要编辑的任务文件的名称。
  • stepNum:指定步数。例如stepNum设置为3时,则会在第3步插入新的JSON指令,新插入延迟指令为第3步来执行。
  • delay:延时时间,单位ms。


删除任务文件中的某一步

{"T":231,"name":"mission_a","stepNum":3}
  • 231:这条指令为CMD_DELETE_STEP,用来删除任务文件中的某一步。
  • name:要编辑的任务文件的名称。
  • stepNum:要删除的指定步骤。


执行任务文件中的某一步指令

{"T":241,"name":"mission_a","stepNum":3}
  • 241:这条指令为CMD_MOVE_TO_STEP,用来执行任务文件中指定步骤的指令。
  • name:要执行的任务文件的名称。
  • stepNum:要执行的指定步骤。

注意:该函数是否阻塞取决于具体命令是否会引发阻塞。如果您要执行的是机械臂逆运动学控制引发阻塞的指令,则该函数会进程阻塞。


播放任务

{"T":242,"name":"mission_a","times":3}
  • 242:这条指令为CMD_MISSION_PLAY,用来播放任务文件中所有JSON指令,可以循环执行。
  • name:要播放的任务文件的名称。
  • times:要播放的循环次数,当值为-1时为无限次数。

播放的过程中,当串口接收到任何新信号后,并且当目前执行的指令运行完成后,即可退出播放。