ROS2原始碼編譯和安裝
機器人開源作業系統軟體ROS在10年後, 終於推出全新架構的ROS2,代號“ardent”。中文意思為“熱心的美洲鱉”,看來ROS2要從ROS1的“海龜”變成“土鱉”系列了。
與此同時,ROS2的編譯系統也換成全新的ament。之前熟悉ROS的知道,ROS最初使用rosbuild,後來換成catkin,換成catkin可以理解,比較比起rosbuild在很多方面要先進很多的,比如支援外部構建,CMake配置檔案的自動生成等等。但是catkin也並不完美,針對開發者對catkin缺陷提交的反饋,催生了新一代的編譯系統ament。
言歸正傳,本文主要是詳細講下ROS2從原始碼開始編譯安裝過程,因為按網上的一些說明操作,會出現很多問題。
一、環境準備
1) 64位的UbuntuLinux Xenial Xerus 16.04
2) 確保有一個支援UTF-8locate環境。(大部分情況做步驟c)
a) sudo locale-gen en_USen_US.UTF-8
b) sudo update-localeLC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
c) export LANG=en_US.UTF-8
二、開發環境設定
a) 首先確保已將ROS儲存庫新增到系統中,如果沒有:
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt-key adv --keyserver ha.pool.sks-keyservers.net --recv-keys 421C365BD9FF1F717815A3895523BAEEB01FA116
b) 安裝GCC,G ++ CMake,Python 3 EmPy包(不碰撞的定製包)和setuptools:
sudo apt-get update
sudo apt-get install git wget
sudo apt-get install build-essential cppcheck cmake libopencv-dev python-empy python3-dev python3-empy python3-nose python3-pip python3-pyparsing python3-setuptools python3-vcstool python3-yaml libtinyxml-dev libeigen3-dev # dependencies for testing
sudo apt-get install clang-format pydocstyle pyflakes python3-coverage python3-mock python3-pep8 uncrustify
# Install argcomplete for command-line tab completion from the ROS2 tools.
# Install from pip rather than from apt-get because of a bug in the Ubuntu 16.04 version of argcomplete
sudo pip3 install argcomplete
# additional testing dependencies from pip (because not available on ubuntu 16.04)
sudo pip3 install flake8 flake8-blind-except flake8-builtins flake8-class-newline flake8-comprehensions flake8-deprecated flake8-docstrings flake8-import-order flake8-quotes pytest pytest-cov pytest-runner
# dependencies for FastRTPS
sudo apt-get install libasio-dev libtinyxml2-dev
c) 如果正在編譯Beta-1或更高版本,則還需要為Fast-RTPS安裝boost
sudo apt-get install libboost-chrono-dev libboost-date-time-dev libboost-program-options-dev libboost-regex-dev libboost-system-dev libboost-thread-dev
# dependencies for RViz sudo apt-get install libcurl4-openssl-dev libqt5core5a libqt5gui5 libqt5opengl5 libqt5widgets5 libxaw7-dev libgles2-mesa-dev libglu1-mesa-dev qtbase5-dev
d) 注意,RViz的依賴,沒有的話會報各種各樣的錯
# dependencies for RViz sudo apt-get install libcurl4-openssl-dev libqt5core5a libqt5gui5 libqt5opengl5 libqt5widgets5 libxaw7-dev libgles2-mesa-dev libglu1-mesa-dev qtbase5-dev
三、獲取ROS2.0程式碼
建立一個工作區獲取原始碼:
mkdir -p ~/ros2_ws/src cd ~/ros2_ws
wget https://raw.githubusercontent.com/ros2/ros2/release-latest/ros2.repos vcs-import src < ros2.repos
四、編譯
cd ~/ros2_ws/
src/ament/ament_tools/scripts/ament.py build --build-tests --symlink-install
注意:如果在編譯所有示例時遇到困難,並且這會妨礙成功生成,則可以使用與忽略子樹或從工作區中刪除資料夾AMENT_IGNORE
相同的方式CATKIN_IGNORE
。舉個例子:你想避免安裝大型的OpenCV庫。那麼只需$ touch AMENT_IGNORE
在cam2image
demo目錄中將它保留在構建過程之外即可。
可選地構建所有軟體包:
src/ament/ament_tools/scripts/ament.py build --build-tests --symlink-install --isolated
之後local_setup.*
從install
/ install_isolated
資料夾中獲取原始檔
五、執行示例
a) 在一個終端中,輸入設定檔案,然後執行talker
:
. ~/ros2_ws/install/local_setup.bash
ros2 run demo_nodes_cpp talker
b) 在另一個終端源中安裝檔案,然後執行listener:
. ~/ros2_ws/install/local_setup.bash
ros2 run demo_nodes_py listener
成功的話,就可以看到talker和listener間的訊息了。