• 基于apollo3.0.0的ros1移植


    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
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    目前移植版本能实现车辆在高精度地图下进行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
      
      • 1
    • 安装验证:安装完成执行 sudo docker version看看docker目前安装的版本等信息:

      在这里插入图片描述

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

      sudo usermod -aG docker $USER
      
      • 1

    镜像构建

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

      cd apollo.ros-3.0.0/docker/build/ # 进入镜像构建目录
      ./build_docker.sh  								# 开始构建镜像
      
      • 1
      • 2
    • 镜像构建成功后,显示如下图所示:

    在这里插入图片描述

    代码编译

    • 解压项目代码到对应目录,假设代码主目录名为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
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
    • 启动容器:启动成功后,显示如下图所示:

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

    在这里插入图片描述

    注意

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

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

    在这里插入图片描述

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

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

    仿真测试

    仿真模式

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

    • 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仿真模式
    
    <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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    仿真测试

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

      cd apollo_ros_ws/
      source devel/setup.bash	
      roslaunch apollo_simulator simulation.launch
      
      • 1
      • 2
      • 3

    在这里插入图片描述

    • 初始化车辆位姿:在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
      
      • 1

    高精度地图

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

    .
    ├── borregas_ave
    ├── cube_town
    ├── demo
    ├── san_francisco
    └── tartu_city
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

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

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

      cd apollo.ros-3.0.0/modules/apollo_map/data/
      mkdir test
      
      • 1
      • 2
    • 将高精度地图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
      
      • 1
      • 2
      • 3

      执行成功后终端显示如下图所示,同时在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

  • 相关阅读:
    【初阶数据结构】树结构与二叉树的基础概念
    Git 学习笔记 | Git 分支
    postgres 自定义内置函数
    Eclipse 安装 Lombok
    Go语言学习教程(十五)
    【高等数学基础进阶】多元函数微分学-多元函数微分法
    点云地面滤波--布料模拟滤波(CSF)
    mongodb使用简单文档
    技术管理进阶——如何规划团队的技术发展方向
    人工智能轨道交通行业周刊-第64期(2023.10.16-10.29)
  • 原文地址:https://blog.csdn.net/Forrest_Z/article/details/126798242