前言
Autoware.AI是世界上第一个用于自动驾驶技术的“All-in-One”开源软件,关于它的介绍就不再赘述了,感兴趣的可以去看一下知乎文章,这里主要说明一下autoware.ai的安装配置。之前在Ubuntu16.04上装过autoware,但现在开发环境已经迁到18.04了,所以重新安装一下,特此记录。顺便一提,autoware.ai已经很久没维护了,毕竟已经推出了autoware.auto,它是基于ROS2的,由此可见ROS2和autoware.auto将会是趋势,后面有机会再介绍。
准备工作
- 官网推荐配置,这里我们安装1.14.0版本
默认你已经装好ROS-melodic、CUDA10.0、Eigen3.3.7(或更高)、QT5.12.8(或者更高)、OpenCV选择性安装,我因为要使用yolo,所以装了5.2.0版本。
安装
- 其实按照的顺序一步步来基本没有问题,主要是后面编译需要修改代码。
- 安装依赖
sudo apt update
sudo apt install -y python-catkin-pkg python-rosdep ros-$ROS_DISTRO-catkin
sudo apt install -y python3-pip python3-colcon-common-extensions python3-setuptools python3-vcstool
pip3 install -U setuptools
mkdir -p ~/autoware.ai/src
cd ~/autoware.ai
wget -O autoware.ai.repos "https://gitlab.com/autowarefoundation/autoware.ai/autoware/raw/1.14.0/autoware.ai.repos?inline=false"
vcs import src < autoware.ai.repos
rosdep update
rosdep install -y --from-paths src --ignore-src --rosdistro $ROS_DISTRO
编译
autoware.ai 通过两种编译方式,一种是GPU使用CUDA加速,另一种直接使用CPU编译
AUTOWARE_COMPILE_WITH_CUDA=1 colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release
colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release
编译报错解决
- 因为
1.12.0 版本很老了,许多opencv的代码还是用OpenCV2写的(其实最新的1.14.0也是这样,还是推荐上autoware.auto 吧),造成编译会报许多错,下面一步步来解决。
使用CUDA编译报ndt_gpu 错误
- 修改
autoware.ai/src/autoware/common/autoware_build_flags/cmake/autoware_build_flags-extras.cmake 文件,将CUDA 10.0 改为CUDA 10.2
opencv2/contrib/contrib.hpp:没有那个文件,或报错文件中有opencv版本判断的代码
- 找到报错文件的判断OpenCV版本代码
#if(CV_MAJOR_VERSION==3) 改为#if(CV_MAJOR_VERSION>=3) ,检查一下文件可能有多处判断
CV_WINDOW_AUTOSIZE ,CV_LOAD_IMAGE_UNCHANGED 没有被声明
- 根据报错找到对应的文件,加入头文件
#include <opencv2/highgui/highgui_c.h> 加入命名空间using namespace cv; 将CV_LOAD_IMAGE_UNCHANGED 改为IMREAD_UNCHANGED
calibration_publisher 包中cv::Mat::Mat()未定义引用
- 找到包中CMakeLists.txt文件,在链接库中加入
${OpenCV_LIBS}
CV_LOAD_IMAGE_GRAYSCALE没有被声明
- 找到报错文件,将
CV_LOAD_IMAGE_GRAYSCALE 改为IMREAD_GRAYSCALE
CV_AA , CV_FILLED没有被声明
- 找到报错文件,在头文件中加入
#include <opencv2/imgproc/imgproc_c.h>
CV_EPNP没有被声明
- 将
CV_EPNP 改为cv::SOLVEPNP_EPNP
could not convert ‘cv::Scalar_((double)0, (double)255, (double)255, (double)0)’ from ‘cv::Scalar {aka cv::Scalar_}’ to ‘CvScalar’
- 将
CV_RGB(255, 255, 0) 改为cvScalar(255, 255, 0)
cv_image->image报错
- 将
cv_image->image 改为cvIplImage(cv_image->image)
ipl_image = final_mat报错
- 将
ipl_image = final_mat 改为ipl_image = cvIplImage(final_mat)
CvMat cvmat = sum_mat;
CvMat *cvmat;
for(size_t i=0; i< sum_mat.rows; ++i)
for(size_t j=0; j< sum_mat.cols; ++j){
((double*)(cvmat->data.ptr + i*cvmat->step))[j] = sum_mat.at<double>(i,j);
}
CV_BGR2GHSV没有被声明
- 加入头文件
#include <opencv2/imgproc/types_c.h>
textOrg = cv::Point(ctx.topLeft.x, ctx.botRight.y + baseline);
textOrg.x = ctx.topLeft.x;
textOrg.y = ctx.botRight.y + baseline;
cvGetWindowHandle没有被声明
- 加入头文件
#include <opencv2/highgui/highgui_c.h>
CV_STORAGE_WRITE, CV_STORAGE_READ,CV_NODE_MAP读写xml错误
- 这里的本质上是读写yaml文件,源代码方式已经被淘汰了,需要使用新方法,这里暂时不知道有什么用,可以直接将读写代码注释掉,我这里稍微改动一下,保证编译能过,不知道是否正确,后面用到再验证。
- 将
CV_STORAGE_WRITE 改为cv::FileStorage::WRITE - 将
CV_STORAGE_READ 改为cv::FileStorage::READ - 将
cv::FileNode topNode(cvfs.fs, NULL) 注释掉,后面的topNode 改为cvfs - CV_NODE_MAP需要将写操作改成
<< 的形式,因为它重载了<<
CV_REDUCE_MIN 没有被声明
- 将
CV_REDUCE_MIN 改为cv::REDUCE_MIN
看到所有包都finished,就说明编译通过了
测试
- 跑官方Demo来验证,具体步骤官方已经写的很清楚了,下面简单说一下会遇到的问题。
‘utf8’ codec can’t decode错误
- 参考链接
- 打开
~/autoware.ai/src/autoware/utilities/runtime_manager/scripts/runtime_manager_dialog.py 文件做如下修改
while not ev.wait(interval):
s = subprocess.check_output(['sh', '-c', 'env COLUMNS=512 LC_ALL=C top -b -n 2 -d 0.1']).strip()
i = s.rfind('\ntop -') + 1
s = s[i:]
cd ~/autoware.ai
source install/setup.bash
export LC_ALL=en_US.utf8
roslaunch runtime_manager runtime_manager.launch
|