1. 程式人生 > >ROS2原始碼編譯和安裝

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)      安裝GCCG ++ CMakePython 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_IGNOREcam2imagedemo目錄中將它保留在構建過程之外即可。

可選地構建所有軟體包:

src/ament/ament_tools/scripts/ament.py build --build-tests --symlink-install --isolated 

之後local_setup.*installinstall_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間的訊息了。