ros版本apollo3.0.0规划控制算法

apollo.ros-3.0.0

上次给大家带来了之前学习apollo时开发的内容apollo.ros-1.0.0,主要是针对apollo 1.0.0版本进行了ros1的移植和控制算法的学习。这次是针对apollo 3.0.0版本进行了ros1的移植和学习了相关的规划算法。

项目开发详细可在评论区留言。
PS:基于ros1的 apollo 7.0.0规划控制算法已经发布,详情见apollo.ros-7.0.0

简介

此项目为基于apollo3.0.0ros1移植版本,移植主要目的如下:

  • 学习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中更改的ros
  • 使用ros pkg封装apollo中的module
  • 使用ros中的std_msgs/String替代apollopd_msgs/xxx消息
  • 使用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-3.0.0/docker/build/ # 进入镜像构建目录
    ./build_docker.sh  								# 开始构建镜像
    
  • 镜像构建成功后,显示如下图所示:

在这里插入图片描述

代码编译

  • 解压项目代码到对应目录,假设代码主目录名为apollo.ros-3.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-3.0.0/							# 返回工程主目录
    ./docker/scripts/docker_start.sh	# 启动容器
    

在这里插入图片描述

注意

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

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

在这里插入图片描述

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

    cd apollo.ros-3.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="false"/>

  <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按钮在高精度地图上相应位置进行静态障碍物设置
    在这里插入图片描述

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

基于 apollo 3.0.0 的ros1移植版本 - em_planner测试

基于 apollo 3.0.0 的ros1移植版本 - lattice_planner测试

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

    roslaunch apollo_simulator simulation.launch map_name:=cube_town
    

高精度地图

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

.
├── borregas_ave
├── cube_town
├── demo
├── san_francisco
└── tartu_city

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

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

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

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

    注意apollo.ros-3.0.0只支持apollo3.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-3.0.0/modules/apollo_map/data/test目录下还会多出routing_map.binrouting_map.txt两个文件

在这里插入图片描述

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

待开发

  • 高精度地图rviz显示
  • sim_control仿真支持
  • 静态障碍物rviz设置
  • apollo消息rostopic echo显示
  • 车辆控制状态rviz显示
  • 动态障碍物rviz设置
  • LGSVL/Carla软件平台联合仿真

维护者

Forrest

猜你喜欢

转载自blog.csdn.net/Forrest_Z/article/details/126798242