当前位置: 首页 > news >正文

常州市钟楼建设局网站网站建设与管理心得体会和总结

常州市钟楼建设局网站,网站建设与管理心得体会和总结,足彩推荐网站开发,网络技术工作室目录 0 专栏介绍1 ROS2路径平滑器介绍2 平滑器插件编写模板2.1 构造平滑器插件类2.2 注册并导出插件2.3 编译与使用插件 3 基于B样条曲线的路径平滑 0 专栏介绍 本专栏旨在通过对ROS2的系统学习,掌握ROS2底层基本分布式原理,并具有机器人建模和应用ROS2…

目录

  • 0 专栏介绍
  • 1 ROS2路径平滑器介绍
  • 2 平滑器插件编写模板
    • 2.1 构造平滑器插件类
    • 2.2 注册并导出插件
    • 2.3 编译与使用插件
  • 3 基于B样条曲线的路径平滑

0 专栏介绍

本专栏旨在通过对ROS2的系统学习,掌握ROS2底层基本分布式原理,并具有机器人建模和应用ROS2进行实际项目的开发和调试的工程能力。

🚀详情:《ROS2从入门到精通》


1 ROS2路径平滑器介绍

路径平滑器(smoother)Nav2中的一个任务服务器,它实现了nav2_behavior_tree::SmoothPath接口,主要负责改善路径的平滑度或质量,Nav2中默认的平滑器包括

名称作者介绍
Simple SmootherSteve Macenski为不可行的2D规划器提供更平滑的简单路径
Constrained SmootherMatej VargovcikSteve Macenski使用约束问题求解器优化各种标准(如平滑度或与障碍物的距离)的路径平滑器,保持最小转弯半径
Savitzky-Golay SmootherSteve Macenski使用Savitzky-Golay滤波器通过数字信号处理平滑路径,以去除路径中的噪声。

本文介绍路径平滑器插件的编写范式,并提供一个全新的基于B样条曲线平滑的插件

2 平滑器插件编写模板

2.1 构造平滑器插件类

所有路径平滑插件的基类是nav2_core::Smoother,该基类提供了7个纯虚方法来实现控制器插件,一个合法的平滑器插件必须覆盖这7个基本方法:

  • configure():在平滑器服务器进入on_configure状态时会调用此方法,此方法执行ROS2参数声明和平滑器成员变量的初始化;
  • activate():在平滑器服务器进入on_activate状态时会调用此方法,此方法实现平滑器进入活动状态前的必要操作;
  • deactivate():在平滑器服务器进入on_deactivate状态时会调用此方法,此方法实现平滑器进入非活动状态前的必要操作;
  • cleanup():在平滑器服务器进入on_cleanup状态时会调用此方法,此方法清理为平滑器创建的各种资源;
  • smooth():接受一个原始路径,并提供具体的平滑实现

按照上述标准,本文案例中B样条平滑器的基本成员函数和变量如下所示

namespace nav2_smoother
{class BSplineSmoother : public nav2_core::Smoother{public:/*** @brief A constructor for nav2_smoother::BSplineSmoother*/BSplineSmoother() = default;/*** @brief A destructor for nav2_smoother::BSplineSmoother*/~BSplineSmoother() override = default;void configure(const rclcpp_lifecycle::LifecycleNode::WeakPtr &,std::string name, std::shared_ptr<tf2_ros::Buffer>,std::shared_ptr<nav2_costmap_2d::CostmapSubscriber>,std::shared_ptr<nav2_costmap_2d::FootprintSubscriber>) override;void cleanup() override { costmap_sub_.reset(); }void activate() override { RCLCPP_WARN(logger_, "Using: B-spline smoother"); }void deactivate() override {}/*** @brief Method to smooth given path** @param path In-out path to be smoothed* @param max_time Maximum duration smoothing should take* @return If smoothing was completed (true) or interrupted by time limit (false)*/bool smooth(nav_msgs::msg::Path &path,const rclcpp::Duration &max_time) override;std::shared_ptr<trajectory_generation::BSpline> bspline_gen_;std::shared_ptr<nav2_costmap_2d::CostmapSubscriber> costmap_sub_;rclcpp::Logger logger_{rclcpp::get_logger("BSplineSmoother")};};
} 

2.2 注册并导出插件

