前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【C++】ROS:fsd_algorithm架构与源码学习

【C++】ROS:fsd_algorithm架构与源码学习

作者头像
DevFrank
发布2024-07-24 15:47:32
950
发布2024-07-24 15:47:32
举报
文章被收录于专栏:C++开发学习交流

😏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包。

环境配置过程如下:

代码语言:javascript
复制
# 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

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

estimation模块主要是loam建图定位和robot_localization定位包,用扩展卡尔曼和无损卡尔曼等方法获取车辆的精确位置和位姿信息。

planning

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

control模块用到了cppadipopt依赖,因为控制中用到了许多数值优化的方法,主要是根据slam地图状态和参考轨迹信息,计算出安全且舒适的控制指令发布到底层,也是分了3种工况。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-01-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 😏1. 项目介绍
  • 😊2. 架构学习
  • 😆3. 源码学习
    • perception
      • estimation
        • planning
          • control
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档