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

news/2025/2/22 3:03:24

apolloros700_0">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规划控制算法

简介

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

目前只针对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.niftyadmin.cn/n/23614.html

相关文章

Linux内存从0到1学习笔记(8.13 dma内存调试一)

现在我们对dma几个紧密关联的结构体有所了解,再结合相应的导入器,导出器使用示例,dma-buf的使用已经不再陌生。那么在日常使用过程中常常会遇到哪些问题呢? 当然,dma-buf也是内存使用大法的一部分,那就免不了遇到这几大件:1.dma不足(合理使用),这部分的优化慎之又慎…

c# 读取XmL文件

一.读取 using System.Xml; public static string GetOwnerID(string company, string factory) { string result string.Empty; XmlNodeList xmlNodeList MappingXmlDoc.SelectNodes("/MAPPINGS/ITEM"); if (xmlNodeList ! null && xmlNodeL…

一名普通Java程序员的2022的总结和2023的展望

前言今天是元旦节&#xff0c;也是2023年的第一天&#xff0c;首先祝各位亲朋好友们元旦快乐&#xff0c;在新的一年全家身体康健&#xff0c;诸事顺遂&#xff0c;阖家幸福&#xff0c;最重要的是身体健康&#xff0c;工作顺利&#xff0c;永无BUG永不加班&#xff01;&#x…

RSA密钥协商过程

目录 TSL握手过程 RSA密钥协商握手过程 TLS第一次握手 TLS第二次握手 客户端验证证书 TLS第三次握手 TLS 第四次握手 RSA 算法的缺陷 TSL握手过程 HTTP 由于是明文传输&#xff0c;所谓的明文&#xff0c;就是说客户端与服务端通信的信息都是肉眼可见的&#xff0c;随…

动手学习深度学习-《自动求导》

向量链式求导法则 标量链式法则&#xff1a; 扩展到向量&#xff1a; yyy是关于标量uuu的一个标量&#xff0c;x\bf{x}x是一个向量 yyy是关于向量u\bf{u}u的一个标量&#xff0c;x\bf{x}x是一个向量 y\bf{y}y是关于向量u\bf{u}u的一个向量&#xff0c;x\bf{x}x是一个向量…

一起Talk Android吧(第四百五十九回:SeekBar补充用法二)

文章目录 修改进度的步进值自定义SeekBar围魏救赵各位看官们大家好,上一回中咱们说的例子是"SeekBar补充用法",这一回中咱们继续说该例子。闲话休提,言归正转,让我们一起Talk Android吧! 我们在上一章回中介绍了SeekBar补充用法中的两种用法:修改进度的背景和修…

数学建模学习笔记-算法(线性规划模型)-上

目录 线性规划问题 线性规划的matlab标准形式 解析 目标函数 约束条件 使用matlab的linprog函数来进行求解 线性规划问题 数学规划&#xff1a;安排现有资源安排生产&#xff0c;以取得最大效益的问题。 线性规划&#xff1a;目标函数和约束条件均为线性函数 在一组线性…

【Python基础】常用数据结构及处理

1. KeyValue dict.clear() 删除字典内所有元素dict.copy()返回一个字典的浅复制[dict.fromkeys(seq, val])创建一个新字典&#xff0c;以序列 seq 中元素做字典的键&#xff0c;val 为字典所有键对应的初始值 dict.get(key, defaultNone) 返回指定键的值&#xff0c;如果值不在…