【ROS】fsd_algorithm架构学习与源码分析(致敬)
😏★,°:.☆( ̄▽ ̄)/$:.°★ 😏
这篇文章主要介绍fsd_algorithm架构学习与源码分析。
无专精则不能成,无涉猎则不能通。——梁启超
欢迎来到我的博客,一起学习,共同进步。
喜欢的朋友可以关注一下,下次更新不迷路🥞
文章目录
- :smirk:1. 项目介绍
- :blush:2. 架构学习
- :satisfied:3. 源码学习
😏1. 项目介绍
------------------ 叮叮叮!!! ------------------
大学生无人驾驶方程式有两支很牛的车队,国外苏黎世联邦理工的AMZ-Driverless和国内北理的Smart Shark-BITFSD,大佬们的无人驾驶车和算法做的很顶(这里就不方便放视频了),贴一下他们的网站和Github(大佬们将稳定的算法和仿真平台开源了并分享在github,给我等学习mobai):
AMZ官网:https://www.amzracing.ch/
AMZ Github地址:https://github.com/AMZ-Driverless/fssim
BITFSD官网:http://www.bitfsd.com/
BITFSD Github地址:https://github.com/bitfsd/fsd_algorithm
😊2. 架构学习
------------------ 架构很棒 ------------------
环境配置建议选择:Ubuntu 18.04 and ROS Melodic。
fsd_algorithm算法仓库包含ros和tools。
tools提供了ros模板的生成,可通过py脚本generate.py自助选择生成对应语言(C++/Python)、对应节点名(包名、对象名和类名)的ros节点。
ros中包含了fsd的核心算法,如perception包、estimation包、planning包、control包和与仿真器连接的interface_fssim包。
环境配置过程如下:
# 1.clone,将ros下的包cp到自己的catkin_ws/src中
# 进入ros/control/controller/script,安装cppad和ipopt两个优化库
# 编译 catkin build# 2.clone fssim仿真仓库到另一个catkin中
# 安装依赖,下载gazebo的models等
# 编译 catkin build# 3.进入仿真项目环境,启动仿真环境 roslaunch fssim auto_fssim.launch
# 然后启动算法包里的仿真接口 roslaunch fssim_interface fssim_interface only_interface.launch
# 最后运行相关算法:
# roslaunch fsd_common_meta trackdrive.launch
# roslaunch fsd_common_meta skidpad.launch
# roslaunch fsd_Common_meta acceleration.launch
😆3. 源码学习
------------------ 代码写的也不错 ------------------
perception模块包含YOLO-ROS(darknet_ros)的目标检测包,用coco数据集训练,可配置参数文件在darkned_ros/config/ros.yaml,订阅的话题是/camera/rgb/image_raw,发布的话题有/darknet_ros/found_object、/darknet_ros/bounding_boxes和/darknet_ros/detection_image,此外还有动作发送/darknet_ros/check_for_objects,以此实现目标检测结果的获取;激光雷达聚类包Lidar Cluster,基于PCL,订阅的是威力登的点云/velodyne_points,发布的是聚类结果/perception/lidar_cluster,参数配置在./config/lidar_cluster.yaml,在lidar_cluster中,用preprocessing先对点云进行过滤,再用ClusterProcessing进行聚类处理。
estimation模块主要是loam建图定位和robot_localization定位包,用扩展卡尔曼和无损卡尔曼等方法获取车辆的精确位置和位姿信息。
planning模块有边界检测、线检测、8字检测和路径生成这几个包。边界检测boundary_detector的核心思想是搜索和选择,基于OpenCV3,订阅/local_map,发布/planning/boundary_detections和其他几个显示话题,基于地图边界信息生成最优路径和边界结果;线检测line_detector用到了霍夫变换,订阅雷达聚类结果/perception/lidar_cluster,发布全局路径/planning/global_path,可以看到本仓库的算法的模板是getNodeRate + loadParameters + subscribeToTopics + publishToTopics + run + sendMsg 和一个callback函数,这个包核心在于createPath创建全局路径这里;线生成Path Generator包应该是进行路径优化,会根据不同的任务生成不同的参考路径,如直线加速是根据目标点参数,8字是根据转换矩阵,循迹任务是根据地图信息,最后生成控制指令并发布。
control模块用到了cppad和ipopt依赖,因为控制中用到了许多数值优化的方法,主要是根据slam地图状态和参考轨迹信息,计算出安全且舒适的控制指令发布到底层,也是分了3种工况。

