




在杭州蘿卜圈網絡有限公司出品的虛擬機器人IRobotQ3D入門級的“基礎試玩”中,“向左走”、“向右走”是最基礎的訓練任務。一般,大家覺得這是基礎任務,完成之后往往就開始了“汽車總動員”、“野外生存”等高難度任務的練習。如果能很好地挖掘這兩個基礎任務的潛能,將會有很大的收獲,甚至在汽車總動員、野外生存等大型任務中都可以用到這個基本任務中的一些編程思路和技巧。學生一旦熟悉、掌握了這些編程思路,那么在復雜場景中,就可以把重點放到其他地方,便于學生理解,達到更好的訓練效果。
我們在完成“向左走”、“向右走”任務時,先要搭建四輪機器人小車,如圖l所示。編程是以前進、延時、控制左右電機轉向、接著前進來完成的。所有電機為10倍精度直流電機,左側電機連接端口l、2,電機反轉,右側電機連接端口3、4,電機正轉(如圖2)。
在學生掌握了基本方法后,啟發他們換一種編程思路,解決同樣的問題。
思路1:使用“計時”模塊+“條件循環”模塊
車型不變,編程如圖3所示。程序雖然長了,但是可以訓練學生用定時的方法來完成這個動作。由于運行路徑很短,調試很方便,所有參數基本不變。這樣,學生就可以把注意力集中到使用循環上來。學生掌握后,用這種思路完成汽車總動員等復雜任務也是沒有問題的。
思路2:使用“直流電機驅動”模塊
“多直流電機驅動”簡單好用,但是有一個弱點:不能用參數給定電機轉速,換句話說,電機的速度是固定的,不能用程序設定。而“直流電機驅動”則可以用程序改變電機轉速。美中不足的是:需要給每個電機賦值,稍顯麻煩。
在這里,使用了一個全局變量:速度。在程序開始時,先給速度賦初值,并賦值給每個電機。
以左轉為例,左側電機需要反轉,那么速度就是10,所以用了一個常量O減去10,就得到了需要的值“10”;右側電機速度與全局變量相同,程序如圖4所示。轉彎后,繼續直行,與程序開始處基本一致,只需調整時間參數即可。
對于汽車總動員或野外生存等復雜任務,如果需要根據傳感器(如距離傳感器)的輸出來改變電機的轉速,就需要學生掌握這種編程方法。雖然很麻煩,但是可以自動控制每個電機的速度,完成復雜的動作。
思路3:使用指南針傳感器完成轉向
首先,我們給機器人小車加上指南針傳感器并給它相應的端口。左轉的程序如圖5所示。
指南針傳感器使用得當,程序的調試將會比用控制電機的方法來轉向更容易。因為,如果速度變化,時間就需要跟著變,控制電機的程序需要反復調試。在汽車總動員等大型任務中,在需要用提速來提高成績時,用指南針的程序則大大節省了調試時間。
思路4:用“逐漸加速”、“逐漸減速”更穩定地控制機器人小車的姿態
在程序開始處,給定初始速度為O,然后在3000毫秒內,如果速度的值還沒有達到50,就每次增加2,直到速度加到50。學生掌握了這種思路,就可以很穩定地給機器人小車加速,有效避免開始跑翹頭、剎車翹尾發生,更好的控制機器人的姿態。
思路5:用子程序完成任務
以上程序中,電機的速度等小段程序與主程序放在一起,不僅難以閱讀,修改起來也很麻煩。這些部分可以從主程序中分離出來,變成子程序,將大大增加程序的可讀性,減輕編程難度,方便程序調試。例如,前進程序段可以變成前進子程序,左轉程序段可以變成左轉子程序。這樣主程序整體就顯得比較簡潔。如果什么地方出現問題,直接去相應的子程序修改就可以了。其實,這樣的編程思路就是完成大型、復雜任務的編程思路。如果繼續把前進部分再單獨做一個子程序,那么主程序就更加簡潔,更容易調試。學生在完成小任務時,采用完成大任務的程序思路,就比較容易的調試成功。如果熟悉了,可以很快上手復雜任務。這樣也許比直接在復雜任務中訓練效果好很多。
虛擬機器人作為實體機器人以外的另一種展現形式,有著很多優點。基礎試玩部分,免費注冊賬戶就可以登錄,可以讓更多有興趣的學生參與到這項活動中來。在平時的訓練過程中,將一些基礎任務限定編程方法來加大難度,或者引導學生用不同的方案來實現同一任務,既增加了學生的學習熱情,又可以培養學生們的探索精神,還可以把知識的難點消化在簡單的任務中,讓簡單任務不簡單?;A任務,我們也可以玩的很High!