RRT*路径规划算法的rewie的理解

SourceURL:file:///home/yannick/myCode/PathPlanning/rrt调试记录.doc

功能:优化新采样点中就近点的父节点

输入:newNode, near_idx;输出:void

步骤:

  • 遍历所有的_node_list[near_idx]中的采样点;
  • 设置origenNodeParentCost变量(double类型),用以存储采样点的消耗,即cost
  • double origenNodeParentCost = _node_list[near_idx[i]]->cost;

    设置newNodeAsParentNodeCost(double类型),用以存储以newNode作为父节点的消耗,即cost

    double newNodeAsParentNodeCost = newNode->cost + alNodeDis(_node_list[near_idx[i]], newNode);
    

    比较newNodeAsParentNodeCost和origenNodeParentCost,若origenNodeParentCost的消耗小,则不修改父节点;newNodeAsParentNodeCost的消耗小,若则替换父节点,如下:

    if (newNodeAsParentNodeCost < origenNodeParentCost)
        {
          _node_list[near_idx[i]]->parent = newNode;
          _node_list[near_idx[i]]->cost = newNodeAsParentNodeCost;
        }

    rewire函数代码如下:

    void RRTSTAR::rewire(Node* newNode, std::vector<int> near_idx)
    {
      for (short i = 0; i < near_idx.size(); i++)
      {
        if (_node_list[near_idx[i]]->parent == nullptr)
        continue;
        double newNodeAsParentNodeCost = newNode->cost + calNodeDis(_node_list[near_idx[i]], newNode);
        double origenNodeParentCost = _node_list[near_idx[i]]->cost;
        std::cout << LOG << "newNodeAsParentNodeCost = " << newNodeAsParentNodeCost << std::endl;
        std::cout << LOG << "origenNodeParentCost = " << origenNodeParentCost << std::endl;
        if (newNodeAsParentNodeCost < origenNodeParentCost)
        {
          _node_list[near_idx[i]]->parent = newNode;
          _node_list[near_idx[i]]->cost = newNodeAsParentNodeCost;
        }
      }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值