《实时控制软件设计》第二个编程作业

目前同学们都完成了第一个编程作业,基本实现了图像的旋转和平移,但是在编程中还没有完全体现面向对象的方法,希望结合本周的课程学习、课外阅读和编程练习,能继续迭代优化代码,更加熟练的掌握面向对象编程,希望大家掌握的要点有:

  • 如何设计和实现一个类
    在设计层面,要考虑如何进行合理的抽象,由多个类来共同承担一个复杂的任务。
    在实现层面,要掌握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中的代码实现上述功能。

posted @ 2015-12-04 21:32  chenhust  阅读(531)  评论(2编辑  收藏  举报