纯跟踪算法(Pure Pursuit)在差速机器人上的应用

这篇具有很好参考价值的文章主要介绍了纯跟踪算法(Pure Pursuit)在差速机器人上的应用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Pure Pursuit 是一种路径跟踪算法。

在给定线速度的前提下,它计算移动的角速度令机器人从其当前位置到达机器人前方的某个前瞻点(lookahead)。该算法根据机器人的当前位置不断地追着它前面的一个点,直到路径的最后一个点。

1.差速轮模型 

纯跟踪算法(Pure Pursuit)在差速机器人上的应用

差速轮模型中:

纯跟踪算法(Pure Pursuit)在差速机器人上的应用

     纯跟踪算法(Pure Pursuit)在差速机器人上的应用 

 2.纯跟踪算法

纯跟踪算法(Pure Pursuit)在差速机器人上的应用

 图中()是我们下一个要追踪的路点,它位于我们已经规划好的全局路径上,现在需要控制车辆是的车辆的后轴经过该路点,表示车辆当前位置(即后轴位置)到目标路点的距离, 表示目前车身姿态和目标路点的夹角,那么根据正弦定理我们可以推导出如下转换式:

可以得到:

定义距离目标点横向误差为,得到:

联立模型方程得到:文章来源地址https://www.toymoban.com/news/detail-506872.html

3.ROS速度计算程序

void PurePursuit::computeVelocities(nav_msgs::Odometry odom)
{
  // Get the current robot pose
  geometry_msgs::TransformStamped tf;
  try
  {
    tf = tf_buffer_.lookupTransform(map_frame_id_, robot_frame_id_, ros::Time(0));
    for (; idx_ < path_.poses.size(); idx_++)
    {
      if (distance(path_.poses[idx_].pose.position, tf.transform.translation) > ld_)
      {
        KDL::Frame F_bl_ld = transformToBaseLink(path_.poses[idx_].pose, tf.transform);
        lookahead_.transform.translation.x = F_bl_ld.p.x();
        lookahead_.transform.translation.y = F_bl_ld.p.y();
        lookahead_.transform.translation.z = F_bl_ld.p.z();
        F_bl_ld.M.GetQuaternion(lookahead_.transform.rotation.x,
                                lookahead_.transform.rotation.y,
                                lookahead_.transform.rotation.z,
                                lookahead_.transform.rotation.w);
        break;
      }
    }
    if (!path_.poses.empty() && idx_ >= path_.poses.size())
    {
      KDL::Frame F_bl_end = transformToBaseLink(path_.poses.back().pose, tf.transform);
      if (fabs(F_bl_end.p.x()) <= pos_tol_)
      {
        goal_reached_ = true;
        path_ = nav_msgs::Path();
      }
      else
      {
        // Find the intersection between the circle of radius ld
        // centered at the robot (origin)
        // and the line defined by the last path pose
        double roll, pitch, yaw;
        F_bl_end.M.GetRPY(roll, pitch, yaw);
        double k_end = tan(yaw); // Slope of line defined by the last path pose
        double l_end = F_bl_end.p.y() - k_end * F_bl_end.p.x();
        double a = 1 + k_end * k_end;
        double b = 2 * l_end;
        double c = l_end * l_end - ld_ * ld_; 
        double D = sqrt(b*b - 4*a*c);
        double x_ld = (-b + copysign(D,v_)) / (2*a);
        double y_ld = k_end * x_ld + l_end;
        lookahead_.transform.translation.x = x_ld;
        lookahead_.transform.translation.y = y_ld;
        lookahead_.transform.translation.z = F_bl_end.p.z();
        F_bl_end.M.GetQuaternion(lookahead_.transform.rotation.x,
                                 lookahead_.transform.rotation.y,
                                 lookahead_.transform.rotation.z,
                                 lookahead_.transform.rotation.w);
      }
    }

    if (!goal_reached_)
    {
      // Compute linear velocity.
      // Right now,this is not very smart :)
      v_ = copysign(v_max_, v_);
      // Compute the angular velocity.
      // Lateral error is the y-value of the lookahead point (in base_link frame)
      double yt = lookahead_.transform.translation.y;
      double ld_2 = ld_ * ld_;
      cmd_vel_.angular.z = std::min( 2*v_ / ld_2 * yt, w_max_ );
      // Set linear velocity for tracking.
      cmd_vel_.linear.x = v_;
    }
    else
    {
      // We are at the goal!

      // Stop the vehicle
      
      // The lookahead target is at our current pose.
      lookahead_.transform = geometry_msgs::Transform();
      lookahead_.transform.rotation.w = 1.0;
      
      // Stop moving.
      cmd_vel_.linear.x = 0.0;
      cmd_vel_.angular.z = 0.0;
    }

    // Publish the lookahead target transform.
    lookahead_.header.stamp = ros::Time::now();
    tf_broadcaster_.sendTransform(lookahead_);
    // Publish the velocities
    pub_vel_.publish(cmd_vel_);
  }
  catch (tf2::TransformException &ex)
  {
    ROS_WARN_STREAM(ex.what());
  }
}

