機械人學總結(5) ROS

2021-08-15 07:53:14 字數 3477 閱讀 5071

這裡我使用的是虛擬機器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基礎,其他涉及到的程式設計基礎也可能會在紫色內容中補充,以便各位都能深入理解,為之後學習打好基礎。建議多敲 內容 詳讀細閱 瀏覽必看 問題必記 補充字型 黑色...