Ubuntu18.04配置carla0.9.11踩坑与解决方法总结,同时解决安装carla-ros-bridge遇到的问题,并复现OpenCDA成功与ros关联

Ubuntu18.04配置carla0.9.11踩坑与解决方法总结,同时解决安装carla-ros-bridge遇到的问题,并复现OpenCDA成功与ros关联


背景:
主要是为了复现叶小飞的OpenCDA仿真环境,方便验证自己的多车协同算法。又重新捡起了carla仿真。一开始使用了Ubuntu16.04配置了所有环境,但是使用OpenCDA的代码时,提示系统内核不符合要求,无奈还是升级了18.04才解决问题。这一路踩坑不少,总结一下,方便以后查阅,同时希望能够帮助到此刻焦头烂额的同行们。

UE4和carla版本的选择与安装

注意:
OpenCDA的选择要求是carla>=0.9.11。并且提供了按照源的方案安装的步骤
安装之前一定注意,通过源的安装方法,保证磁盘空间要预留至少100G的空间,且运行carla服务器也需要至少4GB的GPU。可以通过指令nvidia-smi查看系统GPU情况。
这里选择Unreal Engine4.24carla0.9.11,基于Ubuntu18.04;

  1. 依赖:
sudo apt-get update &&
sudo apt-get install wget software-properties-common &&
sudo add-apt-repository ppa:ubuntu-toolchain-r/test &&
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key|sudo apt-key add - &&
sudo apt-add-repository "deb http://apt.llvm.org/xenial/ llvm-toolchain-xenial-8 main" &&
sudo apt-get update

Ubuntu18.04下要安装有:

sudo apt-get install build-essential clang-8 lld-8 g++-7 cmake ninja-build libvulkan1 python python-pip python-dev python3-dev python3-pip libpng-dev libtiff5-dev libjpeg-dev tzdata sed curl unzip autoconf libtool rsync libxml2-dev &&
pip2 install --user setuptools &&
pip3 install --user -Iv setuptools==47.3.1 &&
pip2 install --user distro &&
pip3 install --user distro

同时为了避免UE和 CARLA 依赖项之间的兼容性问题,使用相同的编译器版本和 C++ runtime library来编译所有内容。CARLA 团队使用 clang-8 和 LLVM 的 libc++。使用以下指令更改默认 clang 版本以编译 Unreal Engine 和 CARLA 依赖项。

sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/lib/llvm-8/bin/clang++ 180 &&
sudo update-alternatives --install /usr/bin/clang clang /usr/lib/llvm-8/bin/clang 180
  1. 申请一个github账号和Unreal Engine账号,并形成关联
    详细步骤看这里

  2. Unreal Engine 4.24的下载安装
    安装的目录最好是在~/UnrealEngine_4.24,也就是/home/your path/UnrealEngine_4.24,当然也可以换地方,但是下面的路径问题都要按照相应的改变而调整:

  3. 终端运行以下指令下载UE4,会在目录/home/your path路径下生产UnrealEngine_4.24的文件夹。(如果速度慢,也可以自行去链接下载,并解压到/home/your path路径下)

    git clone --depth=1 -b 4.24 https://github.com/EpicGames/UnrealEngine.git ~/UnrealEngine_4.24
    
  4. 终端进入UE4文件路径下

    cd ~/UnrealEngine_4.24
    
  5. 然后运行以下指令获取patch.txt文件并加载

    wget https://carla-releases.s3.eu-west-3.amazonaws.com/Linux/UE_Patch/430667-13636743-patch.txt 430667-13636743-patch.txt
    patch --strip=4 < 430667-13636743-patch.txt
    
  6. 编译,可能会比较慢。如果因为网速问题失败,建议多次尝试/更换网络/连接手机热点(为了排查错误可以三个指令分别运行)

    ./Setup.sh && ./GenerateProjectFiles.sh && make
    
  7. 最后运行以下UE4确保已经正确安装,第一次速度可能比较慢

    cd ~/UnrealEngine_4.24/Engine/Binaries/Linux && ./UE4Editor
    
  8. Carla0.9.11的下载安装
    不推荐使用git clone https://github.com/carla-simulator/carla指令直接在/home/your path目录下获取carla文件,这里默认下载的是最新版本carla,当时默认下载了0.9.13,和UE4.24不匹配,害我所有功夫都白费了。
    手动进入carla0.9.11下载压缩包,并解压到/home/your path目录下,修改文件夹名为carla

  9. 进入carla文件夹路径:cd ~/carla

  10. 运行./Update.sh(为了下载content文件,速度可能会很慢,可以连接热点)

  11. 添加UE4的工作路径sudo gedit ~/.bashrc
    export UE4_ROOT=~/UnrealEngine_4.24加入到.bashrc文件里
    保存并退出,执行source ~/.bashrc

  12. 安装carla的最后一步,就是运行make指令,第一次使用,要先运行make PythonAPI,加载相应的模块。
    如果你是用python3,那么可以直接执行make PythonAPI,默认是执行make PythonAPI.3的
    如果需要用Python2,系统默认的是python2.7,执行make PythonAPI ARGS="--python-version=2"
    一般只需要make PythonAPI就行了。
    这里遇到的几个问题:
    ①.网速慢,生成的Build文件夹下文件,链接总是失败,一次又一次尝试。切换到热点就解决了
    ②. make PythonAPI执行一半,提示了找不到git库,无法下载(截图没存),但是网上找都会说使用git init就可以解决。一定不要用该方法!!!!,只会越陷越深。这里提供我的.git文件,复制到carla/目录下就行了。(如果我还没有附加百度云链接,说明还在上传,请等待更新,有点大)
    ③. make PythonAPI过程中的error,提示fatal error: 'pyconfig.h' file not found,在该命令行执行:

    export CPLUS_INCLUDE_PATH=/home/your anaconda path/include/python3.7m
    

    如果没有创建anaconda,就用系统自带的python,版本根据自己的去改

    export CPLUS_INCLUDE_PATH=/usr/include/python3.6m
    

    ④.再次执行make PythonAPI就可以了,成功之后,Build文件夹应该已经完毕,同时生成PythonAPI/carla/dist/文件夹,下面有egg文件,我的是生成了carla-0.9.11-py3.6-linux-x86_64.egg,如果需要py3.7的,可以直接复制并粘贴修改文件名为carla-0.9.11-py3.7-linux-x86_64.egg,因为后续OpenCDA要用,而且没有出现问题。如果使用了make PythonAPI ARGS="--python-version=2",会生成carla-0.9.11-py2.7-linux-x86_64.egg文件。

    1. 执行make launch,第一次执行会比较慢,如果成功会弹出carla0.9.11的界面,首次打开会有教程。点击Play/播放,才相当于真正启动carla服务器。
      如果出现BuildCarlaUE4.sh: ERROR: UE4_ROOT is not defined, or points to a non-existant directory, please set this environment variable.的问题,首先检查UE4文件及是否存在,以及是否将UE4的环境变量加到bashrc文件里,如果还是不行,在Carla/Util/BuildTools/BuildCarlaUE4.sh的首行加入 UE4_ROOT=~/UnrealEngine_4.24


      图1.carla启动及其运行界面

    2. 在终端测试,如果成功,会在carla服务器中加载人/车/动态天气

      # Terminal A 
      cd PythonAPI/examples
      python3 spawn_npc.py  
      # Terminal B
      cd PythonAPI/examples
      python3 dynamic_weather.py 
      

      至此,carla问题告一段落。期间碰到的问题主要还是网络不佳,以及版本不匹配问题。