以上。
相关文章:
【ROS】fsd_algorithm架构学习与源码分析(致敬)
😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍fsd_algorithm架构学习与源码分析。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下&am…...
PHP最简单自定义自己的框架定义常量自动生成目录(三)
1、框架入口增加模块定义,实现多模块功能 index.php 定义模块 <?php //定义当前请求模块 define("MODULE",index); require "./core/KJ.php"; 创建后台模块admin.php <?php define("MODULE",admin); require "./cor…...
栈和队列详解
目录 栈 栈的概念及结构: 栈的实现: 代码实现: Stack.h stack.c 队列: 概念及结构: 队列的实现: 代码实现: Queue.h Queue.c 拓展: 循环队列(LeetCode题目链接࿰…...
数据结构 | 树的定义及实现
目录 一、树的术语及定义 二、树的实现 2.1 列表之列表 2.2 节点与引用 一、树的术语及定义 节点: 节点是树的基础部分。它可以有自己的名字,我们称作“键”。节点也可以带有附加信息,我们称作“有效载荷”。有效载荷信息对于很多树算法…...
Delphi7通过VB6之COM对象调用FreeBASIC写的DLL功能
VB6写ActiveX COM组件比较方便,不仅PowerBASIC与VB6兼容性好,Delphi7与VB6兼容性也不错,但二者与FreeBASIC兼容性在字符串处理上差距比较大,FreeBASIC是C化的语言,可直接使用C指令。下面还是以实现MKI/CVI, MKL/CVL, M…...
【Linux 网络】NAT技术——缓解IPv4地址不足
NAT技术 NAT 技术背景NAT IP转换过程NAPTNAT 技术的缺陷 NAT(Network Address Translation,网络地址转换)技术,是解决IP地址不足的主要手段,并且能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算…...
Flink 两阶段提交(Two-Phase Commit)协议
Flink 两阶段提交(Two-Phase Commit)是指在 Apache Flink 流处理框架中,为了保证分布式事务的一致性而采用的一种协议。它通常用于在流处理应用中处理跨多个分布式数据源的事务性操作,确保所有参与者(数据源或计算节点…...
【Docker晋升记】No.2 --- Docker工具安装使用、命令行选项及构建、共享和运行容器化应用程序
文章目录 前言🌟一、Docker工具安装🌟二、Docker命令行选项🌏2.1.docker run命令选项:🌏2.2.docker build命令选项:🌏2.3.docker images命令选项:🌏2.4.docker ps命令选项…...
[OnWork.Tools]系列 00-目录
OnWork.Tools系列文章目录 OnWork.Tools系列 01-简介_末叶的博客-CSDN博客OnWork.Tools系列 02-安装_末叶的博客-CSDN博客OnWork.Tools系列 03-软件设置_末叶的博客-CSDN博客OnWork.Tools系列 04-快捷启动_末叶的博客-CSDN博客OnWork.Tools系列 05-系统工具_末叶的博客-CSDN博…...
Cadvisor+InfluxDB+Grafan+Prometheus(详解)
目录 一、CadvisorInfluxDBGrafan案例概述 (一)Cadvisor Cadvisor 产品特点: (二)InfluxDB InfluxDB应用场景: InfluxDB主要功能: InfluxDB主要特点: (三&#…...
AtcoderABC222场
A - Four DigitsA - Four Digits 题目大意 给定一个整数N,其范围在0到9999之间(包含边界)。在将N转换为四位数的字符串后,输出它。如果N的位数不足四位,则在前面添加必要数量的零。 思路分析 可以使用输出流的格式设…...
架构实践方法
一、识别复杂度 将主要的复杂度问题列出来,然后根据业务、技术、团队等综合情况进行排序,优先解决当前面临的最主要的复杂度问题。对于按照复杂度优先级解决的方式,存在一个普遍的担忧:如果按照优先级来解决复杂度,可…...
点淘的MCN机构申请详细入驻指南!
消费趋势的变化,来自消费人群的变化。 后疫情时代,经济复苏的反弹力度不足,人们开始怀疑我们正从前几年的消费升级,跌入消费降级的时代,但这并不能准确概括消费市场的变化。 仔细翻看各大奢侈品集团的财报࿰…...
事务和事务的隔离级别
1.4.事务和事务的隔离级别 1.4.1.为什么需要事务 事务是数据库管理系统(DBMS)执行过程中的一个逻辑单位(不可再进行分割),由一个有限的数据库操作序列构成(多个DML语句,select语句不包含事务&…...
每日一题 34在排序数组中查找元素的第一个和最后一个位置(二分查找)
题目 给你一个按照非递减顺序排列的整数数组 nums,和一个目标值 target。请你找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target,返回 [-1, -1]。 你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。 示例 1&…...
Spring Boot Admin 环境搭建与基本使用
Spring Boot Admin 环境搭建与基本使用 一、Spring Boot Admin是什么二、提供了那些功能三、 使用Spring Boot Admin3.1搭建Spring Boot Admin服务pom文件yml配置文件启动类启动admin服务效果 3.2 common-apipom文件feignhystrix 3.3服务消费者pom文件yml配置文件启动类control…...
JVM之内存模型
1. Java内存模型 很多人将Java 内存结构与java 内存模型傻傻分不清,java 内存模型是 Java Memory Model(JMM)的意思。 简单的说,JMM 定义了一套在多线程读写共享数据时(成员变量、数组)时,对数据…...
音视频 vs2017配置FFmpeg
vs2017 ffmpeg4.2.1 一、首先我把FFmpeg整理了一下,放在C盘 二、新建空项目 三、添加main.cpp,将bin文件夹下dll文件拷贝到cpp目录下 #include<stdio.h> #include<iostream>extern "C" { #include "libavcodec/avcodec.h&…...
【项目管理】PMP备考宝典-第二章《环境》
第一节:概述 1.项目所处的组织环境 (1)事业环境因素(EEFs) 组织内部的事业环境因素: 企业都会有愿景、使命、价值观,这些决定了企业的发展方向。不忘初心,坚定地走自己的路&#…...
ELK 将数据流转换回常规索引
ELK 将数据流转换回常规索引 现象:创建索引模板是打开了数据流,导致不能创建常规索引,并且手动修改、删除索引模板失败 "reason" : "composable template [logs_template] with index patterns [new-pattern*], priority [2…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...
Java 语言特性(面试系列2)
一、SQL 基础 1. 复杂查询 (1)连接查询(JOIN) 内连接(INNER JOIN):返回两表匹配的记录。 SELECT e.name, d.dept_name FROM employees e INNER JOIN departments d ON e.dept_id d.dept_id; 左…...
脑机新手指南(八):OpenBCI_GUI:从环境搭建到数据可视化(下)
一、数据处理与分析实战 (一)实时滤波与参数调整 基础滤波操作 60Hz 工频滤波:勾选界面右侧 “60Hz” 复选框,可有效抑制电网干扰(适用于北美地区,欧洲用户可调整为 50Hz)。 平滑处理&…...
是否存在路径(FIFOBB算法)
题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...
MinIO Docker 部署:仅开放一个端口
MinIO Docker 部署:仅开放一个端口 在实际的服务器部署中,出于安全和管理的考虑,我们可能只能开放一个端口。MinIO 是一个高性能的对象存储服务,支持 Docker 部署,但默认情况下它需要两个端口:一个是 API 端口(用于存储和访问数据),另一个是控制台端口(用于管理界面…...
android RelativeLayout布局
<?xml version"1.0" encoding"utf-8"?> <RelativeLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_parent"android:layout_height"match_parent"android:gravity&…...
rknn toolkit2搭建和推理
安装Miniconda Miniconda - Anaconda Miniconda 选择一个 新的 版本 ,不用和RKNN的python版本保持一致 使用 ./xxx.sh进行安装 下面配置一下载源 # 清华大学源(最常用) conda config --add channels https://mirrors.tuna.tsinghua.edu.cn…...
大数据治理的常见方式
大数据治理的常见方式 大数据治理是确保数据质量、安全性和可用性的系统性方法,以下是几种常见的治理方式: 1. 数据质量管理 核心方法: 数据校验:建立数据校验规则(格式、范围、一致性等)数据清洗&…...
相关类相关的可视化图像总结
目录 一、散点图 二、气泡图 三、相关图 四、热力图 五、二维密度图 六、多模态二维密度图 七、雷达图 八、桑基图 九、总结 一、散点图 特点 通过点的位置展示两个连续变量之间的关系,可直观判断线性相关、非线性相关或无相关关系,点的分布密…...
LeetCode 0386.字典序排数:细心总结条件
【LetMeFly】386.字典序排数:细心总结条件 力扣题目链接:https://leetcode.cn/problems/lexicographical-numbers/ 给你一个整数 n ,按字典序返回范围 [1, n] 内所有整数。 你必须设计一个时间复杂度为 O(n) 且使用 O(1) 额外空间的算法。…...
