前言
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编译
# CUDA 支持
AUTOWARE_COMPILE_WITH_CUDA=1 colcon build --cmake-args -DCMAKE_BUILD_TYPE=Release
# CPU
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 top -b -n 2 -d 0.1']).strip()s = subprocess.check_output(['sh', '-c', 'env COLUMNS=512 LC_ALL=C top -b -n 2 -d 0.1']).strip()i = s.rfind('\ntop -') + 1s = s[i:]
- 在启动autoware前设置编码格式
cd ~/autoware.ai
source install/setup.bash
export LC_ALL=en_US.utf8
roslaunch runtime_manager runtime_manager.launch
-
20219/6记录
-
经过几天的努力发现还是不行,软件可以启动但是无法达到官方演示的效果,要么
tf
转换有问题,要么无法加载map
,暂时先放弃,后面有时间再弄。改了
1.12.0
和1.14.0
的代码,保证可以运行,但跑官方demo bag效果有问题,感兴趣的可以进一步尝试,如果成功了,欢迎留言赐教,谢谢!https://github.com/LHD2018/autoware.ai-1.12.0
https://github.com/LHD2018/autoware.ai-1.14.0