在创建了自定义平滑器的前提下,需要导出该平滑器插件以便平滑器服务器可以在运行时正确地加载。在ROS2中,插件的导出和加载由pluginlib处理。

  • 源文件配置导出宏

    #include "pluginlib/class_list_macros.hpp"
    PLUGINLIB_EXPORT_CLASS(nav2_smoother::BSplineSmoother, nav2_core::Smoother)
    
  • 配置插件描述文件xxx_smoother.xml,例如本案例为bspline_smoother.xml文件。此XML文件包含以下信息:

    • library path:插件库名称及其位置;
    • class name:平滑算法类的名称;
    • class type:平滑算法类的类型;
    • base class:平滑基类的名称,统一为nav2_core::Smoother
    • description:插件的描述。

    实例如下

    <class_libraries><library path="bspline_smoother"><class type="nav2_smoother::BSplineSmoother" name="bspline_smoother/BSplineSmoother" base_class_type="nav2_core::Smoother"><description>B-Spline smoother</description></class></library>
    </class_libraries>
    
  • 配置CMakeLists.txt文件
    使用cmake函数pluginlib_export_plugin_description_file()来导出插件。这个函数会将插件描述文件安装到install/share目录中,并设置ament索引以使其可被发现,实例如下

    pluginlib_export_plugin_description_file(nav2_core bspline_smoother.xml)
    
  • 配置package.xml描述文件,实例如下:

    <export><build_type>ament_cmake</build_type><nav2_core plugin="${prefix}/bspline_smoother.xml" />
    </export>
    

2.3 编译与使用插件

编译该插件软件包,接着通过配置文件使用插件。

参数的传递链如下:首先在simulation.launch.py中引用配置文件navigation.yaml

declare_params_file_cmd = DeclareLaunchArgument('params_file',default_value=os.path.join(simulation_dir, 'config', 'navigation.yaml'),description='Full path to the ROS2 parameters file to use for all launched nodes')

接着在navigation.yaml中修改插件配置,默认如下,用的是SimpleSmoother插件:

smoother_server:ros__parameters:use_sim_time: Truesmoother_plugins: ["simple_smoother"]simple_smoother:plugin: "nav2_smoother::SimpleSmoother"tolerance: 1.0e-10max_its: 1000do_refinement: True

将上述替换为自己的插件,本案例为:

smoother_server:ros__parameters:use_sim_time: Truesmoother_plugins: ["simple_smoother"]simple_smoother:plugin: "bspline_smoother/BSplineSmoother"

接着运行即可看到平滑算法被替换

3 基于B样条曲线的路径平滑

B样条曲线是一种用于表示和描绘曲线的数学工具,它在计算机图形学、计算机辅助设计、计算机动画和数值分析等领域得到广泛应用。其名称中的B代表了基本(basis),而样条则是在各个领域中广泛应用的一种绘制曲线的技术,例如计算机图形学、物理学模拟、金融和经济分析等。在计算机图形学中,样条通常用于创建平滑的曲线和曲面,以便在三维场景中呈现出更真实的效果。在物理学模拟中,样条可用于描述物体的运动轨迹和变形过程。

在这里插入图片描述
具体算法原理请参考:

  • 曲线生成 | 图解B样条曲线生成原理(基本概念与节点生成算法)
  • 曲线生成 | 图解B样条曲线生成原理(附ROS C++/Python/Matlab仿真)

平滑器的效果如下所示,其中红色是原始A*算法的规划路径,绿色是B样条曲线平滑后的路径

在这里插入图片描述

在这里插入图片描述

完整代码通过下方博主名片联系获取


🔥 更多精彩专栏

  • 《ROS从入门到精通》
  • 《Pytorch深度学习实战》
  • 《机器学习强基计划》
  • 《运动规划实战精讲》

👇源码获取 · 技术交流 · 抱团学习 · 咨询分享 请联系👇
http://www.yayakq.cn/news/996391/

相关文章:

  • 网站开发标准合同网站怎么提高收录
  • 404网站怎么打开seo虚拟外链
  • 开封网站建设培训班福田公司官网
  • 企业网站备案所需材料 amp长沙网站制作服务
  • php做企业网站管理系统网站建设哪家好 万维科技
  • 怎样选择网站建设公司安徽省建设厅网站职称
  • 赣州那里有做网站的公司最近国内重大新闻事件
  • 小米wifi设置网址入口网站高级ui设计是什么
  • 如何做网站同步别人的商城广州网站建设说说外链的建设
  • 怎么用虚拟主机做网站步骤学校网站开发与设计
  • WordPress建站评价免费做试卷的网站
  • 国外虚拟物品交易网站杰迅山西网站建设
  • 免费制作自己的微网站吗厦门住房建设局网站首页
  • 长沙 做营销型网站的公司广州大型网站建设
  • 新沂做网站商业招商网站
  • ps做 网站标准尺寸是多少合适做网站图结构
  • 为什么要建设旅游网站怎么建立一个网站里面可以查询资料
  • 简单的asp网站做网站专题页的字大小是多少
  • 建立网站需要投入的成本vs2008 新建网站
  • 建设局合同备案是哪个网站河南省城市建设网站
  • 网站免费制作教程百度知道一下首页
  • 网站建设什么原因最主要wordpress企业末班
  • 怎么建立网站数据库网站建设行业地位
  • 网站面包屑如何做cpanel安装wordpress中文教程
  • 北京门户网站网址如何在网站页面添加代码
  • 2016年做网站好不好90平方简装图3一4万
  • 湘潭网站推广爱企查企业信息查询
  • 凤阳县城乡建设局网站建设网站的相关技术指标
  • 南充网站设计电商平台网站开发
  • python 网站开发实战工业软件的前十名龙头