OpenCDA的安装与使用

  1. 首先还是先下载OpenCDA:

    git clone https://github.com/ucla-mobility/OpenCDA.git
    cd OpenCDA
    
  2. 安装一些依赖,推荐使用Anaconda3,可以创建虚拟环境,各种依赖也都配置到虚拟环境里。这样也省的又把系统自带的Python给玩坏了。在上一步进入OpenCDA的工作目录下,执行以下命令:

    conda env create -f environment.yml
    conda activate opencda
    python setup.py develop
    

    至此会成功创建名为opencda的虚拟环境。如果环境创建完成,但是通过environment.yml创建的依赖有失败的情况,执行:pip install -r requirements.txt

  3. 依赖完成后,需要将carla的库加入到opencda环境中。还是将以下指令加入到.bashrc文件中,并source:

    export CARLA_HOME=/path/to/your/CARLA_ROOT
    export CARLA_VERSION=0.9.11
    ./setup.sh
    

    如果一切顺利的话,setup.sh之后会显示Successful Setup! 为了检查是否真的成功,可以运行python -c "import carla",如果没有出错,则ok。
    注意:
    setup.sh主要还是为了在opencda虚拟环境中导入carla库,使该虚拟环境下的python可以直接运行import carla。如果该指令最后失败了,打开.sh文件,按照代码,哪一步出错可以自己操作。同时,如果不利用虚拟环境下的python,为了方便直接运行import carla按照叶小飞提供的教程,自己写一个setup.py来创建。
    复现的效果

图2.复现的效果

carla-ros-bridge的安装

为了方便OpenCDA与ros关联(其实就是carla和ros关联),这一步也是必不可少的。最主要的还是踩到坑了,又是因为默认的git下载是最新版本不匹配的问题。
如果要使用carla-ros-bridge,那么make PythonAPI ARGS="--python-version=2"是必不可少的了。和之前一样的步骤。
还是使用源来安装carla-ros-bridge,进入网页,手动下载ros-bridge-0.9.11.zip。同时单独下载其中的carla-msg,并生成.zip。后续会用。
我知道下面命令行中如果使用rosdep update你一定会失败,解决方法参看这里,也就是先执行:sudo pip install rosdepc安装rosdepc,然后将所有的rosdep改为rosdepc

