Ubuntu 1604安裝ROS+ ROS初始化失敗的解決方案


本文是對網絡上安裝ROS以及解決ROS初始化報錯問題解決方法的整理,僅作為個人學習記錄使用#

1. ROS版本選擇

ROS目前只支持在Linux系統上安裝部署,它的首選開發平台是Ubuntu。時至今日ROS已經相繼更新推出了多種版本,供不同版本的Ubuntu開發者使用。為了提供最穩定的開發環境,ROS的每個版本都有一個推薦運行的Ubuntu版本。如下表所示:

ROS版本 首選Ubuntu版本
Noetic Ubuntu 20.04
Melodic Ubuntu 18.04
Lunar Ubuntu 17.04
Kinetic(建議選用) Ubuntu 16.04
Indigo Ubuntu 14.04
本教程使用的平台是Ubuntu 16.04,ROS版本是Kinetic。
如果已經安裝Ubuntu,可以在終端中輸入cat /etc/issue確定Ubuntu版本號,然后選擇對應的ROS版本。如果沒有安裝正確的ROS版本,就會出現各種各樣的依賴a錯誤,所以安裝時請謹慎。
更多信息請參考 ROS官方網站進行下載和安裝。

2. 安裝ROS

在正式的安裝前,先檢查下Ubuntu初始環境是否配置正確。
打開Ubuntu的設置->軟件與更新->Ubuntu軟件->勾選關鍵字universe,restricted,multiverse三項。如圖所示:
Ubuntu軟件與更新
配置完成后,就可以開始安裝ROS了,打開終端。
① 添加sources.list

$ sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu/ $DISTRIB_CODENAME main" > /etc/apt/sources.list.d/ros-latest.list'

這一步配置將鏡像添加到Ubuntu系統源列表中,建議使用國內或鏡像源,這樣能夠保證下載速度。本例使用的是中國科技大學的源。
② 添加keys

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

公鑰是Ubuntu系統的一種安全機制,也是ROS安裝中不可缺的一部分。
③ 系統更新

$ sudo apt-get update && sudo apt-get upgrade

更新系統,確保自己的Debian軟件包和索引是最新的。
④ 安裝ROS
ROS中有很多函數庫和工具,官網提供了四種默認的安裝方式,當然也可以單獨安裝某個特定的軟件包。這四種方式包括桌面完整版安裝、桌面版安裝,基礎版安裝、單獨軟件包安裝。推薦安裝桌面完整版安裝(包含ROS、rqt、rviz、通用機器人函數庫、2D/3D仿真器、導航以及2D/3D感知功能),如下:
Ubuntu 16.04安裝Kinetic版本

$ sudo apt-get install ros-kinetic-desktop-full # Ubuntu 16.04

如果你不想安裝桌面完整版,你還可以嘗試以下三種方式安裝:
桌面版安裝(包含ROS、rqt、rviz以及通用機器人函數庫)

$ sudo apt-get install ros-kinetic-desktop

基礎版安裝(包含ROS核心軟件包、構建工具以及通信相關的程序庫,無GUI工具)

$ sudo apt-get install ros-kinetic-ros-base

單獨軟件包安裝(這種安裝方式在運行ROS缺少某些package依賴時會經常用到。你可以安裝某個指定的ROS軟件包,使用軟件包名稱替換掉下面的PACKAGE)

$ sudo apt-get install ros-kinetic-PACKAGE

例如系統提示找不到slam-gmapping,你就可以:

$ sudo apt-get install ros-kinetic-slam-gmapping

要查找可用的軟件包,請運行:

$ apt-cache search ros-kinetic

軟件包的依賴問題還可能出現在重復安裝ROS、錯誤安裝軟件包的過程中,出現有一些軟件包無法安裝,例如:

下列軟件包有未滿足的依賴關系:ros-kinetic-desktop-full : 
依賴: ros-kinetic-desktop 但是它將不會被安裝;
依賴: ros-kinetic-perception 但是它將不會被安裝;
依賴: ros-kinetic-simulators 但是它將不會被安裝;
E: 無法修正錯誤,因為您要求某些軟件包保持現狀,就是它們破壞了軟件包間的依賴關系。

