三点法求曲率,使用C++实现

三点法求曲率,使用C++实现


最近在做ROS路径规划的时候碰见了求路径斜率的问题,我采用了三点法求斜率,在这里记录一下。这是用C++写的,很好理解,易移植。

// An highlighted block
try
{   //取点 P1、P2、P3是位置信息
    P1 = PT1.pose.position;
    P2 = PT2.pose.position;
    P3 = PT3.pose.position;
    
    //计算曲率部分,使用正弦定理 a/sinA = 2R
    if(P1.x == P2.x == P3.x)//三点横坐标相同,即共线,直接标记曲率为0
    {
        curvity = 0;
    }
    else
    {
        double dis1,dis2,dis3;
        double cosA,sinA,dis;
        dis1 = sqrt((P1.x - P2.x)*(P1.x - P2.x) + (P1.y - P2.y)*(P1.y - P2.y));
        dis2 = sqrt((P1.x - P3.x)*(P1.x - P3.x) + (P1.y - P3.y)*(P1.y - P3.y));
        dis3 = sqrt((P2.x - P3.x)*(P2.x - P3.x) + (P2.y - P3.y)*(P2.y - P3.y));
        dis = dis1*dis1 + dis3*dis3 - dis2*dis2;
        cosA = dis/(2*dis1*dis3);//余弦定理求角度
        sinA = sqrt(1 - cosA*cosA);//求正弦
        curvity = 0.5*dis2/sinA;//正弦定理求外接圆半径
        curvity = 1/curvity;//半径的倒数是曲率,半径越小曲率越大
    }
    cout<<"curvity = "<<curvity<<"\n";
}
catch(tf::TransformException &ex)//处理意外情况
{
    ROS_ERROR("%s",ex.what());
    cout<<"三点取点失败\n";
}

参考博客
[1]: https://blog.csdn.net/Amych_/article/details/80209950

  • 7
    点赞
  • 75
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值