到了这里,关于纯跟踪算法(Pure Pursuit)在差速机器人上的应用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 差速驱动机器人的车轮里程计模型

            车轮测程法是指使用旋转编码器(即连接到车轮电机以测量旋转的传感器)的测程法(即估计运动和位置)。这是轮式机器人和自动驾驶汽车定位的有用技术。         在本文中,我们将通过探索差速驱动机器人的

    2024年02月15日
    浏览(46)
  • STM32两轮差速/阿克曼转向机器人/小车电机驱动教程!

    01 前言 之前,我们出了一系列的STM32机器人控制开发教程,收到不少小伙伴的反馈,于是我们对教程进行了优化,并将增加新的内容和工具。 本教程使用的机器人控制板拥有4个带编码器的电机接口,4个舵机接口,串口通信接口、SWD下载调试接口、航模遥控接口、USB5V输出接

    2024年02月05日
    浏览(155)
  • 建模分析 | 差速轮式移动机器人运动学建模(附Python/Matlab仿真)

    🔥附C++/Python/Matlab全套代码🔥课程设计、毕业设计、创新竞赛必备!详细介绍全局规划(图搜索、采样法、智能算法等);局部规划(DWA、APF等);曲线优化(贝塞尔曲线、B样条曲线等)。 🚀详情:图解自动驾驶中的运动规划(Motion Planning),附几十种规划算法 差速轮式移动机器人

    2024年02月05日
    浏览(46)
  • 【ROS2机器人入门到实战】Gazebo仿真插件之两轮差速

    当前平台文章汇总地址:ROS2机器人从入门到实战 获取完整教程及配套资料代码,请关注公众号鱼香ROS获取 教程配套机器人开发平台:两驱版| 四驱版 为方便交流,搭建了机器人技术问答社区:地址 fishros.org.cn 小鱼又来了,完成了上节课的Gazebo加载FishBot,但是机器人还是不

    2024年02月03日
    浏览(70)
  • 两轮差速移动机器人从A点移动到B点的C++语言代码

    (⊙﹏⊙)如下同样是AI撰写。 您可以使用两轮差速移动机器人的控制代码来控制它从A点移动到B点。可以使用各种语言,如C,C++,Python等来编写控制代码。 从A点移动到B点的C代码应该是:moveToB(A,C); 差动运动学模型机器人从A点移动到B点的C语言代码是一种基于位置、速度和加

    2024年02月09日
    浏览(50)
  • 基于Matlab的A*算法实现机器人在栅格地图上的三维路径规划

    基于Matlab的A*算法实现机器人在栅格地图上的三维路径规划 一、引言 路径规划是机器人领域中的一个重要问题,尤其是在三维环境中。A*(A-star)算法是一种常用且高效的路径规划算法,可以帮助机器人在给定的栅格地图上找到最短路径。本文将介绍如何使用Matlab来实现A*算

    2024年02月08日
    浏览(52)
  • 基于X86六轮差速移动机器人运动控制器设计与实现(一)软件与硬件架构

    本文研究的六轮差速移动机器人 (Six-Wheeled Differential Mobile Robot , SWDMR) 为了满足资源站到资源站点对点的物资运输,对机器人的跨越障碍能力 有较高的要求。对比传统的四轮移动机器人,六轮移动机器人能够提供更强的驱动 力,而且六轮与四轮相比整车分散到单个车轮的负

    2024年02月12日
    浏览(56)
  • 论文解读 | 机器人路径跟踪的受控纯追踪法

     原创 | 文 BFT机器人 01  摘要 这篇文章是关于机器人路径跟踪的受控纯追踪算法的研究。文章介绍了传统的纯追踪算法以及相关变体,并提出了受控纯追踪算法作为本文的主要贡献。该算法旨在适应实际环境中的服务和工业移动机器人,提供方法来调整机器人的平移速度以适

    2024年02月08日
    浏览(92)
  • 【轨迹跟踪】基于自适应跟踪(EAT)方法的无人机/移动机器人轨迹跟踪(Matlab&Simulink)

    💥💥💞💞 欢迎来到本博客 ❤️❤️💥💥 🏆博主优势: 🌞🌞🌞 博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️ 座右铭: 行百里者,半于九十。 📋📋📋 本文目录如下: 🎁🎁🎁 目录 💥1 概述 📚2 运行结果 🎉3 参考文献 🌈4 Matlab代码Simulink实现 摘

    2024年02月07日
    浏览(47)
  • 目标检测与跟踪 (1)- 机器人视觉与YOLO V8

    目录 1、研究背景 2. 算法原理及对比  2.1 点对特征(Point Pairs)  2.2 模板匹配  2.3 霍夫森林  2.4 深度学习  3、YOLO家族模型演变 4、YOLO V8         机器人视觉识别技术 是移动机器人平台十分关键的技术,代表着 机器人智能化、自动化及先进性的条件判定标准 。  如何在

    2024年02月14日
    浏览(49)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包