安装

按照 Github中的文档 进行安装,有如下依赖:

  • ROS indigo (Ubuntu 14.04) or ROS jade (Ubuntu 15.04) or ROS kinetic (Ubuntu 16.04)
  • OpenCV 2.4.10 or higher
  • Qt 5.2.1 or higher
  • CUDA (optional)
  • FlyCapture2 (optional)
  • Armadillo (optional)

我的环境是16.04以下以16.04为例,其他环境请参考官方文档
安装ros kinect
安装opencv3.4.3
安装qt

Autoware安装

  1. 安装依赖
% sudo apt-get update
% sudo apt-get install -y python-catkin-pkg python-rosdep python-wstool ros-$ROS_DISTRO-catkin libmosquitto-dev gksu
  1. 下载仓库
$ cd $HOME
$ git clone https://github.com/CPFL/Autoware.git --recurse-submodules

或者如果您已经拥有拷贝的代码,则运行

$ git submodule update --init --recursive.
  1. 初始化工作区,让rosdep安装缺少的依赖项并进行编译。
$ cd ~/Autoware/ros/src
$ catkin_init_workspace
$ cd ../
$ rosdep install -y --from-paths src --ignore-src --rosdistro $ROS_DISTRO
$ ./catkin_make_release
  1. 启动
$ cd $HOME/Autoware/ros
$ ./run

Autoware使用

一 构图

无论是哪个功能都有两种方式,一种是界面操作,一种是直接使用命令行,本质是一样的,界面只是对命令的封装,运作./run的时候会开中断,想知道点击对应到什么命令可以观察中断输出

一下以界面操作为例

1. 启动界面

$ cd $HOME/Autoware/ros
$ ./run

2. simulation->ref(选择bag)->play->pause

注意:有时候bag太大需要加载很长时间,观察到下方出现bag的信息后再播放,有进度条显示后再暂停播放

Automation Anywhere如何下载_gnss

3. Setup->tf

此处的tf根据你自己的车体结构变化,一般就是base_link->lidar的变换

Automation Anywhere如何下载_点云_02

4. Computing->lidar_localizer->ndt_mapping[app]->[app]弹框内设置参数->关闭弹窗->勾选ndt_mapping

主要是调整Minimum Scan Range MaximumScanRange根据你的激光雷达的实际范围调整

Automation Anywhere如何下载_autoware_03

5. simulation->play

6. rviz->file->open config->autoware/ros/src/.config/rviz/ndt_mapping.rviz

Automation Anywhere如何下载_localization_04

如图所示: /ndt_map即为构成的点云图,我们需要保存这份点云作为定位使用

7. Computing->lidar_localizer->ndt_mapping[app]->[app]弹窗内点击output pcd

二 不使用gnss定位

定位与构图操作基本一致,只是多了两步,下文会终点说明

  1. 启动界面
  2. simulation->ref(选择bag)->play->pause
  3. Setup->tf

4. map->ref->选择刚刚保存的pcd文件->PointCloud

Automation Anywhere如何下载_slam_05

5. Sensing->voxel_grid_filter[app]->[app]弹窗内设置话题名和参数->ok->勾选

Automation Anywhere如何下载_autoware_06

6.Computing->lidar_localizer->ndt_matching[app]->[app]弹窗内设置参数->ok->勾选ndt_matching

注意:这里我们没有gnss所以选initialpose 即初始位置,填错了也没关系,后面可以通过rviz设置,

gnss方式的自动定位会在后面讲

Automation Anywhere如何下载_点云_07

  1. rviz->file->open config->autoware/ros/src/.config/rviz/ndt_mapping.rviz

Automation Anywhere如何下载_点云_08

如图所示:

/points_map即为原始点云,

/filtered_points为体素过滤之后的点云,这一点区别于构图,体素过滤能降低计算量,但是调参需要注意,滤的太多特征就没有了很难定位容易丢失,滤的太少计算量大很难定位容易丢失

rviz上的2d pose estimate可以给autoware指定初始话位置,作用等同于我们刚刚在低6步设置的初始位置

三 使用gnss定位

与第二部分步骤基本一致,只有2步稍有不同

  1. 启动界面
  2. simulation->ref(选择bag)->play->pause
  3. Setup->tf
  4. map->ref->选择刚刚保存的pcd文件->PointCloud
  5. Sensing->voxel_grid_filter[app]->[app]弹窗内设置话题名和参数->ok->勾选
  6. Computing->gnss_localizar->勾选fix2tfpose

7. Computing->lidar_localizer->ndt_matching[app]->[app]弹窗内设置参数->ok->勾选ndt_matching

注意:这里我们勾选择gnss,此时rviz指定初始位置的方式也是有效的,有一点需要注意/gnss_pose这个话题是一直在发的,但不会一直生效,只有当前激光与原始点云匹配误差较大时才会生效(换句话说就是定位丢了才生效,这个值是fitness_score>500的时候,500是代码里面写死的)

Automation Anywhere如何下载_localization_09

补充:因为我们没有gnss所以使用gps代替

步骤与使用gnss一样,只是把勾选fix2tfpose启动的fix2tfpose节点替换成了我们自己的节点

这个节点订阅gps和9轴imu的数据,取gps的位置和指南针的朝向组合成/gnss_pose发布,其他与使用gnss定位无异

另外需要发布一个静态tf,从/world->/map,位置和朝向为构图起点的位置和指南针朝向
比如你构图的第一帧经纬度转换成坐标后是(80000,60000),朝向统一坐标是1.57则吧这组数据用于发布/world ->/map