出現上述問題,有可能是自己的版本不合適不兼容造成,也可能是鏡像源沒有更新,具體的設置參考軟件和更新的截圖。當然也有可能是其他原因,比如更新了忘記刷新環境source一下,重開一個終端等等。具體的問題原因可以去搜索引擎上嘗試求助解決,或者登陸ROS Wiki(ROS的百科全書)去查詢解決自己的具體問題。

3. 配置ROS

配置ROS是安裝完ROS之后必須的工作。
① 初始化rosdep

$ sudo rosdep init 
$ rosdep update

這一步初始化rosdep,是使用ROS之前的必要一步。rosdep可以方便在你需要編譯某些源碼的時候為其安裝一些系統依賴,同時也是某些ROS核心功能組件所必需用到的工具。


附:(ROS初始化報錯解決辦法)


Ubuntu安裝ROS完成后初始化失敗,通過本地創建配置文件的方法解決。

1.執行 sudo rosdep init 失敗
反復嘗試一下,一般情況下反復個幾次,init這步就可以成功。
如果反復不成功,根據提示錯誤,可以先參考下面鏈接提供的方法嘗試一下
https://www.cnblogs.com/xuhaoforwards/p/9399744.html
上面的操作都不成功,可以參考下面。
sudo rosdep init 這個操作最主要的工作就是從https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.list,下載文件20-default.list,並把它放到/etc/ros/rosdep/sources.list.d/這個目錄下。
20-default.list這個文件的內容如下:

# os-specific listings first
yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml osx

# generic
yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml
yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/python.yaml
yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/ruby.yaml
gbpdistro https://raw.githubusercontent.com/ros/rosdistro/master/releases/fuerte.yaml fuerte
 
# newer distributions (Groovy, Hydro, ...) must not be listed anymore, they are being fetched from the rosdistro index.yaml instead

用最高權限創建目錄/etc/ros/rosdep/sources.list.d/,並在此目錄下創建20-default.list這個文件。
2. 執行rosdep update失敗
這步的操作失敗原因是從raw.githubusercontent.com/下載文件失敗,主要是防火牆限制了對這個網站的訪問。

(1)可以先參考下面鏈接的方法,將python腳本的超時時間寫長一點比如120s,然后反復嘗試。
https://www.cnblogs.com/zxzmnh/p/11758103.html
(2)如果以上操作仍然無效的話,請繼續往下看。分析了前面鏈接提到的sources_list.pygbpdistro_support.pyrep3.py幾個腳本,發現主要在打開20-default.list里的鏈接時失敗,也就是無法下載20-default.list列舉的幾個配置文件。把這些文件下載到本地,然后修改20-default.list腳本文件就可以了。
具體操作如下:
a.將20-default.list中的鏈接在瀏覽器中打開,然后創建一個同名文件,最好連目錄結構一起建好,這樣后面改腳本比較容易。我是直接建在了/etc/ros/建了相應的目錄。
本文提供了對應的文件,百度網盤:https://pan.baidu.com/s/14bQbLQ6v-j9SfrHPfCu5Nw 提取碼:hy4o,下載后解壓到/etc/ros目錄下。需要超級權限。
b.修改20-default.list腳本文件,需要超級權限。可以跟前面的腳本內容做下對比。

# os-specific listings first
#yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml osx
yaml file:///etc/ros/rosdistro/master/rosdep/osx-homebrew.yaml osx
# generic
#yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml
#yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/python.yaml
#yaml https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/ruby.yaml
#gbpdistro https://raw.githubusercontent.com/ros/rosdistro/master/releases/fuerte.yaml fuerte
 
yaml file:///etc/ros/rosdistro/master/rosdep/base.yaml
yaml file:///etc/ros/rosdistro/master/rosdep/python.yaml
yaml file:///etc/ros/rosdistro/master/rosdep/ruby.yaml
gbpdistro file:///etc/ros/rosdistro/master/releases/fuerte.yaml fuerte
# newer distributions (Groovy, Hydro, ...) must not be listed anymore, they are being fetched from the rosdistro index.yaml instead

退出保存后,執行rosdep update
在更新過程中,還有部分配置信息會從raw.githubusercontent.com上下載,但是反復幾次,基本上就可以成功了。
(3)經過上面兩步,還是失敗,請繼續往下看。
sudo 打開/usr/lib/python2.7/dist-packages/rosdistro/__init__.py這個文件,按照下面的代碼進行修改。

