基于ros1的 apollo 7.0.0规划控制算法

news2024/11/17 7:50:25

apollo.ros-7.0.0

上次给大家带来了之前学习apollo时开发的内容apollo.ros-1.0.0和apollo.ros-3.0.0,主要是针对apollo 1.0.0和3.0.0版本进行了ros1下的移植和规划控制算法的学习。本次在之前工作的基础上,针对apollo 7.0.0版本,进行了ros1下的移植更新,针对apollo原有方案初学者难入门,测试操作不便等问题,能很好进行相关算法学习和测试,并可以将自己的算法增加到框架中,应用于机器人或者无人驾驶中。

项目开发详细了解可在评论区留言。

基于ros1的 apollo 7.0.0规划控制算法

简介

此项目为基于ros1的apollo7.0.0规划控制算法,移植主要目的如下:

  • 学习apollo框架设计
  • 学习apollo中的运动控制算法
  • 学习apollo中的决策规划算法

目前只针对apollo中部分模块进行了移植,移植模块有:

.
├── docker
│   ├── build
│   └── scripts
├── images
├── LICENSE
├── modules
│   ├── apollo_common
│   ├── apollo_control
│   ├── apollo_map
│   ├── apollo_msgs
│   ├── apollo_planning
│   ├── apollo_routing
│   └── apollo_simulator
└── README.md

目前移植版本能实现车辆在高精度地图下进行routingplanningcontrol仿真测试,与原有版本改动点如下:

  • 使用原生ros(基于noetic)替代apollo中的CyberRT
  • 使用ros pkg封装apollo中的module
  • 使用cmake进行编译
  • protobuff版本提升到3.6.1
  • 增加sim_controlsim_pnc仿真工具包apollo_simulator
  • 增加高精度地图rviz显示
  • 增加动/静态障碍物rviz设置
  • 更多的高精度地图测试数据

代码部署

docker安装

  • 在线安装

    curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
    
  • 安装验证:安装完成执行 sudo docker version看看docker目前安装的版本等信息:
    在这里插入图片描述

  • 使用配置:避免每次新开一个终端都要sudo输入权限,给docker增加用户的权限。执行完成后重启电脑之后生效

    sudo usermod -aG docker $USER
    

镜像构建

  • 执行一下指令进行镜像构建

    cd apollo.ros-7.0.0/docker/build/ # 进入镜像构建目录
    ./build_docker.sh  								# 开始构建镜像
    
  • 镜像构建成功后,显示如下图所示:
    在这里插入图片描述

代码编译

  • 解压项目代码到对应目录,假设代码主目录名为apollo.ros-7.0.0,其目录结构如下:

    .
    ├── docker
    │   ├── build
    │   └── scripts
    ├── images
    ├── LICENSE
    ├── modules
    │   ├── apollo_common
    │   ├── apollo_control
    │   ├── apollo_map
    │   ├── apollo_msgs
    │   ├── apollo_planning
    │   ├── apollo_routing
    │   └── apollo_simulator
    └── README.md
    
  • 启动容器:启动成功后,显示如下图所示:

    cd apollo.ros-7.0.0/							# 返回工程主目录
    ./docker/scripts/docker_start.sh	# 启动容器
    

    在这里插入图片描述

    注意

    • 执行./docker/scripts/docker_start.sh指令启动容器前,一定要返回工程主目录
    • 如果此终端关闭后会导致启动容器退出
    • 重新启动容器需要重新编译代码
  • 编译代码:编译成功后,显示如下图所示:

    cd apollo_ros_ws/	# 进入工作空间
    catkin build			# 开始编译
    

    在这里插入图片描述

  • 进入容器:如果容器已经启动,想新开一个终端进去,可使用以下指令:

    cd apollo.ros-7.0.0/						# 返回工程主目录 
    ./docker/scripts/docker_into.sh	# 进入容器
    

仿真测试

仿真模式

目前仿真测试支持两种模式:

  • sim_controlroutingplanning模块仿真测试,移植于原apollo中的dreamview
  • sim_pncroutingplanningcontrol模块仿真测试,移植于autoware.universe中的simple_planning_simulator

仿真模式设置在modules/apollo_simulator/launch/simulation.launch文件中:

  • use_sim_ctrl设置为true时,为sim_control仿真模式
  • use_sim_ctrl设置为false时,为sim_pnc仿真模式
<?xml version="1.0" encoding="UTF-8"?>
<launch>
  <arg name="map_name" default="demo"/>
  <arg name="use_sim_ctrl" default="true"/>

  <include file="$(find apollo_routing)/launch/routing.launch">
    <arg name="map_name" value="$(arg map_name)"/>
  </include>

  <include file="$(find apollo_planning)/launch/planning.launch">
    <arg name="map_name" value="$(arg map_name)"/>
  </include>

  <group unless="$(arg use_sim_ctrl)">
    <include file="$(find apollo_control)/launch/control.launch"/>
  </group>

  <include file="$(find apollo_simulator)/launch/simulator.launch">
    <arg name="map_name" value="$(arg map_name)"/>
    <arg name="use_sim_ctrl" value="$(arg use_sim_ctrl)"/>
  </include>
</launch>

仿真测试

  • 启动仿真程序:启动成功后可以看到rviz显示如下图所示

    cd apollo_ros_ws/
    source devel/setup.bash	
    roslaunch apollo_simulator simulation.launch
    

    在这里插入图片描述

  • 初始化车辆位姿:在rviz软件显示窗口上,点击2D Pose Estimate按钮在高精度地图上相应位置进行车辆位姿初始化

    在这里插入图片描述

  • 下发导航目标点:在rviz软件显示窗口上,点击2D Nav Goal按钮在高精度地图上相应位置进行导航目标点下发

    在这里插入图片描述

  • 增加障碍物:

    • 障碍物的增加可通过在rviz软件显示窗口上,点击Apollo Fake Prediction按钮在高精度地图上相应位置进行动/静态障碍物设置

      在这里插入图片描述

    • 障碍物速度清除、数量和速度设置,可使用ros中的rqt_reconfigure工具进行更改

      在这里插入图片描述

      • 在显示界面中勾选obstacle_clear按钮即可进行设置障碍物清除
      • 障碍物速度设置只需在在显示界面obstacle_speed输入栏中输入对应速度即可
      • 障碍物数量设置只需在在显示界面obstacle_max_size输入栏中输入对应数量即可
    • 设置静态障碍物:在rviz软件显示窗口上,点击Apollo Fake Prediction按钮在高精度地图上相应位置进行静态障碍物设置

      注意:此时障碍物速度必须设置为0

      在这里插入图片描述

    • 设置动态障碍物:在rviz软件显示窗口上,点击Apollo Fake Prediction按钮在高精度地图上相应位置进行动态障碍物设置

      注意:

      • 此时障碍物速度必须设置>0
      • 障碍物前方蓝色轨迹为障碍物预测轨迹

      在这里插入图片描述

  • 成功运行效果:如果程序启动正常,车辆位姿和导航目标都设置正确的话,可在rviz上看到正常运行的效果,如下图所示

    在这里插入图片描述

  • 更换测试地图:仿真测试时,默认启动的地图是modules/apollo_map/data/demo,如果想更换成modules/apollo_map/data/目录下其他地图,可在启动仿真程序时,根据想使用的地图的名称,将启动指令更换成以下指令即可:

    roslaunch apollo_simulator simulation.launch map_name:=cube_town
    

高精度地图

仿真测试时,所使用的高精度地图放在modules/apollo_map/data/目录下,项目中已有的地图有:

.
├── autonomou_stuff
├── borregas_ave
├── cube_town
├── demo
├── go_mentum_dtl
├── modern_city
├── san_francisco
├── san_mateo
├── sunnyvale_big_loop
├── sunnyvale_loop
└── sunnyvale_with_two_offices

如果想添加新的高精度地图,则需要按照以下步骤进行:

  • modules/apollo_map/data/目录下新建以添加地图名字命名的文件夹,这里以test为例:

    cd apollo.ros-7.0.0/modules/apollo_map/data/
    mkdir test
    
  • 将高精度地图test的地图文件base_map.bin放到刚刚创建的目录apollo.ros-7.0.0/modules/apollo_map/data/test

    • 高精度地图文件base_map.bin是由高精度地图绘制工具绘制得来,常用的工具有Roadrunner,不过是收费的
    • 本项目的高精度地图均是在LGSVL仿真平台下载

    注意apollo.ros-7.0.0只支持apollo7.0百度OpenDRIVE格式规范

  • 生成routing所需的拓扑地图:以下指令中的test为第一步在modules/apollo_map/data/目录下新建的文件夹名称

    cd apollo_ros_ws/
    source devel/setup.bash	
    roslaunch apollo_routing topo_creator.launch map_name:=test
    

    执行成功后终端显示如下图所示,同时在apollo.ros-7.0.0/modules/apollo_map/data/test目录下还会多出routing_map.binrouting_map.txt两个文件

    在这里插入图片描述

  • 到达此步骤,添加新的高精度地图流程已完成,在仿真测试时,选择对应的地图进行测试即可

