目前同學們都完成了第一個程式設計作業,基本實作了圖像的旋轉和平移,但是在程式設計中還沒有完全展現面向對象的方法,希望結合本周的課程學習、課外閱讀和程式設計練習,能繼續疊代優化代碼,更加熟練的掌握面向對象程式設計,希望大家掌握的要點有:
-
如何設計和實作一個類
在設計層面,要考慮如何進行合理的抽象,由多個類來共同承擔一個複雜的任務。
在實作層面,要掌握C++的文法,類的構造函數和析構函數,操作符的重載,虛函數等。
-
使用容器和算法對一個對象進行操作
結合例子程式了解容器的作用并運用到程式設計中去,容器及其操作就是設計模式的展現。
-
了解并運用抽象類
抽象類的作用是給使用者提供一個接口,而具體的實作變化并不影響接口的穩定性,進而有利于軟體的重構
-
類之間的關系:複合、繼承、委托
複合、繼承和委托表達了類之間的關系,能正确使用這三者的表示符号來畫出類圖。
-
了解設計模式的作用
“每一個模式描述了一個在我們周圍不斷重複發生的問題,以及該問題的解決方案的核心。這樣,你就能一次又一次地使用該方案二不必做重複勞動。”
通過示例代碼,了解如何通過類之間的複合、繼承、委托,實作各種設計模式的。
第二個程式設計作業,為了實作我們的機器人咖啡角,我們将基于第一次作業中的圖形旋轉,構造一個兩軸平面機器人,運動原理見動畫
要求:
1)代碼中至少包括兩個類:一個Robot類和一個Solver類,Robot類中定義每個機械臂的長度,每個關節的轉動角度範圍和零點,Solver求解器類用于實作機器人的正逆運動學變換,正運動學為把機器人的關節坐标變換成笛卡爾坐标,逆運動學為把機器人的笛卡爾坐标變換成關節坐标。
2)定義坐标系類:機器人的原點為世界坐标系(World Frame),同時,允許使用者定義工件坐标系或任務坐标系(Task Frame),任務坐标系和世界坐标系之間存在着偏移和旋轉關系。機器人各個關節的角度值構成關節坐标系(Joint Frame)。
3)每個機器人允許定義任意多個任務坐标系,請運用Vector容器實作該功能。
4)機器人對象接收來自使用者的PTP(Point To Point)運動指令,該指令所給出的坐标值,可能是關節坐标系或世界坐标系或任務坐标系,機器人通過Solver求解器類把世界坐标值和任務坐标值變換成關節坐标并更新關節角度值。
注意:在本次程式設計中不需要機器人具備連續軌迹運動的功能,隻需要能夠根據使用者的PTP指令直接把内部的關節角度值更新就可以。
5)測試主程式架構如下:
int main()
{
//建立一個機器人對象myRobot,初始化機器人的機械參數,關節坐标系(JF),世界坐标系(WF)。
//給機器人對象建立3個任務坐标系TF1, TF2, TF3。
//控制機器人對象在不同坐标系下的運動,如:
//myRobot.PTPMove(JF,P1);
//myRobot.PTPMove(WF,P2);
//myRobot.PTPMove(TF1,P3);
//myRobot.PTPMove(TF2,P4);
//myRobot.PTPMove(TF3,P5);
}
鼓勵大家閱讀并借鑒OROCOS中的代碼實作上述功能。