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

做直播网站需要哪些技术移动端减肥网站模板

做直播网站需要哪些技术,移动端减肥网站模板,四川网站设计首选柚米科技,怎么做论坛社区网站目录 0 专栏介绍1 路径规划插件的意义2 全局规划插件编写模板2.1 构造规划插件类2.2 注册并导出插件2.3 编译与使用插件 3 全局规划插件开发案例(A*算法)常见问题 0 专栏介绍 本专栏旨在通过对ROS2的系统学习#xff0c;掌握ROS2底层基本分布式原理#xff0c;并具有机器人建… 目录 0 专栏介绍1 路径规划插件的意义2 全局规划插件编写模板2.1 构造规划插件类2.2 注册并导出插件2.3 编译与使用插件 3 全局规划插件开发案例(A*算法)常见问题 0 专栏介绍 本专栏旨在通过对ROS2的系统学习掌握ROS2底层基本分布式原理并具有机器人建模和应用ROS2进行实际项目的开发和调试的工程能力。 详情《ROS2从入门到精通》 1 路径规划插件的意义 在ROS2中路径规划插件为导航系统提供灵活性和可扩展性。路径规划插件允许用户根据特定的需求和环境条件选择不同的路径规划算法和策略。这些插件可以被动态加载和替换从而使机器人可以根据实际情况灵活地调整路径规划行为。这种灵活性使得机器人能够适应不同类型的任务包括室内导航、室外移动和复杂的障碍物避开等。同时也促进了路径规划算法的研究和开发为导航系统的不断改进提供了可能。 2 全局规划插件编写模板 本节以最简单的直线路径规划插件为例介绍ROS2中插件编码的基本范式 2.1 构造规划插件类 所有全局规划插件的基类是nav2_core::GlobalPlanner该基类提供了5个纯虚方法来实现规划器插件一个合法的路径规划插件必须覆盖这5个基本方法 configure()在规划器服务器进入on_configure状态时会调用此方法此方法执行ROS2参数声明和规划器成员变量的初始化activate()在规划器服务器进入on_activate状态时会调用此方法此方法实现规划器进入活动状态前的必要操作deactivate()在规划器服务器进入on_deactivate状态时会调用此方法此方法实现规划器进入非活动状态前的必要操作cleanup()在规划器服务器进入on_cleanup状态时会调用此方法此方法清理为规划器创建的各种资源createPlan()在规划器服务器要求指定开始位姿和目标位姿的全局规划时会调用此方法。此方法输入开始和目标位姿并会返回携带全局规划路径的nav_msgs::msg::Path 在本例中直线规划器的createPlan()函数体很简单就是增量地生成从起点到终点的直线 nav_msgs::msg::Path StraightLine::createPlan(const geometry_msgs::msg::PoseStamped start,const geometry_msgs::msg::PoseStamped goal) {nav_msgs::msg::Path global_path;global_path.poses.clear();global_path.header.stamp node_-now();global_path.header.frame_id global_frame_;// calculating the number of loops for current value of interpolation_resolution_int total_number_of_loop std::hypot(goal.pose.position.x - start.pose.position.x,goal.pose.position.y - start.pose.position.y) /interpolation_resolution_;double x_increment (goal.pose.position.x - start.pose.position.x) / total_number_of_loop;double y_increment (goal.pose.position.y - start.pose.position.y) / total_number_of_loop;for (int i 0; i total_number_of_loop; i) {geometry_msgs::msg::PoseStamped pose;pose.pose.position.x start.pose.position.x x_increment * i;pose.pose.position.y start.pose.position.y y_increment * i;pose.pose.position.z 0.0;pose.pose.orientation.x 0.0;pose.pose.orientation.y 0.0;pose.pose.orientation.z 0.0;pose.pose.orientation.w 1.0;pose.header.stamp node_-now();pose.header.frame_id global_frame_;global_path.poses.push_back(pose);}geometry_msgs::msg::PoseStamped goal_pose goal;goal_pose.header.stamp node_-now();goal_pose.header.frame_id global_frame_;global_path.poses.push_back(goal_pose);return global_path; }2.2 注册并导出插件 在创建了自定义规划器的前提下需要导出该规划器插件以便规划器服务器可以在运行时正确地加载。在ROS2中插件的导出和加载由pluginlib处理。 源文件配置导出宏 #include pluginlib/class_list_macros.hpp PLUGINLIB_EXPORT_CLASS(straightline_planner::StraightLinePlanner, nav2_core::GlobalPlanner)配置插件描述文件xxx_planner_plugin.xml例如本案例为straightline_planner_plugin.xml文件。此XML文件包含以下信息 library path插件库名称及其位置class name规划算法类的名称class type规划算法类的类型base class规划基类的名称统一为nav2_core::GlobalPlannerdescription插件的描述。 实例如下 library pathstraightline_planner_pluginclass namestraightline_planner/StraightLine typestraightline_planner::StraightLine base_class_typenav2_core::GlobalPlannerdescriptionThis is an example of straight path generator./description/class /library配置CMakeLists.txt文件 使用cmake函数pluginlib_export_plugin_description_file()来导出插件。这个函数会将插件描述文件安装到install/share目录中并设置ament索引以使其可被发现实例如下 pluginlib_export_plugin_description_file(nav2_core straightline_planner_plugin.xml)配置package.xml描述文件实例如下 exportbuild_typeament_cmake/build_typenav2_core plugin${prefix}/straightline_planner_plugin.xml / /export2.3 编译与使用插件 编译该插件软件包接着通过配置文件使用插件。 参数的传递链如下首先在simulation.launch.py中引用配置文件navigation.yaml declare_params_file_cmd DeclareLaunchArgument(params_file,default_valueos.path.join(simulation_dir, config, navigation.yaml),descriptionFull path to the ROS2 parameters file to use for all launched nodes)接着在navigation.yaml中修改插件配置默认如下是用的是NavfnPlanner插件 planner_server:ros__parameters:expected_planner_frequency: 20.0use_sim_time: Trueplanner_plugins: [GridBased]GridBased:plugin: nav2_navfn_planner/NavfnPlannertolerance: 0.5use_astar: falseallow_unknown: true将上述替换为自己的插件本案例为 planner_server:ros__parameters:expected_planner_frequency: 20.0use_sim_time: Trueplanner_plugins: [GridBased]GridBased:plugin: straightline_planner/StraightLinePlannerinterpolation_resolution: 0.1接着运行路径规划即可看到规划算法被替换 3 全局规划插件开发案例(A*算法) 接下来正式开始实用型路径规划算法的开发案例以A*算法为例核心规划部分如下所示 ool AStar::plan(const unsigned char* global_costmap, const Node start, const Node goal, std::vectorNode path,std::vectorNode expand) {// clear vectorpath.clear();expand.clear();// open list and closed liststd::priority_queueNode, std::vectorNode, Node::compare_cost open_list;std::unordered_mapint, Node closed_list;open_list.push(start);// get all possible motionsconst std::vectorNode motions Node::getMotion();// main processwhile (!open_list.empty()){// pop current node from open listNode current open_list.top();open_list.pop();// current node does not exist in closed listif (closed_list.find(current.id_) ! closed_list.end())continue;closed_list.insert(std::make_pair(current.id_, current));expand.push_back(current);// goal foundif (current goal){path _convertClosedListToPath(closed_list, start, goal);return true;}// explore neighbor of current nodefor (const auto motion : motions){// explore a new nodeNode node_new current motion;node_new.id_ grid2Index(node_new.x_, node_new.y_);// node_new in closed listif (closed_list.find(node_new.id_) ! closed_list.end())continue;node_new.pid_ current.id_;// next node hit the boundary or obstacle// prevent planning failed when the current within inflationif ((node_new.id_ 0) || (node_new.id_ ns_) ||(global_costmap[node_new.id_] lethal_cost_ * 0.8 global_costmap[node_new.id_] global_costmap[current.id_]))continue;// if using dijkstra implementation, do not consider heuristics costif (!is_dijkstra_)node_new.h_ helper::dist(node_new, goal);// if using GBFS implementation, only consider heuristics costif (is_gbfs_)node_new.g_ 0.0;// else, g will be calculate through node_new current mopen_list.push(node_new);}}return false; }按照第二节的步骤导出并启动规划即可效果如下 常见问题 /opt/ros/noetic/lib/move_base/move_base: symbol lookup error: /home/winter/ROS/ros_learning_tutorials/Lecture19/devel/lib//libmy_planner.so: undefined symbol: _ZN18base_local_planner12CostmapModelC1ERKN10costmap_2d9Costmap2DE 解决方案未定义符号错误undefined symbol一般是依赖配置错误导致采用cfilt工具解析符号 cfilt _ZN18base_local_planner12CostmapModelC1ERKN10costmap_2d9Costmap2DE base_local_planner::CostmapModel::CostmapModel(costmap_2d::Costmap2D const)可以看出是base_local_planner的问题需要在功能包CMakeLists.txt中配置base_local_planner的相关依赖。 cfilt是什么g编译器有名字修饰机制,其目的是给同名的重载函数不同的、唯一的签名识别所有函数在编译后的文件中都会生成唯一的符号cfilt可以逆向解析符号还原函数定位代码。 完整工程代码请联系下方博主名片获取 更多精彩专栏 《ROS从入门到精通》《Pytorch深度学习实战》《机器学习强基计划》《运动规划实战精讲》… 源码获取 · 技术交流 · 抱团学习 · 咨询分享 请联系
http://www.hkea.cn/news/14324376/

