01.初識ROS
標簽: ROS機器人開發實踐
目錄
1.1 ROS是什么
1.1.1 ROS的起源
ROS(Robot Operating System)是一種應用于機器人開發的通用軟件框架。它集成了大量的工具、庫、協議,提供了類似操作系統所提供的功能。
ROS最初應用于斯坦福大學人工智能實驗室與機器人技術公Willow Garage合作的個人機器人項目(Personal Robots Program):
- 2008年后有Willow Garage維護。
- 2010年,Willow Garage 正式以開放源碼的形式發布了ROS框架,并很快在機器人研究領域掀起了ROS開發和應用的熱潮。
在短短幾年間,各大機器人平臺幾乎都支持ROS框架,如Pioneer、Aldebaran Nao、TurtleBot、Lego NXT、AscTec Quadrotor等。
ROS的迅猛發展已經使它成為機器人領域的事實標準。
1.1.2 ROS的設計目標
- 設計目標:提高機器人研發中的軟件復用率。
- 實現方法:被設計成一種分布式結構,使得框架中的每個功能模塊都可以被單獨設計、編譯、并且在運行時以松散耦合的方式結合在一起。
- 為機器人開發提供的功能:硬件抽象、底層驅動、消息傳遞、程序管理、應用原型等功能和機制。同時,整合了許多第三方工具和庫文件,幫助用戶快速完成機器人應用的建立、編寫和多機整合。
- 便于共享和分發的設計:將ROS中的功能模塊都封裝與獨立的功能包(Package)或元功能包(Meta Package)中。
ROS的出現就是為了鼓勵更多的開發者、實驗室或研究機構共同協作來開發機器人軟件。
1.1.3 ROS的特點
核心:分布式網絡。使用了基于TCP/IP的通信方式,實現了模塊間點對點的松耦合連接,可以執行若干種類型的通信,包括基于話題(Topic)的異步數據流通信,基于服務(Service)的同步數據流通信,還有參數服務器上的數據存儲等。
- 點對點的設計:每個進程以一個節點的形式分布于不同主機上;節點通信通過一個帶有發布和訂閱功能的RPC傳輸系統實現;可以分散定位、導航等功能帶來的實時計算壓力,適應多機器人的協同工作。
- 多語言支持:ROS被設計出一種語音弱相關的框架結構,支持更多應用的移植和開發。
- 架構精簡、集成度高:框架模塊化,使得每個功能點可以進行單獨編譯,并且使用統一的消息接口讓模塊的移植、復用更加便捷;ROS開源社區中移植、集成了大量已有開源項目中的代碼,開發者可以使用豐富的資源實現機器人應用的快速開發。
- 組件化工具包豐富:ROS采用組件化的方法,將一些友好的可視化工具和仿真軟件集成到系統中,并可以作為一個組件直接使用。此外,ROS中還有消息查看工具、物理仿真環境等組件,提高了機器人開發的效率。
- 免費并且開源:ROS遵照BSD許可,允許使用者修改和重新發布其中的應用代碼,甚至可以進行商業化的開發和銷售。在ROS開源社區中,開發者可以下載、復用琳瑯滿目的機器人功能模塊,大大加速了機器人的應用開發。
1.2 如何安裝ROS
1.2.1 操作系統和ROS版本選擇
ROS維基社區:http://wiki.ros.org/cn/community
操作系統選擇:Ubuntu 18.04 LTS
ROS版本選擇:ROS針對不同操作系統,發布了相對于的版本。選擇對應于Ubuntu 18.04 LTS的版本,ROS Melodic Morenia版本
安裝方式:
參考:http://wiki.ros.org/cn/melodic/Installation/Ubuntu
- 軟件源安裝:直接安裝編譯好的軟件包比從源碼編譯安裝更加高效,這也是我們在 Ubuntu 上的首選安裝方式。只要通過簡單的命令即可從應用倉庫中找到需要的軟件并完成下載安裝。
- 源碼編譯安裝(不推薦):相對復雜,需要手動解決繁雜的軟件依賴關系,更適合那些對系統比較熟悉而且希望在未支持的平臺上安裝ROS的開發者。
1.2.2 配置系統軟件源(Ubuntu 軟件倉庫)
配置你的 Ubuntu 軟件倉庫(repositories) 以允許 “restricted”、“universe” 和 "multiverse"這三種安裝模式。 你可以按照 Ubuntu 中的配置指南來完成配置。
如下圖所示:
圖1-1 Ubuntu 系統軟件源的設置
1.2.3 添加ROS軟件源(修改sources.list)
sources.list是Ubuntu系統保存軟件源地址的文件,位于/etc/apt
目錄下,在這一步中,我們需要將ROS的軟件源地址添加到該文件中,確保后續安裝可以正確找到ROS相關軟件的下載地址:
-
添加ROS官方的軟件源鏡像:
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
-
為提高軟件的下載、安裝速度,也可以使用任意一種國內的鏡像源:
中國科學技術大學(USTC)鏡像源:
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 '
1.2.4 添加公鑰
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
如果你無法連接到公鑰服務器,嘗試用 hkp://pgp.mit.edu:80
替換上述命令中的服務器地址。
你也可以使用 curl
替代 apt-key
命令,如果你在使用一個代理服務器的話這可能會有幫助:
curl -SSL 'http://keyserver.ubuntu.com/pks/lookup?op=get&search=0xC1CF6E31E6BADE8868B172B4F42ED6FBAB17C654' | sudo apt-key add -
1.2.5 安裝ROS
首先,確保之前的軟件源得以更新:sudo apt update
報錯:The repository 'http://ppa.launchpad.net/v-launchpad-jochen-sprickerhof-de/pcl/ubuntu xenial Release
解決:
- 在/etc/apt/sources.list.d中將關于/v-launchpad-jochen-sprickerhof-de/pcl的文件刪掉
在 ROS 中有很多不同的庫和工具。我們提供了四種默認選項供你開始。你也可以單獨安裝 ROS 的軟件包。
- 桌面完整版Desktop-Full(推薦):最為推薦的一種安裝版本,除了包含ROS的基礎功能(核心功能包、構建工具和通信機制)外、還包含豐富的機器人通用函數庫、功能包(2D/3D感知功能、機器人地圖建模、自主導航等)以及工具(rviz可視化工具、gazebo仿真環境、rqt工具箱等)。
sudo apt-get install ros-melodic-desktop-full
- 桌面版 DeskTop:完整版的精簡,去掉了機器人功能包和部分工具,僅包含ROS基礎功能、機器人通用函數庫、rqt工具箱和rviz可視化工具。
sudo apt-get install ros-melodic-desktop
- ROS-基礎包 ROS-Base:基礎版精簡了機器人通用函數庫、功能包和工具,僅保留了沒有任何GUI的基礎功能(核心功能包、構建工具和通信機制)。該版本的軟件規模最小,也是ROS需求的“自小系統”,非常適合直接安裝在對性能和空間要求較高的控制器之上,為嵌入式系統使用ROS提供了可能。
sudo apt-get install ros-melodic-ros-base
- 獨立功能包安裝(Individual Package):在后期的使用中,根據需要使用如下命令安裝獨立的功能包:
(使用軟件包名稱替換掉下面的PACKAGE):
sudo apt-get install ros-melodic-PACKAGE
如:sudo apt-get install ros-melodic-slam-gmapping
- 查找可用軟件包:
apt search ros-melodic
1.2.6 初始化 rosdep
rosdep是ROS中自帶的工具,主要功能是為某些功能包安裝系統依賴,同時也是某些ROS核心功能包必須用到的工具。
初始化rosdep并更新:
sudo rosdep init
rosdep update
報錯1:sudo: rosdep:找不到命令提示
解決:
sudo apt-get install python-rosdep2
sudo apt-get install python-rosdep python-wstool ros-melodic-ros
報錯2:sudo rosdep init ERROR: cannot download default sources list from
解決:
#打開hosts文件
sudo gedit /etc/hosts
#在文件末尾添加
151.101.84.133 raw.githubusercontent.com
#保存后退出再嘗試
1.2.7 設置環境變量
目前ROS已經成功安裝的計算機中,默認在/opt
路徑下。
- 將 ROS 環境變量自動添加到新 bash 會話會很方便:
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source ~/.bashrc
- 如果你只想設置當前 bash 會話的 ROS 環境變量,只需要輸入:
source /opt/ros/melodic/setup.bash
- 如果想在當前終端使用不同版本的ROS,只需要輸入:
source /opt/ros/ROS-RELEASE/setup.bash
其中ROS-RELEASE代表希望使用的ROS版本。
- 如果使用的終端是zsh,則需要將以上命令中的bash都修改為zsh:
echo "source /opt/ros/melodic/setup.bash" >> ~/.zshrc
source ~/.zshrc
- 終極方法:使得重新打開的所有終端都符合修改版本
打開 ~/.bashrc或者 ~/.zshrc文件,找到設置環境變量的命令,然后修改對應的ROS版本,保存退出。
查看ROS環境參數:
printenv | grep ROS
1.2.8 安裝依賴
sudo apt-get install python-rosinstall python-rosinstall-generator python-wstool build-essential
運行:roscore
顯示如下,安裝成功:
lxr@lxr-HP-ZBook-15-G3:~$ roscore
... logging to /home/lxr/.ros/log/fc0c69b0-edb2-11ea-b8d1-34f39ad897df/roslaunch-lxr-HP-ZBook-15-G3-18445.log
Checking log directory for disk usage. This may take a while.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.
started roslaunch server http://lxr-HP-ZBook-15-G3:36269/
ros_comm version 1.14.9
SUMMARY
========
PARAMETERS
* /rosdistro: melodic
* /rosversion: 1.14.9
NODES
auto-starting new master
process[master]: started with pid [18455]
ROS_MASTER_URI=http://lxr-HP-ZBook-15-G3:11311/
setting /run_id to fc0c69b0-edb2-11ea-b8d1-34f39ad897df
process[rosout-1]: started with pid [18466]
started core service [/rosout]
報錯:roscore command not found
解決:檢查 /opt/ros/melodic/bin/
檢查一下這個目錄里有沒有roscore
顯示沒有,重新安裝ROS,輸入:sudo apt-get install ros-melodic-desktop-full
直到完全安裝。
參考文獻
[1] 胡春旭編著.ROS機器人開發實現[M].機械工業出版社.2018:1-10
[2] 在 Ubuntu 中安裝 ROS Melodic
[3] Ubuntu 中的配置指南
[4] 安裝ROS時執行到sudo rosdep init時出現sudo: rosdep:找不到命令提示
[5] sudo rosdep init ERROR: cannot download default sources list from:【closed】
[6] 基于Ubuntu18.04的ROS Melodic環境詳細配置(含各種大坑及填坑)
[7] 如何解決ROS “roscore command not found”
智能推薦
01.常量、變量
第一章 開發前言 1.1 Java 語言概述 什么是Java語言 Java語言是美國Sun公司(Stanford University Network),在1995年推出的高級的編程語言。所謂編程語言,是 計算機的語言,人們可以使用編程語言對計算機下達命令,讓計算機完成人們需要的功能。 Java語言發展歷史 1995 年Sun公司發布Java1.0版本 1997 年發布Java 1.1版本 199...
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...
猜你喜歡
Linux C系統編程-線程互斥鎖(四)
互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...
統計學習方法 - 樸素貝葉斯
引入問題:一機器在良好狀態生產合格產品幾率是 90%,在故障狀態生產合格產品幾率是 30%,機器良好的概率是 75%。若一日第一件產品是合格品,那么此日機器良好的概率是多少。 貝葉斯模型 生成模型與判別模型 判別模型,即要判斷這個東西到底是哪一類,也就是要求y,那就用給定的x去預測。 生成模型,是要生成一個模型,那就是誰根據什么生成了模型,誰就是類別y,根據的內容就是x 以上述例子,判斷一個生產出...
styled-components —— React 中的 CSS 最佳實踐
https://zhuanlan.zhihu.com/p/29344146 Styled-components 是目前 React 樣式方案中最受關注的一種,它既具備了 css-in-js 的模塊化與參數化優點,又完全使用CSS的書寫習慣,不會引起額外的學習成本。本文是 styled-components 作者之一 Max Stoiber 所寫,首先總結了前端組件化樣式中的最佳實踐原則,然后在此基...