ubuntu22.04安装autoware.universe
一、系统版本说明
采用虚拟机安装22.04后,使用鱼香肉丝安装ROS2。
二、clone autoware 源码并安装依赖库
1.克隆并移动到目录。autowarefoundation/autoware
git clone https://github.com/autowarefoundation/autoware.git
cd autoware
2.如果您是第一次安装 Autoware,则可以使用提供的 Ansible 脚本自动安装依赖项。
./setup-dev-env.sh
第一次运行卡死【也许因为网速和文件太大,需要等待时间】,新启动一个终端,手动安装egm2008-1
sudo geographiclib-get-geoids egm2008-1
第二次运行报错
TASK [autoware.dev_env.pacmod : Install apt-transport-https] *******************
fatal: [localhost]: FAILED! => {"changed": false, "msg": "Failed to update apt cache: unknown reason"}
手动安装apt-transport-https
第三次运行报错
TASK [autoware.dev_env.spconv : Install the spconv package] ********************
fatal: [localhost]: FAILED! => {"changed": false, "msg": "Unable to install package: E:归档文件中成员文件头无效"}
查阅论坛,单独安装spconv,但其依赖cuda版本;尝试几个帖子不太行。
最终采用autoware官方网站指导,手动安装cuda。
wget -O /tmp/amd64.env https://raw.githubusercontent.com/autowarefoundation/autoware/main/amd64.env && source /tmp/amd64.envos=ubuntu2204
wget https://developer.download.nvidia.com/compute/cuda/repos/$os/$(uname -m)/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt-get update
cuda_version_dashed=$(eval sed -e "s/[.]/-/g" <<< "${cuda_version}")
sudo apt-get -y install cuda-toolkit-${cuda_version_dashed}
sudo apt-get install -y cuda-drivers-550
echo 'export PATH=/usr/local/cuda/bin${PATH:+:${PATH}}' >> ~/.bashrc
echo 'export LD_LIBRARY_PATH=/usr/local/cuda/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}' >> ~/.bashrc
# Create Vulkan directory
sudo mkdir -p /etc/vulkan/icd.d
sudo chmod 0755 /etc/vulkan/icd.d# Create OpenGL directory
sudo mkdir -p /etc/glvnd/egl_vendor.d
sudo chmod 0755 /etc/glvnd/egl_vendor.d# Create OpenCL directory
sudo mkdir -p /etc/OpenCL/vendors
sudo chmod 0755 /etc/OpenCL/vendors# Download and set permissions for Vulkan GPU vendors JSON
sudo wget https://gitlab.com/nvidia/container-images/vulkan/raw/dc389b0445c788901fda1d85be96fd1cb9410164/nvidia_icd.json -O /etc/vulkan/icd.d/nvidia_icd.json
sudo chmod 0644 /etc/vulkan/icd.d/nvidia_icd.json# Download and set permissions for OpenGL GPU vendors JSON
sudo wget https://gitlab.com/nvidia/container-images/opengl/raw/5191cf205d3e4bb1150091f9464499b076104354/glvnd/runtime/10_nvidia.json -O /etc/glvnd/egl_vendor.d/10_nvidia.json
sudo chmod 0644 /etc/glvnd/egl_vendor.d/10_nvidia.json# Register and set permissions for OpenCL GPU vendors
sudo touch /etc/OpenCL/vendors/nvidia.icd
echo "libnvidia-opencl.so.1" | sudo tee /etc/OpenCL/vendors/nvidia.icd > /dev/null
sudo chmod 0644 /etc/OpenCL/vendors/nvidia.icd
第四次运行错误,与第三次一样
继续手动安装 installs TensorRT and cuDNN
# For the environment variables
wget -O /tmp/amd64.env https://raw.githubusercontent.com/autowarefoundation/autoware/main/amd64.env && source /tmp/amd64.envsudo apt-get install -y \
libcudnn8=${cudnn_version} \
libnvinfer10=${tensorrt_version} \
libnvinfer-plugin10=${tensorrt_version} \
libnvonnxparsers10=${tensorrt_version} \
libcudnn8-dev=${cudnn_version} \
libnvinfer-dev=${tensorrt_version} \
libnvinfer-plugin-dev=${tensorrt_version} \
libnvinfer-headers-dev=${tensorrt_version} \
libnvinfer-headers-plugin-dev=${tensorrt_version} \
libnvonnxparsers-dev=${tensorrt_version}sudo apt-mark hold \
libcudnn8 \
libnvinfer10 \
libnvinfer-plugin10 \
libnvonnxparsers10 \
libcudnn8-dev \
libnvinfer-dev \
libnvinfer-plugin-dev \
libnvonnxparsers-dev \
libnvinfer-headers-dev \
libnvinfer-headers-plugin-dev
接着按照官方网站知道,安装 rviz
下载Artifacts
cd ~/autoware # The root directory of the cloned repository
ansible-galaxy collection install -f -r "ansible-galaxy-requirements.yaml"
ansible-playbook autoware.dev_env.download_artifacts -e "data_dir=$HOME/autoware_data" --ask-become-pass
出现问题参考《https://blog.csdn.net/qq_56292484/article/details/139240612》
本人安装时,遇到tensorrt_rtmdet目录下的tensorrt_rtmdet_onnx_models.tar.gz下载报错,手动单独安装
zgl@zgl-virtual-machine:~/autoware$ cd ../autoware_data/
zgl@zgl-virtual-machine:~/autoware_data$ ls
bevfusion lidar_centerpoint tensorrt_rtmdet
image_projection_based_fusion lidar_transfusion tensorrt_yolox
lidar_apollo_instance_segmentation tensorrt_bevdet yabloc_pose_initializer
zgl@zgl-virtual-machine:~/autoware_data$ cd tensorrt_rtmdet/
zgl@zgl-virtual-machine:~/autoware_data/tensorrt_rtmdet$ ls
zgl@zgl-virtual-machine:~/autoware_data/tensorrt_rtmdet$ wget https://autoware-files.s3.us-west-2.amazonaws.com/models/tensorrt_rtmdet_onnx_models.tar.gz
记住,需要重新运行ansible
ansible-playbook autoware.dev_env.download_artifacts -e "data_dir=$HOME/autoware_data" --ask-become-pass
这时显示,下载安装ok。
三、autoware编译
创建目录并将存储库克隆到其中。src,前面第一步已经下载autoware.universe的源码到autoware文件夹了,现在只需要进入该文件夹进行如下操作。
1.Autoware 使用 vcstool 构建工作区。
cd autoware
mkdir src
vcs import src < autoware.repos
2.安装依赖的 ROS 包。
除了核心组件之外,Autoware 还需要一些 ROS 2 软件包。 该工具允许自动搜索和安装此类依赖项。 依次在终端中输入以下命令:
zgl@zgl-virtual-machine:~/autoware$ source /opt/ros/humble/setup.bash
rosdep install -y --from-paths src --ignore-src --rosdistro $ROS_DISTRO
ERROR: the following packages/stacks could not have their rosdep keys resolved
to system dependencies:
common_sensor_launch: Cannot locate rosdep definition for [autoware_velodyne_monitor]
autoware_launch: Cannot locate rosdep definition for [tier4_vehicle_launch]
single_lidar_sensor_kit_launch: Cannot locate rosdep definition for [autoware_vehicle_velocity_converter]
trt_batched_nms: Cannot locate rosdep definition for [autoware_tensorrt_common]
awsim_labs_sensor_kit_launch: Cannot locate rosdep definition for [autoware_vehicle_velocity_converter]
single_lidar_common_launch: Cannot locate rosdep definition for [autoware_velodyne_monitor]
sample_sensor_kit_launch: Cannot locate rosdep definition for [autoware_vehicle_velocity_converter]
awsim_sensor_kit_launch: Cannot locate rosdep definition for [autoware_vehicle_velocity_converter]
zgl@zgl-virtual-machine:~/autoware$
工具 rosdep 可自动搜索并安装此类依赖包。在使用rosdep install之前,需要运行rosdep update更新 rosdep 。
source /opt/ros/humble/setup.bash
# Make sure all previously installed ros-$ROS_DISTRO-* packages are upgraded to their latest versionsudo apt update && sudo apt upgrade 4|rosdep update
rosdep install -y --from-paths src --ignore-src --rosdistro $ROS_DISTRO
3.构建工作区。
Autoware 使用 colcon 构建工作区。 命令如下
colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release
补充知识:
colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release
# 只编译指定包
colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release --packages-select 包名
# 忽略指定包
colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release --packages-ignore 包名
# 遇到编译错误继续编译其他模块
colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release --continue-on-error
注意:可能一次编译不成功,可以在终端中多次输入编译命令:colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release;或者换用编译命令:# 遇到编译错误继续编译其他模块colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release --continue-on-error,最后看哪些包没编译成功,再使用colcon build --symlink-install --cmake-args -DCMAKE_BUILD_TYPE=Release --packages-select 包名。最后编译成功如下所示:
报错:
fatal error: lanelet2_io/io_handlers/OsmHandler.h: 没有那个文件或目录24 | #include <lanelet2_io/io_handlers/OsmHandler.h>
单独安装
sudo apt-get install ros-${ROS_DISTRO}-lanelet2
检查CMakeLists.txt配置,确保在CMakeLists.txt中正确添加了lanelet2_io的依赖1
我的文件存放目录在
打开CMakeLists.txt ,增加
find_package(lanelet2_io REQUIRED)
include_directories(${lanelet2_io_INCLUDE_DIRS})
继续编译,报错,跟上面方法一样,手动安装,修改CMakeLists.txt ;
find_package(range-v3 REQUIRED)
include_directories(${range-v3_INCLUDE_DIRS})
在CMakeLists.txt文档中增加
set(OSQP_DIR “/path/to/osqp/install/lib/cmake/osqp”)
# after find_package(osqp_vendor) in ament_auto_find_build_dependencies
set(OSQP_DIR "/path/to/osqp/install/lib/cmake/osqp")
find_package(osqp REQUIRED)
get_target_property(OSQP_INCLUDE_SUB_DIR osqp::osqp INTERFACE_INCLUDE_DIRECTORIES)
get_filename_component(OSQP_INCLUDE_DIR ${OSQP_INCLUDE_SUB_DIR} PATH)
安装osqp
git clone --recursive https://github.com/osqp/osqp
cd osqp && mkdir build && cd build
cmake .. -DCMAKE_INSTALL_PREFIX=/usr/local
make -j$(nproc)
sudo make install
报错:
Starting >>> tier4_system_msgs
--- stderr: autoware_osqp_interface
CMake Error at /opt/ros/humble/share/ament_cmake_target_dependencies/cmake/ament_target_dependencies.cmake:77 (message):ament_target_dependencies() the passed package name 'osqp_vendor' was notfound before
Call Stack (most recent call first):CMakeLists.txt:38 (ament_target_dependencies)
安装依赖库
zgl@zgl-virtual-machine:~$ sudo apt install ros-humble-osqp-vendor
```:ml-citation{ref="2" data="citationList"}
还报错
/home/zgl/autoware/src/core/autoware_core/common/autoware_osqp_interface/include/autoware/osqp_interface/csc_matrix_conv.hpp:19:10: fatal error: osqp/glob_opts.h: 没有那个文件或目录19 | #include "osqp/glob_opts.h" // for 'c_int' type ('long' or 'long long')| ^~~~~~~~~~~~~~~~~~
compilation terminated.
echo 'export C_INCLUDE_PATH=$C_INCLUDE_PATH:/usr/local/include' >> ~/.bashrc
echo 'export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/local/include' >> ~/.bashrc
source ~/.bashrc
修改CMakeLists.txt
# after find_package(osqp_vendor) in ament_auto_find_build_dependencies
set(OSQP_DIR "/path/to/osqp/install/lib/cmake/osqp")
include_directories(/usr/local/include)
find_package(osqp REQUIRED)
get_target_property(OSQP_INCLUDE_SUB_DIR osqp::osqp INTERFACE_INCLUDE_DIRECTORIES)
get_filename_component(OSQP_INCLUDE_DIR ${OSQP_INCLUDE_SUB_DIR} PATH)
find /usr -name "glob_opts.h" 2>/dev/null
/usr/local/share/osqp/codegen_files/inc/private/glob_opts.h
// 原写法
#include “osqp_configure.h”
// 修改为
#include <osqp/osqp_configure.h>