【toolschain algorithm cpp ros】cpp工厂模式实现--后续填充具体规划算法,控制器版的已填充了算法接入了仿真器

写在前面

现在局势危机,于是想复习一下之前写的设计模式,之前提到,做过一个闭环仿真器(借用ros),见https://blog.csdn.net/weixin_46479223/article/details/134864123我的控制器的建立遵循了工厂模式(多态、工厂、客户订阅)。 目前按照之前的设计,把规划器也改写成类似的模式。未来接入我的闭环仿真器械中。

本篇文章只设计框架的搭建,具体算法lattice搭建完毕填充以及其他算法为看时间缓慢的更新吧。

有错误和问题 还请大大们指点阿

基本结构

在这里插入图片描述
最外面是我的ros节点(目前刚建立没有接入ros以及控制器 用while先测试了

然后包一个planner的调度器(scheduler:planner.cpp)
传建一个基类然后动态多态的方式实现不同规划器的注册,把根据类型注册的规划器放入到一个哈希map,实现增删。(这里临时固定)。控制器和规划器的这个架构原来的设想是根据不同的场景可以有一个判断器自动实现合适的控制器和规划器的切换(也就是自动驾驶行泊一体啦)

对外接口是run和init和update,基本每行代码都有注释。

参数使用yaml管理

跑起来的样子

之前跑起来的并且接入了我的闭环无敌可进化仿真器的视频。我的git也放了一版。
这里不能贴视频。
仿真器想表现车辆追随一段轨迹,前面是轨迹(预瞄)。后面是我的车实不断更新的位置。(实现了闭环)
在这里插入图片描述
0 1 2 3 4 是假设的控制类型,这里先跑0.

部分重要代码

代码在git上

origin git@github.com:HerrQQ/MPotherSet.git (fetch)
origin git@github.com:HerrQQ/MPotherSet.git (push)
第一版如此
未来不断调整

工厂类

#ifndef _PlannerFactory_H_
#define _PlannerFactory_H_#include "planner_A.h"
#include "planner_B.h"
#include "planner_C.h"
#include "planner_D.h"/*** @brief PlannerFactory* @author kaifeng* @date 
*/
#include <memory>
namespace planner { 
class PlannerFactory//factory 
{
public :PlannerFactory()=default;~PlannerFactory()=default;/*** @brief creat planner* @param needed planner type*/std::shared_ptr<PlannerBase> fCreateplanner (const PlannerType& type){if (type == B) {return std::make_shared<planner_B>();}else if (type == A) {return std::make_shared<planner_A>();}else if (type == C) {return std::make_shared<planner_C>();}else if (type == D) {return std::make_shared<planner_D>();}else {return nullptr;}}};
}// class PlannerFactory_D :public PlannerFactory //factory son
// {
// public ://     PlannerFactory_D()=default;
//     virtual ~PlannerFactory_D() override
//     {
//         LOG(INFO)<<"D plannerBase created"<<std::endl;
//     }
//     virtual planner::plannerBase* fCreateplanner ()override
//     {
//         return new planner::planner_D();
//     }
// };// class PlannerFactory_A :public PlannerFactory //factory son
// {
// public ://     PlannerFactory_A()=default;
//     virtual ~PlannerFactory_A() override
//     {
//         LOG(INFO)<<"A plannerBase created"<<std::endl;
//     }
//     virtual planner::plannerBase* fCreateplanner ()override
//     {
//         return new planner::planner_A();
//     }
// };// class PlannerFactory_B :public PlannerFactory //factory son
// {
// public ://     PlannerFactory_B()=default;
//     virtual ~PlannerFactory_B() override
//     {
//         LOG(INFO)<<"B plannerBase created"<<std::endl;
//     }
//     virtual planner::plannerBase* fCreateplanner ()override
//     {
//         return new planner::planner_B();
//     }
// };// class PlannerFactory_B :public PlannerFactory //factory son
// {
// public ://     PlannerFactory_B()=default;
//     virtual ~PlannerFactory_B() override
//     {
//         LOG(INFO)<<"B plannerBase created"<<std::endl;
//     }
//     virtual planner::plannerBase* fCreateplanner ()override
//     {
//         return new planner::planner_B();
//     }
// };#endif

基类

#ifndef _PLANNER_H_
#define _PLANNER_H_
#include "structPlanner_t.h"
#include <Eigen/Dense>
#include <vector>
#include <map>
#include <unordered_map>
#include "glog/logging.h"
#include <yaml-cpp/yaml.h>/*** @brief Planner_base* @author kaifeng* @date 
*/namespace planner { /*** @brief base class for all planners.*/
class PlannerBase//client
{public:/*** @brief constructor*/PlannerBase() = default;/*** @brief destructor*/virtual ~PlannerBase() = default;/*** @brief initialize PlannerBase* @param config_path path of config file, yaml  * @return Status initialization status*/virtual uint8_t initialize(const std::string& config_path) = 0;/*** @brief compute planner command* @param PlannerDataFlow saving relativ infos of planning* @param locInfo reference of LocInfo instance* @param VehicleState reference of VehicleState instance* @return reference of Command instance, which is private member*/virtual void run( const Location& locInfo,const VehicleState& VehicleState,PlannerDataFlow& PlannerDataFlow) = 0;virtual void noRun(const Location& locInfo,const VehicleState& VehicleState) = 0;/*** @brief stop planner*/// virtual void stop();protected:double cmd_; //Command cmd_;//Debug debug_ptr_;
};}#endif

其中一个子class

#ifndef __A_planner_h__
#define __A_planner_h__#include "planner_base.h"
#include "glog/logging.h"
#include <vector>
#include <map>
#include <cmath>
#include <utility>/*** @brief A* @author kaifeng* @date 
*/
namespace planner
{class planner_A:public PlannerBase{ // product sonpublic:planner_A(){LOG(INFO)<<"A in progress"<<std::endl;}~planner_A(){LOG(INFO)<<"A stop"<<std::endl;}uint8_t initialize(const std::string& config_path)override;void run( const Location& locInfo,const VehicleState& VehicleState,PlannerDataFlow& PlannerDataFlow) override;void noRun(const Location& locInfo,const VehicleState& VehicleState) override;private:/*** @brief read configuration*/void readConfig(const std::string& path);private:// cost parametersstruct CostParameter {float Xxxx{0.f};float xXxx{0.f};float xxXx{0.f};float xxxX{0.f};};CostParameter* p_parameter_;// };}
#endif

调度

在这里插入图片描述

commen 内实现了几个filter 封装成了类

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/225145.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【低照度图像增强系列(2)】Retinex(SSR/MSR/MSRCR)算法详解与代码实现

前言 ☀️ 在低照度场景下进行目标检测任务&#xff0c;常存在图像RGB特征信息少、提取特征困难、目标识别和定位精度低等问题&#xff0c;给检测带来一定的难度。 &#x1f33b;使用图像增强模块对原始图像进行画质提升&#xff0c;恢复各类图像信息&#xff0c;再使用目标检…

C#与php自定义数据流传输

C#与php自定义数据流传输 介绍一、客户端与服务器数据传输流程图客户端发送数据给服务器&#xff1a;服务器返回数据给客户端&#xff1a; 二、自定义数据流C#版本数据流PHP版本数据流 三、数据传输测试1.在Unity中创建一个C#脚本NetWorkManager.cs2.服务器www目录创建StreamTe…

【Linux驱动】驱动框架的进化 | 总线设备驱动模型

&#x1f431;作者&#xff1a;一只大喵咪1201 &#x1f431;专栏&#xff1a;《Linux驱动》 &#x1f525;格言&#xff1a;你只管努力&#xff0c;剩下的交给时间&#xff01; 目录 &#x1f969;驱动框架的进化&#x1f960;分层&#x1f960;面向对象&#x1f960;编程&am…

使用 Jekyll 构建你的网站 - 初入门

文章目录 一、Jekyll介绍二、Jekyll安装和启动2.1 配置Ruby环境1&#xff09;Windows2&#xff09;macOS 2.2 安装 Jekyll2.3 构建Jekyll项目2.4 启动 Jekyll 服务 三、Jekyll常用命令四、目录结构4.1 主要目录4.2 其他的约定目录 五、使用GitLink构建Jekyll博客5.1 生成Jekyll…

同义词替换器降低论文重复率的最新技术解析

大家好&#xff0c;今天来聊聊同义词替换器降低论文重复率的最新技术解析&#xff0c;希望能给大家提供一点参考。 以下是针对论文重复率高的情况&#xff0c;提供一些修改建议和技巧&#xff0c;可以借助此类工具&#xff1a; 标题&#xff1a;同义词替换器降低论文重复率的最…

跟着LearnOpenGL学习11--材质

文章目录 一、材质二、设置材质三、光的属性四、不同的光源颜色 一、材质 在现实世界里&#xff0c;每个物体会对光产生不同的反应。 比如&#xff0c;钢制物体看起来通常会比陶土花瓶更闪闪发光&#xff0c;一个木头箱子也不会与一个钢制箱子反射同样程度的光。 有些物体反…

使用Clion配置Qt开发过程中的很多坑

如果你想使用Clion开发Qt软件 如果你想在Windows上使用Clion开发Qt 如果你还想使用MSVC编译器开发Qt 但是却遇到了各种各种编译报错&#xff0c;那么恭喜你这些坑都有人帮你踩过了 报错一 CMake Error at CMakeLists.txt:25 (find_package):Could not find a package config…

冒泡排序(C语言)

void BubbleSort(int arr[], int len) {int i, j, temp;for (i 0; i < len; i){for (j len - 1; j > i; j--){if (arr[j] > arr[j 1]){temp arr[j];arr[j] arr[j 1];arr[j 1] temp;}}} } 优化&#xff1a; 设置标志位flag&#xff0c;如果发生了交换flag设置…

西南科技大学计算机网络实验二 (IP协议分析与以太网协议分析)

一、实验目的 通过分析由跟踪执行traceroute程序发送和接收捕获得到的IP 数据报,深入研究在IP 数据报中的各种字段,理解IP协议。基于ARP命令和Ethereal进行以太网帧捕获与分析,理解和熟悉ARP协议原理以及以太网帧格式。 二、实验环境 与因特网连接的计算机网络系统;主机操…

ES-mapping

类似数据库中的表结构定义&#xff0c;主要作用如下 定义Index下的字段名( Field Name) 定义字段的类型&#xff0c;比如数值型、字符串型、布尔型等定义倒排索引相关的配置&#xff0c;比如是否索引、记录 position 等 index_options 用于控制倒排索记录的内容&#xff0c;有如…

敏捷开发 - 知识普及

敏捷开发- Scrum 前言 知乎有一篇文章描写Scrum,我觉得比较好:https://zhuanlan.zhihu.com/p/631459977 简单科普下PM和PMO 原文来源:https://zhuanlan.zhihu.com/p/546820914 PM - 项目经理(Project Manager) ​ 需要具备以下能力 ​ 1.号召力 2.影响力 3.交流能力 4.应…

MySQL 导入数据报错MySQL server has gone away

SQL语句太大了 稍微难以测试和验证&#xff0c;但是MySQL使用最大数据包站站点进行服务器和客户端之间的通信。如果语句包含大字段&#xff0c;则可能由于SQL语句的大小&#xff0c;而被中止。 我们可以通过语句查看一下允许的最大包大小&#xff1a;show global variables lik…

k8s---kubernets

目录 一、Kurbernetes 1.2、K8S的特性&#xff1a; 1.3、docker和K8S&#xff1a; 1.4、K8S的作用&#xff1a; 1.5、K8S的特性&#xff1a; 二、K8S集群架构与组件&#xff1a; 三、K8S的核心组件&#xff1a; 一、master组件&#xff1a; 1、kube-apiserver&#xff1…

蓝桥杯的学习规划

c语言基础&#xff1a; Python语言基础 学习路径&#xff1a;画框的要着重学习

音频修复增强软件iZotope RX 10 mac特点介绍

iZotope RX 10 mac是一款音频修复和增强软件。 iZotope RX 10 mac软件特点 声音修复&#xff1a;iZotope RX 10可以去除不良噪音、杂音、吱吱声等&#xff0c;使音频变得更加清晰干净。 音频增强&#xff1a;iZotope RX 10支持对音频进行音量调节、均衡器、压缩器、限制器等处…

网络安全保障领域

计算机与信息系统安全---最主要领域 云计算安全 IaaS、PasS、SaaS(裸机&#xff0c;装好软件的电脑&#xff0c;装好应用的电脑) 存在风险&#xff1a;开源工具、优先访问权、管理权限、数据处、数据隔离、数据恢复、调查支持、长期发展风险 云计算安全关键技术&#xff1a;可信…

【C++逆向 - 1】C++函数新特性

内联函数 本质&#xff1a;用函数代码替换函数调用 使用方式&#xff1a;在函数声明和函数定义前加上 inline 关键字 笔者感觉跟C语言中的宏定义差不多&#xff0c;但是内联函数更加“智能”&#xff08;应该是编译器更加智能&#xff09;。即使程序员将函数作为内联函数&am…

华为数通方向HCIP-DataCom H12-831题库(多选题:221-240)

第221题 在割接项目的项目调研阶段需要对现网硬件环境进行观察,主要包括以下哪些内容? A、设备的位置 B、ODF位置 C、接口标识 D、光纤接口对应关系 答案:ABCD 解析: 在项目割接前提的项目调研阶段,需要记录下尽可能详细的信息。 第222题 以下哪些项能被正则表达式10*成…

Python 新规范 pyproject.toml 完全解析

多谢&#xff1a;thank Python从PEP 518开始引入的使用pyproject.toml管理项目元数据的方案。 该规范目前已经在很多开源项目中得以支持&#xff1a; Django 这个 Python 生态的顶级项目在 5 个月之前开始使用 pyproject.tomlPytest 这个 Python 生态测试框架的领头羊在 4 个…

智慧幼儿园视频监管方案及实施建议:AI智能技术构建新引擎

一、背景需求 随着科技的快速发展&#xff0c;智慧化监管已成为幼儿园管理的重要趋势。智慧幼儿园监管解决方案通过引入先进的技术手段&#xff0c;提高幼儿园的管理效率&#xff0c;保障幼儿的安全与健康&#xff0c;为家长提供更便捷的服务。为了保障幼儿的安全&#xff0c;…