【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_eventobject.get event.turn turnobject.get event.forward forward$.Math.abs turn= aturn $ret$.Math.abs forward= aforward $ret< aforward aturn turnflagpop.ifelse turnflag turnNow goNowpop.func.endpop.func.define turnNowset z 0> turn z leftFlagpop.ifelse leftFlag left rightpop.func.endpop.func.define goNowset z 0> forward z goFlagpop.ifelse goFlag move backpop.func.endpop.func.define left/rtphone/robot/action?action=leftset tips 左轉#$.g_2d_voice_play tipspop.func.endpop.func.define right/rtphone/robot/action?action=rightset tips 右轉#$.g_2d_voice_play tipspop.func.endpop.func.define move/rtphone/robot/action?action=moveset tips 前進#$.g_2d_voice_play tipspop.func.endpop.func.define back/rtphone/robot/action?action=backset tips 后退#$.g_2d_voice_play tipspop.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_dataobject.get data.base64 base64$.g_2d_pose_find base64= cret $retobject.get cret.w wobject.get cret.h hobject.get cret.pose.keypoints pointsobject.get cret.pose.score scoreset i 0+ i i iset iw 9+ iw i iwarray.get points i nosearray.get points iw leftWristset leftr 0.33set rightr 0.66set scoreMin 0.2* w leftr leftw* w rightr rightw* h leftr tophobject.get nose.position.x npxobject.get nose.position.y npyobject.get leftWrist.position.y wpyobject.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 notbackpop.ifelse backok back&& sok notback sok&& leftok sok leftok&& rightok sok rightok&& moveok sok moveokpop.ifelse leftok right donothingpop.ifelse rightok left donothing|| leftok rightok turnok! turnok notturn&& notturn moveok moveok&& moveok sok moveokpop.ifelse moveok move donothingpop.func.endib3.event.bus.on rtcchat_capture onEvent$.g_2d_rtcchat_capture_startpop.func.define 3d_stopib3.event.bus.remove rtcchat_capture$.g_2d_rtcchat_capture_stop#機器人頻道/rtchannel/unfocus?channel=rtrobot-channelib3.event.bus.remove rtrobot-channelpop.func.end/rtchannel/create?channel=rtrobot-channel/rtchannel/focus?channel=rtrobot-channelpop.func.define onRobotEvent= data $event_dataobject.get data.notify_type notify_typeset xtype dance== notify_type xtype xflagpop.ifelse xflag dance doNoset xtype dance_xf== notify_type xtype xflag2pop.ifelse xflag dance_xf doNo|| xflag xflag2 xall#執行語音指令(poplang語音編程)pop.ifelse xall doNo @notify_typepop.func.endib3.event.bus.on rtrobot-channel onRobotEventpop.func.define danceset step 500movepop.sleep stepmovepop.sleep stepbackpop.sleep stepbackpop.sleep stepleftpop.sleep stepleftpop.sleep steprightpop.sleep steprightpop.sleep steprightpop.sleep steprightpop.sleep stepleftpop.sleep stepleftpop.sleep stepmovepop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep steprightpop.sleep steprightpop.sleep steprightpop.sleep steprightpop.sleep steprightpop.sleep steprightpop.sleep steprightpop.sleep stepleftpop.sleep stepmovepop.sleep stepmovepop.sleep stepbackpop.func.endpop.func.define dance_xfset stepmovepop.sleep stepmovepop.sleep stepbackpop.sleep stepbackpop.sleep stepleftpop.sleep stepleftpop.sleep steprightpop.sleep steprightpop.sleep steprightpop.sleep steprightpop.sleep stepleftpop.sleep stepleftpop.sleep stepmovepop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep stepleftpop.sleep steprightpop.sleep steprightpop.sleep steprightpop.sleep steprightpop.sleep steprightpop.sleep steprightpop.sleep steprightpop.sleep stepleftpop.sleep stepmovepop.sleep stepmovepop.sleep stepbackpop.func.end
poplang的語音編程代碼到此結束。