安装
按照 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安装
- 安装依赖
% sudo apt-get update
% sudo apt-get install -y python-catkin-pkg python-rosdep python-wstool ros-$ROS_DISTRO-catkin libmosquitto-dev gksu
- 下载仓库
$ cd $HOME
$ git clone https://github.com/CPFL/Autoware.git --recurse-submodules
或者如果您已经拥有拷贝的代码,则运行
$ git submodule update --init --recursive.
- 初始化工作区,让rosdep安装缺少的依赖项并进行编译。
$ cd ~/Autoware/ros/src
$ catkin_init_workspace
$ cd ../
$ rosdep install -y --from-paths src --ignore-src --rosdistro $ROS_DISTRO
$ ./catkin_make_release
- 启动
$ cd $HOME/Autoware/ros
$ ./run
Autoware使用
一 构图
无论是哪个功能都有两种方式,一种是界面操作,一种是直接使用命令行,本质是一样的,界面只是对命令的封装,运作./run的时候会开中断,想知道点击对应到什么命令可以观察中断输出
一下以界面操作为例
1. 启动界面
$ cd $HOME/Autoware/ros
$ ./run
2. simulation->ref(选择bag)->play->pause
注意:有时候bag太大需要加载很长时间,观察到下方出现bag的信息后再播放,有进度条显示后再暂停播放
3. Setup->tf
此处的tf根据你自己的车体结构变化,一般就是base_link->lidar的变换
4. Computing->lidar_localizer->ndt_mapping[app]->[app]弹框内设置参数->关闭弹窗->勾选ndt_mapping
主要是调整Minimum Scan Range
MaximumScanRange
根据你的激光雷达的实际范围调整
5. simulation->play
6. rviz->file->open config->autoware/ros/src/.config/rviz/ndt_mapping.rviz
如图所示: /ndt_map即为构成的点云图,我们需要保存这份点云作为定位使用
7. Computing->lidar_localizer->ndt_mapping[app]->[app]弹窗内点击output pcd
二 不使用gnss定位
定位与构图操作基本一致,只是多了两步,下文会终点说明
- 启动界面
- simulation->ref(选择bag)->play->pause
- Setup->tf
4. map->ref->选择刚刚保存的pcd文件->PointCloud
5. Sensing->voxel_grid_filter[app]->[app]弹窗内设置话题名和参数->ok->勾选
6.Computing->lidar_localizer->ndt_matching[app]->[app]弹窗内设置参数->ok->勾选ndt_matching
注意:这里我们没有gnss所以选initialpose 即初始位置,填错了也没关系,后面可以通过rviz设置,
gnss方式的自动定位会在后面讲
- rviz->file->open config->autoware/ros/src/.config/rviz/ndt_mapping.rviz
如图所示:
/points_map即为原始点云,
/filtered_points为体素过滤之后的点云,这一点区别于构图,体素过滤能降低计算量,但是调参需要注意,滤的太多特征就没有了很难定位容易丢失,滤的太少计算量大很难定位容易丢失
rviz上的2d pose estimate可以给autoware指定初始话位置,作用等同于我们刚刚在低6步设置的初始位置
三 使用gnss定位
与第二部分步骤基本一致,只有2步稍有不同
- 启动界面
- simulation->ref(选择bag)->play->pause
- Setup->tf
- map->ref->选择刚刚保存的pcd文件->PointCloud
- Sensing->voxel_grid_filter[app]->[app]弹窗内设置话题名和参数->ok->勾选
- Computing->gnss_localizar->勾选fix2tfpose
7. Computing->lidar_localizer->ndt_matching[app]->[app]弹窗内设置参数->ok->勾选ndt_matching
注意:这里我们勾选择gnss,此时rviz指定初始位置的方式也是有效的,有一点需要注意/gnss_pose这个话题是一直在发的,但不会一直生效,只有当前激光与原始点云匹配误差较大时才会生效(换句话说就是定位丢了才生效,这个值是fitness_score>500的时候,500是代码里面写死的)
补充:因为我们没有gnss所以使用gps代替
步骤与使用gnss一样,只是把勾选fix2tfpose启动的fix2tfpose节点替换成了我们自己的节点
这个节点订阅gps和9轴imu的数据,取gps的位置和指南针的朝向组合成/gnss_pose发布,其他与使用gnss定位无异
另外需要发布一个静态tf,从/world->/map,位置和朝向为构图起点的位置和指南针朝向
比如你构图的第一帧经纬度转换成坐标后是(80000,60000),朝向统一坐标是1.57则吧这组数据用于发布/world ->/map