這裡我使用的是虛擬機器wmware,當然也可以直接安裝到硬碟中。我是用的是ubuntu 16.04,也可以使用別的版本,注意不同版本的作業系統對應不同的ros版本,這裡我安裝的是kinetic。
新增軟體庫
sudo sh -c 'echo "deb $(lsb_release -sc)
main" > /etc/apt/sources.list.d/ros-latest.list'
設定秘鑰,為了確認源**是正確的,並且沒有人在未經所有者授權的情況下修改**。
sudo apt-key adv --keyserver hkp: --recv-key 421c365bd9ff1f717815a3895523baeeb01fa116
首先公升級軟體,避免版本問題。
sudo
apt-get update
安裝ros,這裡我安裝了完整版(應該不缺這點空間吧(⊙o⊙)…)
sudo
apt-get
install ros-kinetic-desktop-full
初始化rosdep,為了輕鬆地安裝庫和編譯編譯源**時的系統依賴。
sudo rosdep init
rosdep update
臨時環境變數配置(每次在新的terminal中要重新輸入)
source /opt/ros/kinetic/setup.bash
永久環境變數配置(如果有多個版本的ros,只會配置當前使用的)
echo
"source /opt/ros/kinetic/setup.bash"
>> ~/.bashrc
source ~/.bashrc
安裝一些工具
sudo
apt-get
install python-rosinstall python-rosinstall-generator python-wstool build-essential
建立工作空間(這裡使用catkin工具)
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
編譯工作空間
cd ~/catkin_ws
catkin_make
配置
source devel/setup.bash
啟動ros:
roscore
執行測試(會出現乙個視窗,裡面有乙隻烏龜)
rosrun turtlesim turtlesim_node
如果需要其他的詳細資訊或遇到什麼問題,直接檢視官方文件:
關於架構,在編寫過一些應用之後再回來看,就會覺得清晰很多了。ros的架構分成三個部分:
層次名稱
功能檔案系統級
檔案的儲存結構
計算圖級
節點間的通訊方式(執行的程式看做是節點)
社群級知識和**的共享
ros執行時的程式可以看成是乙個個的節點,對應的檔案儲存單位為包(package),一般的包中會包含如下檔案或資料夾:
檔案或資料夾
功能package.xml
提供關於包、許可證、依賴關係、編譯標誌等資訊。如果想增加依賴集,可以修改這個檔案。
cmakelists.txt
儲存編譯資訊。原始檔、自定義訊息和服務的編譯相關資訊。
include/
存放標頭檔案的資料夾,可以在cmakerlists.txt設定
src/
存放源**的資料夾
msg/
存放自定義message的資料夾
srv/
存放自定義service的資料夾
在工作空間(catkin_ws)中包含三個資料夾:
資料夾功能
src/
存放功能包
build/
存放編譯過程生成的檔案
devel/
存放編譯後的資料夾
通訊主要有兩種方式 訊息 和 服務。
訊息有對應的發布者(publisher)和訂閱者(subscriber)。publisher把訊息廣播出去,subscriber接收,即使一方不存在也不會出錯。不過如果沒有publisher則subscriber可能會接收到錯誤資料。
服務需要有對應的伺服器(server)和客戶端(client)。他們需要同時存在才能進行互動。
建立功能包
cd ~/dev/catkin_ws/src
catkin_create_pkg package_name std_msgs roscpp
包名後面跟著的是依賴包,這裡是標準的資訊定義和c++,如果在程式寫到一半的時候發現需要別的依賴包,可以再package.xmk中新增。可以通過下面命令編譯所有在src資料夾中的包:
catkin_make
也可以編譯制定的包
catkin_make --pkg package_name
加入新的檔案後需要在cmakelist.txt中做相應的修改。
訊息的例子:
服務的例子:
自定義型別:
使用topics 可以顯示對應的訊息資訊和影象化物件。
rqt可以用圖形化顯示資料和通訊。
rosbag 可以將某個時間段的資訊儲存起來,然後可以通過回放來分析,還可以通過rqt_bag利用ui進行操作。
_bag
利用urdf檔案對機械人進行建模,link定義關節模組,joint定義鏈結,可以載入模型檔案。
利用rviz進行**,對模型的控制需要是用對應的**實現(publish對應的message)。
使用巨集優化urdf的定義,可以簡化檔案。
使用launcn檔案可以同時載入多個程式啟動,並且設定對應的引數。
對於很多成熟的產品,可以在git-hub上找到以上對應的所有檔案。
可以使用官方的ur_driver和git-hub上的ur_modern_driver驅動機械人:
硬體的30002和30003,通過tcp協議通訊,通過read和write函式進行資料交換。
通過速度介面腿機械人進行操作,只有在速度和加速度(正負符號沒有作用,是個上界)都不為0時才能執行。
通過點集規劃路徑,起始點需要時當前機械人的位置,初始和結束點的速度為0,加速度沒有起作用,通過插值三次曲線執行,底層通過位置命令運動。
通過std_msgs::string型別的資料直接傳送個機械人。資料格式:「movej([q0, …, qn], a=1.4, v=1.05, t=0, r=0)」。
#5 常見問題及解決
機械人學習 ROS學習入門
目前機械人的研發,小打小鬧弄個玩具可以用stm32等嵌入式微處理器 電機驅動器 電機驅動小車玩一下。但是上公升到移動機械人自主定位導航和感知環境等高階需求層面,普通嵌入式微處理器處理不了那麼多資料,且硬體搭建裸機較難。有類似於偽作業系統一樣管理計算機主機各種硬體 cpu 記憶體 驅動 磁碟以及各種硬...
ROS機械人學習搖桿篇 1
ros機械人作業系統學習總結 搖桿篇 本人是個ros學習新手,對ros作業系統學習也就幾個月,當時在網上看了幾個大神的學習的部落格分享,感覺很不錯,受益無窮,所以我也想把自己學習過程中的一些理解和用途分享出來,裡面可能有一些我理解的不對的,希望大家看後能夠指出來,一起學習。這篇文章主要講的是我們用搖...
ROS機械人學習歷程二(ROS基礎一)
2.建立工作空間和功能包 不懂我這教程風格的檢視我的博文 ros機械人學習歷程一 了解和安裝 如不想理,可忽視此內容。接下來分三章來學習ros基礎,其他涉及到的程式設計基礎也可能會在紫色內容中補充,以便各位都能深入理解,為之後學習打好基礎。建議多敲 內容 詳讀細閱 瀏覽必看 問題必記 補充字型 黑色...