ps_ptr
是指向PlanningScene实例的提升共享指针,创建时带有boost::make_shared
。 PlanningScene类声明为
class PlanningScene : private boost::noncopyable, public std::enable_shared_from_this<PlanningScene>
并包含一个方法clone
,用于&#34;复制&#34;规划场景。
这些定义意味着我有一个特定的方式来分享这个类。传递ps_ptr
的正确方法是什么?我想与另一个类SceneStuff
分享,其中SceneStuff
仅使用它来调用const方法(PlanningScene::checkCollision)。
一些注意事项:
ps_ptr
会导致double free or corruption
导致的段错误。那个编译器告诉我,我试图释放已经被释放或被解除引用的内存,但不应该boost::shared_ptr
处理这个问题?我已经通过很多关于这个主题的SO主题,但无济于事。auto new_ps_ptr = ps_ptr->clone(ps_ptr);
no matching function for call to ‘planning_scene::PlanningScene::clone(boost::shared_ptr<planning_scene::PlanningScene>&)’
更新:感谢Igor的评论,我已将ps_ptr
切换为std::shared_ptr
,但由于以下情况,偶尔会出现段错代码(由SceneStuff
另外调用) C :
// Setup collision-models
auto robot_model_ptr = ps_ptr->getRobotModel();
collision_detection::CollisionRobotFCL crobot(robot_model_ptr);
auto world_ptr = ps_ptr->getWorldNonConst();
collision_detection::CollisionWorldFCL cworld(world_ptr);
// Just standard structs
auto dreq = collision_detection::DistanceRequest();
auto dres = collision_detection::DistanceResult();
// Compute obstacle distances for the given `conf`
moveit::core::RobotState query_state = ps_ptr->getCurrentState();
query_state.setVariablePositions(x.data()); // x is simply an Eigen::VectorXd
cworld.distanceRobot(dreq, dres, crobot, query_state);
以下是相关来源:
UPDATE 2 :看来剩下的seg-fault是由于上游问题导致PlanningScene指针通过Boost Python绑定传递 - 请参阅this SO question。