相关文章:

  • 电商网站创办过程小白怎么学室内设计
  • 江门网站制作网站建设招聘网站需要哪些资质
  • 80s无水印视频素材网站下载浙江省两学一做网站
  • 中国购物网站排名做网站赚钱流量
  • 北京网站开发最专业的公司直播营销策略有哪些
  • 建个微商城网站多少钱网站主机服务器
  • 个人网站的域名网站后台管理水印怎么做
  • 深圳市建网站公司网页浏览器怎么设置
  • 列表网做优化网站怎么样千万pv网站开发成本
  • 石家庄无极网站建设快递公司网站怎么做
  • 深圳网站开发制作ui图标素材网站
  • 平面设计公司名字大全成都网站优化
  • 网站软件大全免费下修改目录wordpress
  • 铜仁建设集团招聘信息网站手把手教你入侵网站修改数据
  • 网站建设难吗外贸网站优化排名
  • 网站建设保定有没有做网站的高手
  • 谷歌搜索引擎免费入口镜像深圳网站建设网站优化服务
  • 台州网站建设企业企业网站页面
  • 网站兼容ie代码国建设网站
  • 网站建设企业模板wordpress分权限浏览
  • 四川省建设科技协会网站首页凡科做网站在百度能看见吗
  • 深圳市门户网站建设企业官方网站建设的公司
  • 教育培训学校网站建设方案php手机网站如何制作
  • 茂名网站建设哪家好上海app开发推荐中伟科
  • 正规网站建设方案详细品牌高端网站
  • 网站做新闻外链有作用吗然后做网站
  • flash网站as网站面包屑导航怎么做的
  • 北京网站建设是什么微信小程序发布流程
  • 深圳专业网站优化公司报价个人网站设计报告书
  • 订餐网站模板下载太仓市住房和城乡建设局规网站