【机器人学】机器人开源项目KDL源码学习:(10)KDL中的OOP思想---继承

本文介绍了C++中面向对象编程在KDL机器人轨迹规划中的应用,重点讲解了基类Path及其派生类如Path_Line等,展示了如何通过继承实现路径的不同特性和计算方法,特别是虚函数和纯虚函数在路径定义中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C++语言的一个重要特征是可以进行面向对象的设计(OOP),而OOP的核心思想之一便是使用继承,可以定义相似的类型并对其相似关系进行建模。通过继承联系在一起的类构成一种层次关系,层次关系的根部有一个基类(base class),其它类则直接或间接地从基类继承而来,这些继承得到的类称为派生类(derived class)。

机器人轨迹规划算法中,一个很重要的问题是路径的计算,但是机器人的路径有多种,包含直线路径圆弧路径复合路径等等。所以在KDL中就定义了一个基类:路径(class path),和其它6个派生类:开口圆路径(Path_Circle)、组合路径(Path_Composite)、封闭圆路径(Path_Cyclic_Closed)、直线路径(Path_Line)、仅含点的路径(Path_Point)、含圆弧过渡的路径(Path_RoundedComposite)

需注意一下基类(path)中的虚函数(virtual)很多是纯虚函数,这些是派生类中必须给出自己的定义,例如Path_Line中相应的虚函数,可看出每种路径的都需要定义并重新定义:LengthToS,PathLength,Pos,Vel,Acc,Write。

class Path
	{
		virtual double LengthToS(double length)  = 0;
		virtual double PathLength() = 0;
		virtual Frame Pos(double s) const = 0;
		virtual Twist Vel(double s,double sd) const  = 0;
		virtual Twist Acc(double s,double sd,double sdd) const  = 0;
		virtual void Write(std::ostream& os)  = 0;
		static Path* Read(std::istream& is);
		virtual Path* Clone() = 0;
		virtual IdentifierType getIdentifier() const=0;
		virtual ~Path() {}
	};

}

class Path_Line : public Path
	{
		Path_Line(const Frame& F_base_start,const Frame& F_base_end,RotationalInterpolation* orient,double eqradius,bool _aggregate=true);
		Path_Line(const Frame& F_base_start,const Twist& twist_in_base,RotationalInterpolation* orient,double eqradius,bool _aggregate=true);
		double LengthToS(double length);
		virtual double PathLength();
		virtual Frame Pos(double s) const;
		virtual Twist Vel(double s,double sd) const ;
		virtual Twist Acc(double s,double sd,double sdd) const;
		virtual void Write(std::ostream& os);
		virtual Path* Clone();
		virtual IdentifierType getIdentifier() const {return ID_LINE;}
		virtual ~Path_Line();
	};
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值