维护者

Forrest

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

植物大战僵尸:分析植物的攻击速度

植物大战僵尸中&#xff0c;植物是有攻击速度的&#xff0c;比如每隔一段时间会吐出一些子弹&#xff0c;那么由此可判断吐出子弹应该是由一个计数器控制的&#xff0c;也就是说只要我们能够找到控制植物攻击的时钟并改写它&#xff0c;也就可以实现植物的无限吐子弹。 吐出子…

数据结构---二叉树

坚持看完&#xff0c;结尾有思维导图总结 这里写目录标题什么是二叉树&#xff1f;二叉树的定义二叉树的性质二叉树的基石在哪里?总结什么是二叉树&#xff1f; 二叉树的定义 二叉树&#xff0c;就是从一个根开始&#xff0c;按照两边分支的方式向下生长的树&#xff0c;就能…

python虚拟环境的概念,用法(pycharm)

1.在PyCharm中创建python项目时&#xff0c;需要配置python的运行环境&#xff0c;除了使用系统现有环境以外&#xff0c;还可以创建虚拟环境。 2.虚拟环境的创建是因为在实际开发中需要同期用到不同版本的python解释器&#xff0c;不同的第三方库以及同一个第三方库的不同版本…

Qt音视频开发08-ffmpeg内核优化(极速打开/超时回调/实时响应)

一、前言 最初编写这套视频解析组件的时候&#xff0c;面对的场景是视频监控行业&#xff0c;对应设备都是网络监控摄像机&#xff0c;传过来的都是rtsp这种视频流&#xff0c;做过这一块的人都知道&#xff0c;打开某个视频流默认耗时比较大&#xff0c;基本上在2s左右&#…

高级前端二面手写面试题(边面边更)

解析 URL Params 为对象 let url http://www.domain.com/?useranonymous&id123&id456&city%E5%8C%97%E4%BA%AC&enabled; parseParam(url) /* 结果 { user: anonymous,id: [ 123, 456 ], // 重复出现的 key 要组装成数组&#xff0c;能被转成数字的就转成数字…

四【Servlet基础】文件配置及环境搭建(重要)

文章目录4.1 Servlet概念4.2 Servlet作用4.3 Servlet开发步骤4.3.1 搭建开发环境4.3.2 创建项目4.3.3 部署Servlet4.3.4 配置Servlet4.3.5 测试运行4.1 Servlet概念 &#xff08;1&#xff09;Servlet&#xff1a;Server Applet的简称&#xff0c;是运行在Web服务器端的Java程…

GDB无法debug的错误

GDB无法debug的错误 一、输出错误信息描述 Warning: opening /proc/PID/mem file for lwp 707.707 failed: No such file or directory (2) Warning: Cannot insert breakpoint 1. Cannot access memory at address 0x806950 二、解决方法 方法&#xff1a;修改 GDB 的二进…

spring之IoC注解(三)负责注入的注解

文章目录前言一、Value注解Product类spring配置文件测试程序运行结果二、Autowired与Qualifier注解1.创建OrderDao接口2.创建OrderDao接口实现类3.创建OrderService类4.配置文件5.测试程序6.运行结果三、Resource注解&#xff08;重要&#xff09;1、创建StudentDao接口2、创建…

皮带断裂识别检测系统 opencv

皮带断裂识别检测系统通过opencv深度学习yolo计算机视觉识别技术对皮带运行状态进行全天候实时监测&#xff0c;当识别到皮带断裂撕裂时立即抓拍告警存档。OpenCV-Python是一个Python绑定库&#xff0c;旨在解决计算机视觉问题。OpenCV-Python使用Numpy&#xff0c;这是一个高度…

LeetCode刷题复盘笔记—一文搞懂动态规划之392. 判断子序列问题(动态规划系列第三十八篇)

今日主要总结一下动态规划的一道题目&#xff0c;392. 判断子序列 题目&#xff1a;392. 判断子序列 Leetcode题目地址 题目描述&#xff1a; 给定字符串 s 和 t &#xff0c;判断 s 是否为 t 的子序列。 字符串的一个子序列是原始字符串删除一些&#xff08;也可以不删除&a…

