创建C ++机器人模板的一般建议

时间:2015-09-06 01:07:12

标签: c++ oop templates robotics

我正在开发一个已经发展了很多次的项目,我真的开始考虑编写一个控制其他嵌套泛型类的泛型类。

问题是,我有很多方法可以解决这个问题,我已经完全不知所措了。我已经回顾了矢量和模板类示例,但我真的不知道如何开始。

让我解释一下, 我需要能够使用此模板来创建我直接控制的对象。 主要的顶级对象是我在此处记录的机器人(可能没有帮助阅读,包括在内作为参考):

Github: MiddleMan5/Onyx-BeagleBone which pulls from: 
Github: MiddleMan5/Project-Onyx-Quadruped
(New member 2-link restriction)

哪个有C ++ Assembly.h文件我正在制作通用文件: "Assembly File"

现在我很抱歉,如果我的语法有点生疏,我在一般意义上对C ++很新。我对指针,对象向量等有很大的困难。 我真的只是希望在一般的学习方向上受到指导,而不是修复我的代码!"答案。

请耐心等待我,因为我可能会破坏C ++术语: 我希望能够创建任何类型的机器人配置并操纵它的单个组件的末端执行器,或整个机箱作为点粒子物理对象(如果机器人是移动的)。

这将允许我使用相同的模板来创建机器人手臂以及我想要的Quadruped。 (实际上,这是一个坚实的移动质量,有一个中心和4" Arms"

每个初始化的机器人必须只包含一个本体,其本身至少包含一个基础,一个关节和一个末端效应器。

如果在Body.assemble创建现在活动的机器人之前未能包含任何这些内容,则顶级对象的创建应该失败。 (Body.assemble创建Chassis Onyx

我现在可以通过说Onyx.Leg(1).move(X,Y)Onyx.rotate(X,45); //Move all legs to satisy final body rotation angle

之类的内容来移动整个结构

在我的头脑风暴文件中记录:Please at least skim。 该文件包含图表和"定义"我正在使用伪代码原型。

我只想要一个" Robot" .h和" Robot" .cpp来定义动作,动作,大小,形状等等。一个Main.cpp提供进入码。 (也许我有点问)但从逻辑上讲,这似乎可行。

包括:

Main.cpp
        |_
        | Onyx.h
        |_Onyx.cpp //Body.move, body.rotate, body.raise
            |_Assembly.h To create the body as a combination of assemblies

作为四足动物的Onyx看起来像这样:

ONYX Complete Diagram Example:
        EE          EE
        ||    __    ||
         |   |  |   |                      
         0__0+__+0__0
             _||_
         __0+_  _+  <-  0__
         0    \/          0  <-\
         |                |  <- - "Leg" and Body are two attached assemblies inside one complete containing Robot chassis          
        ||                || <-/
        EE                EE

应该控制如下:

Onyx.EE1.moveTo(x,y);

或:

Onyx.moveTo(x,y);

我可以进一步定义步态和参数,让机器人可以采取措施将整个机箱移动到位置(X,Y)

并且具有关节,链接和基础的定义:

|Joint: Takes X and Y coordinates, rotates Link.            ----0----
|__ End Effector: A joint combined with an attached Link.   --------EE
|__ Base: A joint created that can be fixed statically through a link to another base joint
|   |__ Can be attached actively to a link and a joint 
|   |__ Can be used as a static reference to an assembly (Such as a leg) and attached to a joint on a different plane
|
|__ Primary Joint: the joint(s) that attach directly to the Body's base(s)

|Link: A length of physical mass between a joint.
|__Segment: two or more attached in-line links (multiple links combined at different angles can specify independent shapes or masses).
            Segments are useful for attaching spaced Bases. (Attach.Base(Segment1_2(End)); Segments can be attached either by their additive L1 or L2

我真的感到很沮丧,因为这个项目很快变得复杂,让我甚至不理解。这就是我在寻找创建模板的原因。但是,在C ++中甚至不可能访问对象的对象方法(Onyx.leg.move)。我错了吗?

如果你真的读到最后我想帮你一把。你对学习领域的任何建议(或建议让我的问题更清楚)都会受到极大的重视。

谢谢

编辑: 好的,我继续创建了一个Class&#39; Assembly&#39;,它有方法可以访问私有子类&#39;汇编&#39;它附有一条带有链接n&#34;使用子类的Base,Link和End_Effector来组装(上帝,我需要一个不同的名字)。我想我将不得不为子类的每个子类编写单独的方法和方法处理程序。这似乎是丑陋和复杂的方式,有足够的空间来制造错误。

伪流程如下:

Assembly Onyx //Creates Robot: Onyx
Onyx.assemble(4, 3, 2); //Adds 4 legs each with 3 joints which includes 2 axis
for(i; 0 ---> 3)
Onyx.numleg_numL_length(i,1,114); //Defines L1 of Leg1 as 114mm
Onyx.numleg_numL_length(i,2,140); //Defines L2 of Leg1 as 114mm

以及开启和开启等等。

请告诉我,这是一个简单的技巧,允许我将多个变量分配给一个命名类,而不是这个无限的方法函数和子类链

0 个答案:

没有答案