以下内容为OMPL官方Tutorial Setting up state validity checking的翻译
OMPL本身并不包括可行状态检查的代码。这样的设置是取决于所要求解的问题的。比如,OMPL.app定义可行状态检测为检查加载的CAD模型的碰撞关系。MoveIt中的ROS OMPL接口定义可行状态检查为机器人模型与感知到的环境物体之间的碰撞检测。如果为蛋白质折叠做规划,那么可行状态检查就与能量函数有关了。
为了让用户定义可行状态,OMPL定义了两个抽象类
- ompl::base::StateValidityChecker
- ompl::base::MotionValidator
这些类将我们所规划的系统的性质抽象化了。例如,OMPL不需要表示机器人或者障碍物的几何关系。用户在配置ompl::base::SpaceInformation的时候可以设定具体用哪一种实现方式。注意,ompl::base::StateValidityChecker和ompl::base::MotionValidator类的实例化需要时线程安全的。
ompl::base::StateValidityChecker定义了ompl::base::StateValidityChecker::isValid()函数,规划器(planner)通过这个函数来评估一个状态是否是可行的。如果用户没有设置这个类的话,则会假设ompl::base::AllValidStateValidityChecker,也就是说所有的状态都是可行的。
// 定义类
class myStateValidityCheckerClass : public base::StateValidityChecker
{
public:
myStateValidityCheckerClass(const base