Bezier(贝塞尔)曲线(五阶)的轨迹规划在自动驾驶中的应用(六)

30 篇文章 15 订阅
28 篇文章 46 订阅

本文介绍贝塞尔五阶曲线最为curve smoother的使用,分析关于时间的一阶和二阶导数的连续性,以及曲率的连续性,并给出一个smoother的实例进行效果展示。

clc
 clear all
  p0 = [ 0, 0];
 p1 = [4 4*sqrt(3)];
 p2= [5.5 5.5*sqrt(3)];
 p3 = [8.5 5.5*sqrt(3)];
 p4 = [ 10 4*sqrt(3)];
 p5 = [14 0];
  %生成五阶贝塞尔曲线的笛卡尔坐标系点位
  i =1;
 for u =0: 0.01:1
 p(i,:)= (1-u)^5*p0 + 5*(1-u)^4*u*p1 + 10*(1-u)^3*u^2*p2 +...
     10*(1-u)^2*u^3*p3 +5*(1-u)*u^4*p4 + u^5*p5;
 i =i+1;
 end
 
 for i = 1:100 
 pd(i) = (p(i+1,2)-p(i,2))/(p(i+1,1)-p(i,1));
 pd(101) = 0;
 end
  %计算一阶导数
 for i =2: 100
     pdd(1) = 0;
     pdd(101) = 0;
     pdd(i) = (p(i+1,2)-2*p(i,2) + p(i-1,2))/(0.5*(-p(i-1,1)+p(i+1,1)))^2;
 end
  %计算二阶导数
 figure
 plot(2:100,pd(2:100));
 xlabel('sampling numbers')
ylabel('first derivatives')
title('First Derivative Continuity')
set(gca,'LineWidth',2,'FontSize',11,'FontWeight','normal','FontName','Times');
grid on;
legend('First Derivatives');


figure
 plot(2:100, pdd(2:100));
 xlabel('sampling numbers')
ylabel('second derivatives')
title('Second Derivative Continuity')
set(gca,'LineWidth',2,'FontSize',11,'FontWeight','normal','FontName','Times');
grid on;
legend('Second Derivatives');

 for i  = 1:101
     k(i) = (pdd(i))/(1+pd(i)^2)^(1.5);
 end
 figure
 plot(2:100,k(2:100))
 xlabel('sampling numbers')
ylabel('kappa(1/m)')
title('Curvature Continuity')
set(gca,'LineWidth',2,'FontSize',11,'FontWeight','normal','FontName','Times');
grid on;
legend('Curvature');

%%
 figure
 for i = 1: length(p)
 plot (p(i,1),p(i,2),'-bo')

  hold on

 end
 
 for x = 0:0.1:7
     y = sqrt(3)*x;
     plot(x,y,'+k')
   
     hold on
 end
 
 for x = 7:0.1:14
          y = -sqrt(3)*x + 14*sqrt(3);
     plot(x,y,'+k')
     hold on
 end
 
% legend('Generated Bezier Curve','Control Points','Original Centerline');

 plot(p0(1),p0(2),'-sr',p1(1),p1(2),'-sr',p2(1),p2(2),'-sr',p3(1),p3(2),'-sr',p4(1),p4(2),'-sr',p5(1),p5(2),'-sr')

   
xlabel('x(m)')
ylabel('y(m)')
title('Path Generation with Bezier Curve')
set(gca,'LineWidth',2,'FontSize',11,'FontWeight','normal','FontName','Times');

grid on;

效果图如下:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 4
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过使用JavaScript来获取CSS动画沿着贝塞尔曲线运动的轨迹。首先,你需要获取CSS定义动画的贝塞尔曲线的值,然后使用JavaScript计算出沿着该曲线的轨迹。 以下是一个示例代码: ```javascript // 获取元素的动画样式 var element = document.getElementById('your-element'); // 替换为你要获取动画样式的元素 var styles = window.getComputedStyle(element); var animationTimingFunction = styles.getPropertyValue('animation-timing-function'); // 提取贝塞尔曲线值 var bezierValue = animationTimingFunction.match(/cubic-bezier\(([^)]+)\)/)[1]; var bezierPoints = bezierValue.split(',').map(parseFloat); // 计算轨迹点坐标 var trajectoryPoints = []; for (var t = 0; t <= 1; t += 0.01) { var x = cubicBezier(t, 0, bezierPoints[0], bezierPoints[2], 1); var y = cubicBezier(t, 0, bezierPoints[1], bezierPoints[3], 1); trajectoryPoints.push({ x: x, y: y }); } // 输出轨迹点坐标 console.log(trajectoryPoints); // 贝塞尔曲线计算函数 function cubicBezier(t, p0, p1, p2, p3) { var mt = 1 - t; return mt * mt * mt * p0 + 3 * mt * mt * t * p1 + 3 * mt * t * t * p2 + t * t * t * p3; } ``` 这段代码首先获取了要应用动画的元素的动画样式,然后从样式提取了贝塞尔曲线的值。接下来,使用贝塞尔曲线计算函数计算沿着曲线的轨迹,并将每个点的坐标存储在 `trajectoryPoints` 数组。 你可以将上述代码的 `your-element` 替换为你要获取动画轨迹的元素的ID。最终,`trajectoryPoints` 数组将包含沿着贝塞尔曲线的轨迹点坐标。你可以根据需要对这些坐标进行进一步处理或使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值