# index information
 
#DEFAULT_INDEX_URL = 'https://raw.githubusercontent.com/ros/rosdistro/master/index-v4.yaml'
DEFAULT_INDEX_URL = 'file:///etc/ros/rosdistro/master/index-v4.yaml'

保存后,執行rosdep update。如果一次不成功,再執行個一兩次,應該就會出現下面成功完成的這些打印。
(4)如果執行到第3步還是報錯
可能是本機的DNS服務被污染了,無法獲得https://raw.githubusercontent.com這個網址的正確IP,導致連接失敗。這時你需要更新一下DNS服務器設置,選擇一個外部的DNS服務器。以ubuntu MATE 16.04為例,路徑如下:
系統-->系統管理-->網絡-->DNS,在這個界面下,先解鎖,然后在DNS服務器欄,點擊Add,在對話框中填上8.8.8.8(google的DNS服務器),把它放到一位(可以點着上下拖動),然后鎖定,關閉。
回到terminal,執行rosdep update。這時應該就不會報錯了,有可能會超時,主要是網速問題,嘗試幾次就應該出現下面成功的打印了。

reading in sources list data from /etc/ros/rosdep/sources.list.d
Hit file:///etc/ros/rosdistro/master/rosdep/osx-homebrew.yaml
Hit file:///etc/ros/rosdistro/master/rosdep/base.yaml
Hit file:///etc/ros/rosdistro/master/rosdep/python.yaml
Hit file:///etc/ros/rosdistro/master/rosdep/ruby.yaml
Hit file:///etc/ros/rosdistro/master/releases/fuerte.yaml
Query rosdistro index file:///etc/ros/rosdistro/master/index-v4.yaml
Skip end-of-life distro "ardent"
Skip end-of-life distro "bouncy"
Skip end-of-life distro "crystal"
Add distro "dashing"
Add distro "eloquent"
Add distro "foxy"
Skip end-of-life distro "groovy"
Skip end-of-life distro "hydro"
Skip end-of-life distro "indigo"
Skip end-of-life distro "jade"
Add distro "kinetic"
Skip end-of-life distro "lunar"
Add distro "melodic"
Add distro "noetic"
updated cache in /home/xxxx/.ros/rosdep/sources.cache

② ROS環境配置

#For Ubuntu 16.04
$ echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc

注意:ROS的環境配置,使得你每次打開一個新的終端,ROS的環境變量都能夠自動配置好,也就是添加到bash會話中,因為命令source/opt/ros/kinetic/setup.bash 只在當前終端有作用,即具有單一時效性,要想每次新開一個終端都不用重新配置環境,就用echo語句將命令添加到bash會話中。
③ 安裝rosinstall
rosinstall是ROS中一個獨立分開的常用命令行工具,它可以方便讓你通過一條命令就可以給某個ROS軟件包下載很多源碼樹。在ubuntu上安裝這個工具,請運行:

$ sudo apt-get install python-rosinstall

至此,ROS的安裝就結束了,下面測試ROS能否正常運行。

4. 測試ROS

首先啟動ROS,輸入代碼運行roscore:

$ roscore

如果出現下圖所示,那么說明ROS正常啟動了!
roscore界面
接着我們測試ROS的吉祥物--小海龜,來簡單的測試ROS運行是否正常,同時也來體驗一下ROS的神奇與精彩!
啟動roscore后,重新打開一個終端窗口,輸入:

$ rosrun turtlesim turtlesim_node

你還看到一只萌萌的海龜出現在屏幕上,那么該怎么樣來操縱這只小海龜呢?重新打開新的一個終端,輸入:

$ rosrun turtlesim  turtle_teleop_key

將鼠標聚焦在第三個終端窗口上,然后通過鍵盤上的方向鍵,進行操作小海龜,如果小海龜正常移動,並且在屏幕上留下自己的移動軌跡,如下圖。恭喜你,ROS已經成功的安裝、配置並且運行!
ROS吉祥物——小烏龜
至此,ROS的安裝、配置與測試就全部結束了,下面就正式開啟ROS精彩的旅程!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM