1. 程式人生 > >Ubuntu 16.04 安裝 ROS

Ubuntu 16.04 安裝 ROS

Robot Operating System (ROS) 是一個得到廣泛應用機器人系統的軟體框架,它包含了一系列的軟體庫和工具用於構建機器人應用。從驅動到最先進的演算法,以及強大的開發者工具,ROS 包含了開發一個機器人專案所需要的所有東西。且它們都是開源的。

ROS 雖然名為機器人作業系統,但它與我們一般概念中的作業系統,如 Windows,Linux,iOS 和 Android 這些。Windows,Linux,iOS 和 Android 這些作業系統為我們管理計算機的物理硬體資源,如 CPU、記憶體、磁碟、網路及外設,提供如程序、執行緒和檔案這樣的抽象,並提供如讀檔案、寫檔案、建立程序、建立執行緒及啟動執行緒這樣的操作。ROS 所工作的層級並沒有這麼低,它基於一般概念中的作業系統來執行,官方推薦基於 Ubuntu Linux 執行,並在 Ubuntu Linux 作業系統提供的抽象和操作的基礎之上,提供了更高層的抽象,如節點、服務、訊息、主題等,以及更高層的操作,如主題的釋出、主題的訂閱、服務的查詢與連線等操作。同時 ROS 還提供開發機器人專案所需的工具和功能庫。

ROS 發行版是一個版本標識的 ROS 包集合,這些與 Linux 發行版(如 Ubuntu)類似。ROS 發行版的目的是讓開發者可以基於一個相對穩定的程式碼庫來工作,直到他們可以平穩地向前演進。一旦發行版釋出,官方就會限制對其的改動,而僅僅提供對於核心包的 bug fixes 和非破壞性的增強。

當前(2018-01-28) ROS 系統已經發布了多個版本。ROS 最新的一些版本如下:

ROS 系統版本 時間釋出 支援時間
May 23rd, 2016 LTS,April, 2021 (Xenial EOL)
May 23rd, 2015 May, 2017
July 22nd, 2014 LTS,April, 2019(Trusty EOL)
September 4th, 2013 May, 2015

ROS 基本上保持每年一個新版本,每兩年一個長期發行版的釋出節奏。關於 ROS 版本釋出的更多內容,如更多的發行版的介紹,釋出的計劃等,可以參考 ROS 官方站點的 Distributions 主頁。

目前官方推薦使用最近的一個長期支援版本,即 ROS Kinetic Kame,求新的同時兼顧穩定性無疑應該採用這一版本,如果想要嘗試最新的功能特性則可以使用最新的發行版 ROS Lunar Loggerhead

ROS 的安裝步驟如下。

配置 Ubuntu 倉庫

配置 Ubuntu 倉庫,以允許 “restricted”,”universe” 和 “multiverse”。開啟 新立得包管理器,如下圖:

新立得包管理器

選擇 設定 -> 軟體庫(R),彈出如下對話方塊:

Ubuntu 倉庫

開啟 “Ubuntu 軟體” Tab 頁,勾選 “restricted”,”universe” 和 “multiverse” 等選項,如上圖所示。通常情況下,這些選項都是預設選中的,因此這一步一般不會遇到什麼問題。

設定 sources.list

為 Ubuntu 的包管理器增加源,設定計算機接受來自於 packages.ros.org 的軟體。

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'

這一步會根據 Ubuntu Linux 發行版本的不同,新增不同的源。Ubuntu 的版本通過 lsb_release -sc 獲得。

一旦添加了正確的軟體庫,作業系統就知道去哪裡下載程式,並根據命令自動安裝軟體。

設定金鑰

這一步是為了確認原始碼是正確的,並且沒有人在未經所有者授權的情況下,修改任何程式程式碼。通常情況下,當新增完軟體庫時,已經添加了軟體庫的金鑰,並將其新增到作業系統的可信任列表中。

設定金鑰的命令如下:

sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116

如果在連線金鑰伺服器時遇到了問題,可以嘗試在上面的命令中用 hkp://pgp.mit.edu:80hkp://keyserver.ubuntu.com:80 來替換。

安裝

首先,需要確保包管理器的索引已經更新至最新:

sudo apt-get update

ROS 中有非常多不同的庫和工具。官方提供了四種預設的配置來安裝 ROS。也可以獨立地安裝 ROS 包。

桌面完整安裝(推薦採用):ROS,rqtrviz,機器人通用庫,2D/3D 模擬器,導航及 2D/3D 感知

$ sudo apt-get install ros-kinetic-desktop-full
正在讀取軟體包列表... 完成
正在分析軟體包的依賴關係樹       
正在讀取狀態資訊... 完成       
. . . . . .
將會同時安裝下列軟體:
  binfmt-support blt cpp-5 docutils-common docutils-doc fltk1.3-doc fluid fonts-lyx freeglut3 freeglut3-dev g++-5
  g++-5-multilib gazebo7 gazebo7-common gazebo7-plugin-base gcc-5 gcc-5-base gcc-5-base:i386 gcc-5-multilib
  gfortran gfortran-5 hddtemp hdf5-helpers lib32asan2 lib32atomic1 lib32cilkrts5 lib32gcc-5-dev lib32gomp1
  lib32itm1 lib32mpx0 lib32quadmath0 lib32stdc++-5-dev lib32stdc++6 lib32ubsan0 libaec-dev libaec0 libapr1-dev
  libaprutil1-dev libarmadillo6 libarpack2 libasan2 libassimp-dev libassimp3v5 libatomic1 libavcodec-dev
  libavformat-dev libavutil-dev libblas-dev libboost-all-dev libboost-atomic-dev libboost-atomic1.58-dev
  libboost-atomic1.58.0 libboost-chrono-dev libboost-chrono1.58-dev libboost-chrono1.58.0 libboost-context-dev
  libboost-context1.58-dev libboost-context1.58.0 libboost-coroutine-dev libboost-coroutine1.58-dev
  libboost-coroutine1.58.0 libboost-date-time-dev libboost-date-time1.58-dev libboost-dev libboost-exception-dev
  libboost-exception1.58-dev libboost-filesystem-dev libboost-filesystem1.58-dev libboost-graph-dev
  libboost-graph-parallel-dev libboost-graph-parallel1.58-dev libboost-graph-parallel1.58.0
  libboost-graph1.58-dev libboost-graph1.58.0 libboost-iostreams-dev libboost-iostreams1.58-dev
  libboost-locale-dev libboost-locale1.58-dev libboost-locale1.58.0 libboost-log-dev libboost-log1.58-dev
  libboost-log1.58.0 libboost-math-dev libboost-math1.58-dev libboost-math1.58.0 libboost-mpi-dev
  libboost-mpi-python-dev libboost-mpi-python1.58-dev libboost-mpi-python1.58.0 libboost-mpi1.58-dev
  libboost-mpi1.58.0 libboost-program-options-dev libboost-program-options1.58-dev libboost-python-dev
  libboost-python1.58-dev libboost-python1.58.0 libboost-random-dev libboost-random1.58-dev libboost-random1.58.0
  libboost-regex-dev libboost-regex1.58-dev libboost-regex1.58.0 libboost-serialization-dev
  libboost-serialization1.58-dev libboost-serialization1.58.0 libboost-signals-dev libboost-signals1.58-dev
  libboost-signals1.58.0 libboost-system-dev libboost-system1.58-dev libboost-test-dev libboost-test1.58-dev
  libboost-test1.58.0 libboost-thread-dev libboost-thread1.58-dev libboost-timer-dev libboost-timer1.58-dev
  libboost-timer1.58.0 libboost-tools-dev libboost-wave-dev libboost-wave1.58-dev libboost-wave1.58.0
  libboost1.58-dev libboost1.58-tools-dev libbulletcollision2.83.6 libbulletdynamics2.83.6 libcc1-0 libcilkrts5
  libcollada-dom2.4-dp-dev libcollada-dom2.4-dp0 libconsole-bridge-dev libconsole-bridge0.2v5
  libcurl4-openssl-dev libdap-dev libdap17v5 libdapclient6v5 libdapserver7v5 libeigen3-dev libepsilon1
  libflann-dev libflann1.8 libfltk-cairo1.3 libfltk-forms1.3 libfltk-gl1.3 libfltk-images1.3 libfltk1.3
  libfltk1.3-dev libfreeimage-dev libfreeimage3 libfreexl1 libgazebo7 libgazebo7-dev libgcc-5-dev libgdal-dev
  libgdal1i libgeos-3.5.0 libgeos-c1v5 libgeos-dev libgfortran-5-dev libgfortran3 libgif-dev libgl2ps-dev
  libgl2ps0 libglade2-0 libgomp1 libgtest-dev libgts-0.7-5 libgts-bin libgts-dev libhdf4-0-alt libhdf4-alt-dev
  libhdf5-10 libhdf5-cpp-11 libhdf5-dev libhdf5-mpi-dev libhdf5-openmpi-10 libhdf5-openmpi-dev libhwloc-dev
  libhwloc-plugins libhwloc5 libibverbs-dev libibverbs1 libignition-math2 libignition-math2-dev libinput-bin
  libinput-dev libinput10 libitm1 libjasper-dev libjbig-dev libjs-jquery-ui libjsoncpp-dev libjxr0 libkmlbase1
  libkmldom1 libkmlengine1 liblapack-dev libldap2-dev liblinearmath2.83.6 liblog4cxx-dev liblog4cxx10-dev
  liblog4cxx10v5 liblsan0 liblz4-dev liblzma-dev libminizip1 libmpx0 libmysqlclient-dev libmysqlclient20
  libnetcdf-c++4 libnetcdf-cxx-legacy-dev libnetcdf-dev libnetcdf11 libnuma-dev libodbc1 libogdi3.2 libogg-dev
  libogre-1.9-dev libogre-1.9.0v5 libopenjp2-7 libopenmpi-dev libopenmpi1.10 libopenni-dev
  libopenni-sensor-pointclouds0 libopenni0 libpcl-apps1.7 libpcl-common1.7 libpcl-dev libpcl-features1.7
  libpcl-filters1.7 libpcl-io1.7 libpcl-kdtree1.7 libpcl-keypoints1.7 libpcl-octree1.7 libpcl-outofcore1.7
  libpcl-people1.7 libpcl-recognition1.7 libpcl-registration1.7 libpcl-sample-consensus1.7 libpcl-search1.7
  libpcl-segmentation1.7 libpcl-surface1.7 libpcl-tracking1.7 libpcl-visualization1.7 libpcl1.7 libpoco-dev
  libpococrypto9v5 libpocodata9v5 libpocofoundation9v5 libpocomysql9v5 libpoconet9v5 libpoconetssl9v5
  libpocoodbc9v5 libpocosqlite9v5 libpocoutil9v5 libpocoxml9v5 libpocozip9v5 libpq-dev libproj-dev libproj9
  libprotoc-dev libprotoc9v5 libpyside-py3-2.0 libpyside2-dev libpyside2.0 libqhull-dev libqhull7 libqt4-dev
  libqt4-dev-bin libqt4-help libqt4-opengl-dev libqt4-scripttools libqt4-test libqt5clucene5 libqt5concurrent5
  libqt5core5a libqt5dbus5 libqt5designer5 libqt5designercomponents5 libqt5gui5 libqt5help5
  libqt5multimediaquick-p5 libqt5network5 libqt5opengl5 libqt5opengl5-dev libqt5printsupport5
  libqt5quickparticles5 libqt5scripttools5 libqt5sql5 libqt5svg5-dev libqt5test5 libqt5webkit5-dev libqt5widgets5
  libqt5x11extras5-dev libqt5xml5 libqt5xmlpatterns5 libqt5xmlpatterns5-dev libqt5xmlpatterns5-private-dev
  libqtwebkit-dev libquadmath0 libsdformat4 libsdformat4-dev libshiboken-py3-2.0 libshiboken2-dev libshiboken2.0
  libsimbody-dev libsimbody3.5v5 libspatialite-dev libspatialite7 libspnav0 libstdc++-5-dev libstdc++6
  libstdc++6:i386 libsuperlu4 libswresample-dev libswscale-dev libsz2 libtar-dev libtar0 libtbb-dev libtheora-dev
  libtiff5-dev libtiffxx5 libtinyxml-dev libtinyxml2-2v5 libtinyxml2-dev libtsan0 libubsan0 liburdfdom-dev
  liburdfdom-headers-dev liburdfdom-model-state0.4 liburdfdom-model0.4 liburdfdom-sensor0.4 liburdfdom-tools
  liburdfdom-world0.4 liburiparser1 libusb-1.0-0-dev libusb-1.0-doc libuuid1 libvtk-java libvtk5.10 libvtk6-dev
  libvtk6-java libvtk6-qt-dev libvtk6.2 libvtk6.2-qt libwacom-bin libwacom-common libwacom2 libwebp-dev
  libwebpdemux1 libx32asan2 libx32atomic1 libx32cilkrts5 libx32gcc-5-dev libx32gomp1 libx32itm1 libx32quadmath0
  libx32stdc++-5-dev libx32stdc++6 libx32ubsan0 libxerces-c-dev libxerces-c3.1 libxmu-dev libxmu-headers
  libyaml-cpp-dev libzzip-0-13 mpi-default-bin mpi-default-dev ocl-icd-libopencl1 odbcinst odbcinst1debian2
  openmpi-bin openmpi-common openni-utils proj-bin proj-data pyqt5-dev python-attr python-autobahn
  python-catkin-pkg python-catkin-pkg-modules python-chardet python-concurrent.futures python-cycler
  python-defusedxml python-docutils python-ecdsa python-empy python-glade2 python-gobject-2 python-gtk2
  python-imaging python-lz4 python-matplotlib python-matplotlib-data python-mpi4py python-msgpack
  python-netifaces python-nose python-opengl python-pam python-paramiko python-pil python-pyasn1-modules
  python-pydot python-pygments python-pyqt5 python-pyqt5.qtopengl python-pyqt5.qtsvg python-pyqt5.qtwebkit
  python-pyside2 python-pyside2.qtconcurrent python-pyside2.qtcore python-pyside2.qtgui python-pyside2.qthelp
  python-pyside2.qtnetwork python-pyside2.qtprintsupport python-pyside2.qtqml python-pyside2.qtquick
  python-pyside2.qtquickwidgets python-pyside2.qtscript python-pyside2.qtsql python-pyside2.qtsvg
  python-pyside2.qttest python-pyside2.qtuitools python-pyside2.qtwebkit python-pyside2.qtwebkitwidgets
  python-pyside2.qtwidgets python-pyside2.qtx11extras python-pyside2.qtxml python-roman python-rosdep
  python-rosdistro python-rosdistro-modules python-rospkg python-rospkg-modules python-serial
  python-service-identity python-sip python-sip-dev python-snappy python-tk python-trollius python-twisted
  python-twisted-bin python-twisted-core python-txaio python-vtk6 python-wxgtk3.0 python-wxtools python-wxversion
  python-zope.interface qt4-linguist-tools qt4-qmake qt5-qmake qtbase5-dev qtbase5-dev-tools qtbase5-private-dev
  qtdeclarative5-dev qtdeclarative5-private-dev qtmultimedia5-dev qtscript5-dev qtscript5-private-dev
  qttools5-dev qttools5-dev-tools qttools5-private-dev ros-kinetic-actionlib ros-kinetic-actionlib-msgs
  ros-kinetic-actionlib-tutorials ros-kinetic-angles ros-kinetic-bond ros-kinetic-bond-core ros-kinetic-bondcpp
  ros-kinetic-bondpy ros-kinetic-camera-calibration ros-kinetic-camera-calibration-parsers
  ros-kinetic-camera-info-manager ros-kinetic-catkin ros-kinetic-class-loader ros-kinetic-cmake-modules
  ros-kinetic-collada-parser ros-kinetic-collada-urdf ros-kinetic-common-msgs ros-kinetic-common-tutorials
  ros-kinetic-compressed-depth-image-transport ros-kinetic-compressed-image-transport ros-kinetic-control-msgs
  ros-kinetic-cpp-common ros-kinetic-cv-bridge ros-kinetic-depth-image-proc ros-kinetic-desktop
  ros-kinetic-diagnostic-aggregator ros-kinetic-diagnostic-analysis ros-kinetic-diagnostic-common-diagnostics
  ros-kinetic-diagnostic-msgs ros-kinetic-diagnostic-updater ros-kinetic-diagnostics
  ros-kinetic-dynamic-reconfigure ros-kinetic-eigen-conversions ros-kinetic-eigen-stl-containers
  ros-kinetic-executive-smach ros-kinetic-filters ros-kinetic-gazebo-dev ros-kinetic-gazebo-msgs
  ros-kinetic-gazebo-plugins ros-kinetic-gazebo-ros ros-kinetic-gazebo-ros-pkgs ros-kinetic-gencpp
  ros-kinetic-geneus ros-kinetic-genlisp ros-kinetic-genmsg ros-kinetic-gennodejs ros-kinetic-genpy
  ros-kinetic-geometric-shapes ros-kinetic-geometry ros-kinetic-geometry-msgs ros-kinetic-geometry-tutorials
  ros-kinetic-gl-dependency ros-kinetic-image-common ros-kinetic-image-geometry ros-kinetic-image-pipeline
  ros-kinetic-image-proc ros-kinetic-image-publisher ros-kinetic-image-rotate ros-kinetic-image-transport
  ros-kinetic-image-transport-plugins ros-kinetic-image-view ros-kinetic-interactive-marker-tutorials
  ros-kinetic-interactive-markers ros-kinetic-joint-state-publisher ros-kinetic-kdl-conversions
  ros-kinetic-kdl-parser ros-kinetic-laser-assembler ros-kinetic-laser-filters ros-kinetic-laser-geometry
  ros-kinetic-laser-pipeline ros-kinetic-librviz-tutorial ros-kinetic-map-msgs ros-kinetic-media-export
  ros-kinetic-message-filters ros-kinetic-message-generation ros-kinetic-message-runtime ros-kinetic-mk
  ros-kinetic-nav-msgs ros-kinetic-nodelet ros-kinetic-nodelet-core ros-kinetic-nodelet-topic-tools
  ros-kinetic-nodelet-tutorial-math ros-kinetic-octomap ros-kinetic-opencv3 ros-kinetic-orocos-kdl
  ros-kinetic-pcl-conversions ros-kinetic-pcl-msgs ros-kinetic-pcl-ros ros-kinetic-perception
  ros-kinetic-perception-pcl ros-kinetic-pluginlib ros-kinetic-pluginlib-tutorials ros-kinetic-polled-camera
  ros-kinetic-python-orocos-kdl ros-kinetic-python-qt-binding ros-kinetic-qt-dotgraph ros-kinetic-qt-gui
  ros-kinetic-qt-gui-cpp ros-kinetic-qt-gui-py-common ros-kinetic-qwt-dependency ros-kinetic-random-numbers
  ros-kinetic-resource-retriever ros-kinetic-robot ros-kinetic-robot-model ros-kinetic-robot-state-publisher
  ros-kinetic-ros ros-kinetic-ros-base ros-kinetic-ros-comm ros-kinetic-ros-core ros-kinetic-ros-tutorials
  ros-kinetic-rosbag ros-kinetic-rosbag-migration-rule ros-kinetic-rosbag-storage ros-kinetic-rosbash
  ros-kinetic-rosboost-cfg ros-kinetic-rosbuild ros-kinetic-rosclean ros-kinetic-rosconsole
  ros-kinetic-rosconsole-bridge ros-kinetic-roscpp ros-kinetic-roscpp-core ros-kinetic-roscpp-serialization
  ros-kinetic-roscpp-traits ros-kinetic-roscpp-tutorials ros-kinetic-roscreate ros-kinetic-rosgraph
  ros-kinetic-rosgraph-msgs ros-kinetic-roslang ros-kinetic-roslaunch ros-kinetic-roslib ros-kinetic-roslint
  ros-kinetic-roslisp ros-kinetic-roslz4 ros-kinetic-rosmake ros-kinetic-rosmaster ros-kinetic-rosmsg
  ros-kinetic-rosnode ros-kinetic-rosout ros-kinetic-rospack ros-kinetic-rosparam ros-kinetic-rospy
  ros-kinetic-rospy-tutorials ros-kinetic-rosservice ros-kinetic-rostest ros-kinetic-rostime ros-kinetic-rostopic
  ros-kinetic-rosunit ros-kinetic-roswtf ros-kinetic-rqt-action ros-kinetic-rqt-bag ros-kinetic-rqt-bag-plugins
  ros-kinetic-rqt-common-plugins ros-kinetic-rqt-console ros-kinetic-rqt-dep ros-kinetic-rqt-graph
  ros-kinetic-rqt-gui ros-kinetic-rqt-gui-cpp ros-kinetic-rqt-gui-py ros-kinetic-rqt-image-view
  ros-kinetic-rqt-launch ros-kinetic-rqt-logger-level ros-kinetic-rqt-moveit ros-kinetic-rqt-msg
  ros-kinetic-rqt-nav-view ros-kinetic-rqt-plot ros-kinetic-rqt-pose-view ros-kinetic-rqt-publisher
  ros-kinetic-rqt-py-common ros-kinetic-rqt-py-console ros-kinetic-rqt-reconfigure
  ros-kinetic-rqt-robot-dashboard ros-kinetic-rqt-robot-monitor ros-kinetic-rqt-robot-plugins
  ros-kinetic-rqt-robot-steering ros-kinetic-rqt-runtime-monitor ros-kinetic-rqt-rviz
  ros-kinetic-rqt-service-caller ros-kinetic-rqt-shell ros-kinetic-rqt-srv ros-kinetic-rqt-tf-tree
  ros-kinetic-rqt-top ros-kinetic-rqt-topic ros-kinetic-rqt-web ros-kinetic-rviz
  ros-kinetic-rviz-plugin-tutorials ros-kinetic-rviz-python-tutorial ros-kinetic-self-test
  ros-kinetic-sensor-msgs ros-kinetic-shape-msgs ros-kinetic-simulators ros-kinetic-smach ros-kinetic-smach-msgs
  ros-kinetic-smach-ros ros-kinetic-smclib ros-kinetic-stage ros-kinetic-stage-ros ros-kinetic-std-msgs
  ros-kinetic-std-srvs ros-kinetic-stereo-image-proc ros-kinetic-stereo-msgs ros-kinetic-tf
  ros-kinetic-tf-conversions ros-kinetic-tf2 ros-kinetic-tf2-eigen ros-kinetic-tf2-geometry-msgs
  ros-kinetic-tf2-kdl ros-kinetic-tf2-msgs ros-kinetic-tf2-py ros-kinetic-tf2-ros
  ros-kinetic-theora-image-transport ros