08 LIN

基础知识 LIN的全称为Local Interconnect Network。LIN主要功能是为CAN总线网络提供辅助功能&#xff0c;应用场合有智能传感节点、自动车窗节点等。 硬件 特点 1.采用单主多从的组网方式&#xff0c;无CAN总线那样的仲裁机制&#xff0c;最多可连接16个节点&#xff08;1主…

大数据技术——HBase安装配置DDLDML操作

HBase文章目录1. HBase 安装1.1 HBase下载1.2 HBase安装1.3 HBase 初始配置2. 配置高可用并且群起集群2.1 HBase高可用2.2 群起集群2.3 进入HBase客户端3. DDL&DML操作3.1 DDL操作3.2 DML操作1. HBase 安装 1.1 HBase下载 HBase下载官方网站直达 选择自己需要的版本&…

Allegro孔和线被做到器件里面如何解锁操作指导

Allegro孔和线被做到器件里面如何解锁操作指导 在做PCB设计的时候,会遇到孔和线被做到器件的情况,当需要移动器件的时候,孔和线也会跟着移动。如下图 具体操作如下 选择Route选择Convert Fanout

Acwing 796子矩阵的和

Acwing 796子矩阵的和 前缀和 更新 (前缀和数组)&#xff1a;s[i][j]s[i-1][j]s[i][j-1]-s[i-1][j-1]a[i][j] 查询(x1,y1)-------(x2,y2)矩阵的元素和 Ss[x2][y2]-s[x-1][y2]-s[x2][y1-1]s[x1-1][y1-1] 输入一个 n 行 m 列的整数矩阵&#xff0c;再输入 q 个询问&#xff0c;每…

QML教程(二)视觉对象

目录 一、矩形类型&#xff1a;Rectangle 二、图像类型&#xff1a;Image 三、基类类型&#xff1a;Item 一、矩形类型&#xff1a;Rectangle 矩形是最基本的视觉效果&#xff0c;Qt Quick提供了一个矩形类型来绘制矩形。这些矩形可以用颜色或垂直渐变着色。矩形类型还可以在…

【Linux】进程程序替换及shell的模拟实现

​&#x1f320; 作者&#xff1a;阿亮joy. &#x1f386;专栏&#xff1a;《学会Linux》 &#x1f387; 座右铭&#xff1a;每个优秀的人都有一段沉默的时光&#xff0c;那段时光是付出了很多努力却得不到结果的日子&#xff0c;我们把它叫做扎根 目录&#x1f449;进程程序替…

Mybatis-Plus 映射匹配兼容性

目录 问题一&#xff1a;表字段与编码属性设计不同步 问题二&#xff1a;编码中添加了数据库中未定义的属性 问题三&#xff1a;采用默认查询开放了更多的字段查看权限 TableField 问题四&#xff1a;表名与编码开发设计不同步 TableName 从表中查询出数据&#xff0c;并…

31.项目部署

目录 1 一些概念 1.1 项目部署 1.2 WSGI 1.3 uWSGI 1.4 Nginx 2 安装环境与迁移项目 2.1 项目内容 2.2 项目配置 2.2.1 DEBUG 2.2.2 STATIC_ROOT 2.2.3 ALLOWED_HOST 3 uWSGI 3.1 安装uWSGI 3.2 配置uWSGI 3.3 启动 uWSGI 3.4 停止 uWSGI 4 …

官方更新:基于VRA Tokenomics 社区常见问题解答

您好 Verasity 社区&#xff0c; 我们最近通过 Medium 发布了最新的代币经济学&#xff0c;您可以在此处阅读。 我们引入了一些新概念来促进我们作为产品的增长&#xff0c;例如我们的企业收购基金&#xff0c;我们还澄清了我们的流通和总供应量。 在我们的代币经济学文章发布…

SpringBoot概念、创建、运行、Spring Boot 配置文件

Spring Boot 就是 Spring 框架的脚⼿架&#xff0c;它就是为了快速开发 Spring 框架⽽诞⽣的。 1.Spring Boot 优点 快速集成框架&#xff0c;Spring Boot 提供了启动添加依赖的功能&#xff0c;⽤于秒级集成各种框架。内置运⾏容器&#xff0c;⽆需配置 Tomcat 等 Web 容器…