【WEB前端2024】3D智体编程:乔布斯3D纪念馆-第54课-poplang语音编程控制机器人
使用dtns.network德塔世界(开源的智体世界引擎),策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtns.network是一款主要由JavaScript编写的智体世界引擎(内嵌了three.js编辑器的定制版-支持以第一视角浏览3D场馆),可以在浏览器和node.js、deno、electron上运行,它是一个跨平台的软件,支持多个操作系统使用!并且支持使用内置的poplang智体编程语言实现3D组件的智能化编程——语法超简单,一句话语法,人人轻松上手!
下面分为几步介绍,如何基于dtns.network智体世界引擎实现语音编程控制机器人。通过语音识别的agent发出poplang编程指令,从而实现了真实场景下的人类语言口述指令编程机器人,从而实现控制。这使得普通人也可以通过3D轻应用实现语音编程控制机器人,大大拓展了机器人的应用范围和降低了使用门槛,使得普通人也可以参与到机器人的语音编程控制中。结合现在流行的AGI通用人工智能可实现具身智能或使用大语言模型实现生成式人工智能控制代码,从而使机器人的使用更加灵活多变,满足普通人使用机器人的场景需要。
为了实现机器人的语音编程控制机器人,通过浏览器使用artyom.js库实现语音识别并通过dtns-api的实时频道通知到3d轻应用中(onRobotEvent接收实时频道传递过来的消费)。从而使得语音编程指令直达机器人控制端,可通过语音执行任意的poplang代码(即语音编程控制机器人)
第一步:打开头榜页面,找到3D纪念馆xverse轻应用
注:找到标题为“poplang语音编程”的xverse轻应用。
第二步:点击右上角…进入头榜编辑器
注:因为每一个xverse轻应用均是以xverse.json的方式进行源码级应用的分享的。故每一个社区用户均可通过编辑xverse轻应用源码来实现DIY和定制。
第三步:点击正面的“编辑xverse轻应用源码”,进入3D场馆编辑器
注:点击3D场景中间的avatar的3D对象,在右侧的属性面板中找到脚本-编辑。
第四步:编辑avatar玩家3D组件的poplang代码
注:首先使用了ib3.event.bus.on rtrobot-channel onRobotEvent实现了实时语音指令的接收(在onRobotEvent中完成了语音指令的判断,如果不是默认的dance指令;则直接执行中英文的poplang指令——poplang的任意指令均可通过语音输入来完成——即poplang的语音编程控制机器人)。
第五步:点击顶部菜单“文件”推送头榜(作品),将此3D纪念馆以xverse轻应用方式分享给其他用户
第六步:将新的头榜标题设置为“poplang语音编程”,点击右上角确认完成头榜发布
注:标题为xmsg,不能误删除“”双引号,否则会发布失败——仅修改xmsg属性的文字内容即可。
第七步:找到刚发布的xverse轻应用头榜,点击进入3D场景浏览器
注:轻轻一点击,即可进入体验刚发布好的xverse-3D轻应用(智体应用),我们相当于可以无限地分享和裂变这个开源的3D轻应用(智体应用)。这样大家便可以按自己的需求,轻松的修改和定制这些动画的源码模板了。可以形成自己的故事、自己的动画、自己的3D场馆、自己的3D互动剧情等等。随心所欲地发挥,所以智体世界、智体OS也相当于【元宇宙】【开放世界】!
第八步:进入3D轻应用后,我们首先开始与机器人实现视频的实时连接(然后通过打开的audio_cmd.html进行实时的poplang语音编程控制——agent控制端)
注:我们连接上了机器人实时画面(如上图所示)
我们通过电脑麦克风输入“执行指令move”,即机器人往前移动(如下图所示)
注:移动的过程会使得机器人头部变低——有一个往前的驱动力!
继续输入语音指令:执行指令right(如下图所示)
注:机器人完成了右转的right指令(即调用了poplang智体编程3D模块中的right自定义函数——使用pop.func.define right实现定义)
我们看一下audio_cmd.html的代码
注:从上图可看到,通过判断是否有执行指令的提示语,进行poplang代码的指令分割,从而获取到了真正的poplang指令代码。通过dtna-pi:dtns://web3:avrdev/rtchannel/send给订阅的频道rtrobot-channel机器人指令通道发送实时的poplang语音编程控制机器人的指令。
通过上8步,我们成功完成了通过3D轻应用中实现了popalng语音编程,这大大增强了在真实场景下的复杂机器人控制功能。并有机会结合AGI通用人工智能和大语言模型,实现复杂多样的真实场景的人与机器人的配合工作。从而为人类增加上强大的智体agent助手!
我们也看到了poplang智体编程语言的强大能量,一两行简单的指令,即可完成复杂的3D互动的交互效果、音效效果的开发。并且通过xverse-json源文件(3D轻应用)的方式进行社区分享,使得开源开放、公开透明的3D场馆的设计,能被大家更多的学习和继承,达到互动学习、互动成长的目的。这也是智体OS、智体互动式教育-学习的目标。
注:dtns.network德塔世界(开源的智体世界引擎)是在github和gitee上开源的项目!
附录(poplang智体代码——实现poplang语音编程):
pop.func.define 3d_move
= event 3d_move_event
object.get event.turn turn
object.get event.forward forward
$.Math.abs turn
= aturn $ret
$.Math.abs forward
= aforward $ret
< aforward aturn turnflag
pop.ifelse turnflag turnNow goNow
pop.func.end
pop.func.define turnNow
set z 0
> turn z leftFlag
pop.ifelse leftFlag left right
pop.func.end
pop.func.define goNow
set z 0
> forward z goFlag
pop.ifelse goFlag move back
pop.func.end
pop.func.define left
/rtphone/robot/action?action=left
set tips 左转
#$.g_2d_voice_play tips
pop.func.end
pop.func.define right
/rtphone/robot/action?action=right
set tips 右转
#$.g_2d_voice_play tips
pop.func.end
pop.func.define move
/rtphone/robot/action?action=move
set tips 前进
#$.g_2d_voice_play tips
pop.func.end
pop.func.define back
/rtphone/robot/action?action=back
set tips 后退
#$.g_2d_voice_play tips
pop.func.end
#alias left 左转
#alias right 右转
#alias back 后退
#alias move 前进
set chatid msg_chat02G7TLu59Tzs
$.g_3d_show_rtcchat chatid
#订阅capture事件
pop.func.define onEvent
= data $event_data
object.get data.base64 base64
$.g_2d_pose_find base64
= cret $ret
object.get cret.w w
object.get cret.h h
object.get cret.pose.keypoints points
object.get cret.pose.score score
set i 0
+ i i i
set iw 9
+ iw i iw
array.get points i nose
array.get points iw leftWrist
set leftr 0.33
set rightr 0.66
set scoreMin 0.2
* w leftr leftw
* w rightr rightw
* h leftr toph
object.get nose.position.x npx
object.get nose.position.y npy
object.get leftWrist.position.y wpy
object.get leftWrist.score ws
< wpy npy backok
< npx leftw leftok
> npx rightw rightok
< npy h moveok
> score scoreMin sok
> ws scoreMin wsok
&& backok wsok backok
! backok notback
pop.ifelse backok back
&& sok notback sok
&& leftok sok leftok
&& rightok sok rightok
&& moveok sok moveok
pop.ifelse leftok right donothing
pop.ifelse rightok left donothing
|| leftok rightok turnok
! turnok notturn
&& notturn moveok moveok
&& moveok sok moveok
pop.ifelse moveok move donothing
pop.func.end
ib3.event.bus.on rtcchat_capture onEvent
$.g_2d_rtcchat_capture_start
pop.func.define 3d_stop
ib3.event.bus.remove rtcchat_capture
$.g_2d_rtcchat_capture_stop
#机器人频道
/rtchannel/unfocus?channel=rtrobot-channel
ib3.event.bus.remove rtrobot-channel
pop.func.end
/rtchannel/create?channel=rtrobot-channel
/rtchannel/focus?channel=rtrobot-channel
pop.func.define onRobotEvent
= data $event_data
object.get data.notify_type notify_type
set xtype dance
== notify_type xtype xflag
pop.ifelse xflag dance doNo
set xtype dance_xf
== notify_type xtype xflag2
pop.ifelse xflag dance_xf doNo
|| xflag xflag2 xall
#执行语音指令(poplang语音编程)
pop.ifelse xall doNo @notify_type
pop.func.end
ib3.event.bus.on rtrobot-channel onRobotEvent
pop.func.define dance
set step 500
move
pop.sleep step
move
pop.sleep step
back
pop.sleep step
back
pop.sleep step
left
pop.sleep step
left
pop.sleep step
right
pop.sleep step
right
pop.sleep step
right
pop.sleep step
right
pop.sleep step
left
pop.sleep step
left
pop.sleep step
move
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
right
pop.sleep step
right
pop.sleep step
right
pop.sleep step
right
pop.sleep step
right
pop.sleep step
right
pop.sleep step
right
pop.sleep step
left
pop.sleep step
move
pop.sleep step
move
pop.sleep step
back
pop.func.end
pop.func.define dance_xf
set step
move
pop.sleep step
move
pop.sleep step
back
pop.sleep step
back
pop.sleep step
left
pop.sleep step
left
pop.sleep step
right
pop.sleep step
right
pop.sleep step
right
pop.sleep step
right
pop.sleep step
left
pop.sleep step
left
pop.sleep step
move
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
left
pop.sleep step
right
pop.sleep step
right
pop.sleep step
right
pop.sleep step
right
pop.sleep step
right
pop.sleep step
right
pop.sleep step
right
pop.sleep step
left
pop.sleep step
move
pop.sleep step
move
pop.sleep step
back
pop.func.end
poplang的语音编程代码到此结束。