mkdir -p ~/carla-ros-bridge/catkin_ws/src
#将下载好的ros-bridge放在src下并:
cd /carla-ros-bridge/catkin_ws/src
ln -s ../../ros-bridge
source /opt/ros/melodic/setup.bash # 注意,这里是 ROS melodic
cd ..
sudo rosdepc init
rosdepc update
rosdepc install --from-paths src --ignore-src -r
catkin_make

我遇到的错误:

  1. 在catkin_make的时候,提示:

    CMake Error at /home/k/carla-ros-bridge/catkin_ws/build/ros-bridge/carla_ackermann_msgs/cmake/carla_ackermann_msgs-genmsg.cmake:3 (message):
      Could not find messages which
      '/home/k/carla-ros-bridge/catkin_ws/src/ros-bridge/carla_ackermann_msgs/msg/EgoVehicleControlInfo.msg'
      depends on.  Did you forget to specify generate_messages(DEPENDENCIES ...)?
    
      Cannot locate message [CarlaEgoVehicleControl] in package [carla_msgs] with
      paths
      [['/home/k/carla-ros-bridge/catkin_ws/src/ros-bridge/carla_msgs/msg']]
    Call Stack (most recent call first):
      /opt/ros/melodic/share/genmsg/cmake/genmsg-extras.cmake:307 (include)
      ros-bridge/carla_ackermann_msgs/CMakeLists.txt:21 (generate_messages)
      
    -- Configuring incomplete, errors occurred!
    See also "/home/k/carla-ros-bridge/catkin_ws/build/CMakeFiles/CMakeOutput.log".
    See also "/home/k/carla-ros-bridge/catkin_ws/build/CMakeFiles/CMakeError.log".
    Invoking "cmake" failed
    

    原因是刚刚下载的ros-bridge包中的carla-msg,不知道为什么是空的,所以刚刚单独下载了carla-msg.zip,解压后把文件都复制进去,就好了。

  2. 在rosdepc update如果提示:也不用管它,不影响。

    ERROR: Not all sources were able to be updated.
    [[[
    ERROR: unable to process source [https://gitee.com/ohhuo/rosdistro/raw/master/releases/fuerte.yaml]:
    Failed to download target platform data for gbpdistro:
    <urlopen error ('_ssl.c:711: The handshake operation timed out',)>
    ]]]
    

以上这些工作都完成之后,就可以运行carla-ros-bridge了:

  1. 简单粗暴运行make launch启动carla

  2. 执行:source ~/carla-ros-bridge/catkin_ws/devel/setup.bash(当然该指令也可以加到.bashrc文件中,但是官网提示可能会与在另一个工作空间中工作时产生冲突,我就没加。大不了每次执行前都运行一次该source)

  3. 执行export PYTHONPATH=$PYTHONPATH:~/carla/PythonAPI/carla/dist/carla-0.9.11-py3.7-linux-x86_64.egg

  4. 启动carla-ros-bridge:roslaunch carla_ros_bridge carla_ros_bridge.launch,在此之前,保证在其它终端运行了roscore,且carla已经运行,并点击了play播放按键。在其它终端中执行rostopic list,可以看到包含carla的节点:

    图3.carla-ros-bridge启动后tostopic list的结果

    启动carla-ros-bridge的launch文件时,遇到的问题:

    1. ModuleNotFoundError: No module named ‘transforms3d’
      ModuleNotFoundError: No module named ‘rospkg’
      解决方法是,在激活了opencda虚拟环境的终端中,执行:

      pip install rospkg
      pip install transforms3d
      
    2. ImportError: dynamic module does not define module export function (PyInit__tf2)
      主要是因为,tf、tf2_ros等包是依赖于python2的,但是我运行该launch文件,就是依赖于python3的,我也搞不明白为什么了,就强行在python3下安装了tf。详情见该链接这个

      sudo apt update
      sudo apt install python3-catkin-pkg-modules python3-rospkg-modules python3-empy
      #准备一个catkin工作空间,因为都叫catkin_ws,我就把它和ros-bridge放同一个目录下了
      mkdir -p ~/catkin_ws/src; cd ~/catkin_ws
      catkin_make
      source devel/setup.bash
      wstool init
      wstool set -y src/geometry2 --git https://github.com/ros/geometry2 -v 0.6.5
      wstool up
      rosdep install --from-paths src --ignore-src -y -r
      #最后用Python3编译
      catkin_make --cmake-args \
                  -DCMAKE_BUILD_TYPE=Release \
                  -DPYTHON_EXECUTABLE=/usr/bin/python3 \
                  -DPYTHON_INCLUDE_DIR=/usr/include/python3.6m \
                  -DPYTHON_LIBRARY=/usr/lib/x86_64-linux-gnu/libpython3.6m.so
      

至此编译通过后,ros和carla终于也连接到了一起!
完结撒花!可以好好工作了!

来源:kxk_ustc

物联沃分享整理
物联沃-IOTWORD物联网 » Ubuntu18.04配置carla0.9.11踩坑与解决方法总结,同时解决安装carla-ros-bridge遇到的问题,并复现OpenCDA成功与ros关联

发表评论