首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Drake连续碰撞检测

Drake连续碰撞检测
EN

Stack Overflow用户
提问于 2021-04-20 11:40:00
回答 1查看 45关注 0票数 0

我正在尝试使用drake作为OMPL中的碰撞检测函数,并且我已经实现了状态有效性检查器,如下所示:

代码语言:javascript
运行
复制
bool stateValidityChecker (drake::multibody::MultibodyPlant<double> * plant,
                       drake::systems::Context<double> * plant_context,
                       drake::multibody::ModelInstanceIndex agent_idx,
                       const ob::State *state) {

int robot_dof = plant->num_positions(agent_idx);
Eigen::VectorXd cfg = OMPLStateToEigen(state, robot_dof);
plant->SetPositions(plant_context, agent_idx, cfg);
const auto &query_port = plant->get_geometry_query_input_port();
const auto &query_object = query_port.Eval<drake::geometry::QueryObject<double>>(*plant_context);
std::vector<drake::geometry::SignedDistancePair<double>> signed_distance_pairs =
        query_object.ComputeSignedDistancePairwiseClosestPoints(0.1);
bool is_collision_free = true;
for (const auto &signed_distance_pair : signed_distance_pairs) {
    // stop once any collision is detected:
    if (signed_distance_pair.distance < 1e-2) {
        // uncomment to display info on the colliding object; warning, very verbose
        const auto& inspector = query_object.inspector(); const auto&
                name_A = inspector.GetName(signed_distance_pair.id_A);
        const auto&
                name_B = inspector.GetName(signed_distance_pair.id_B);
        drake::log()->info("{} <--> {} is: {}", name_A, name_B, signed_distance_pair.distance);
        is_collision_free = false;
        return is_collision_free;
    }
}
return is_collision_free;}

然而,我想知道是否有一个可能的drake API用于连续碰撞检测,如FCL。我在API中找不到它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-04-20 12:09:28

目前还没有用于进行连续碰撞检测的机制。您可以发布功能请求的问题。但是,就目前而言,我们并不打算将其包括在内。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67172137

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档