TurtleBot配置

0、什麼是TurtleBot?

我自己的理解就是:TurtleBot是一款移動機器人,就是主要研究讓機器人自主決定應該想那個方向走,怎麼繞過障礙物,最終到達目的地。與之對應還有很多機器人,比如google的機器人(主要是仿生,且不容易摔倒,摔倒了也能自己爬起來)。我喜歡的方向是機器視覺,主要目標是讓TurtleBot去感知環境,不會撞到障礙物,而且可以辨識目標。所以在TurtleBot上採用vSLAM技術,後面主要講的也是主要與之相關的。
1、本篇目標

TurtleBot實現簡單的目標跟蹤
1.1、概述

TurtleBot主要由3部分組成(從上到下):Kinect2,筆記本,移動底座,最後加支架。

硬件不多說,這邊博客主要是講解中間重點部分軟件的安裝和測試。圖中標記的1,2,3,是後面講解的大致順序。
2、硬件,軟件環境

硬件:

TurtleBot2(其實主要指的是kobuki移動底座和其支架)
Microsoft Kinect2(注意我這使用的是Kinect2)
筆記本(根據需求自己選購)

軟件:

操作系統:Ubuntu
機器人操作系統:ROS
軟件庫:libfreenect2,iai_kinect2

3、系統、ROS安裝

在說安裝軟件之前簡單的說說TurtleBot機器人,這是TurtleBot的官網http://www.turtlebot.com/,裏面有代理商,你可以去找。
下來當然是要安裝操作系統和ROS(機器人操作系統)。在這裏需要注意的是:

建議安裝Ubuntu,因爲ROS對它支持的比較好
要注意ROS的版本和Ubuntu的版本是有對應的,不是隨意的組合(我剛開始就在這吃虧了)

這兩東東的安裝,有兩種方式:

先安裝Ubuntu,在安裝ROS。至於怎麼安裝Ubuntu,網上的資料很多(建議直接裝到真機上,不要用虛擬機,不是很好用)。
ROS安裝,ROS有很多版本供您選擇。但是要注意,只有ROS Indigo之後的才支持Kinect2。這是ROS的官網http://wiki.ros.org/。在這裏有詳細的安裝教程。
簡單方式,直接使用別人封裝好的Ubuntu鏡像,因爲這樣在Ubuntu上已經安裝好了ROS。(我採用的就是這種方式,Ubuntu14.04,ROS_Indigo)。鏡像的地址:http://wiki.ros.org/turtlebot/Tutorials/indigo/Turtlebot%20Installation

好了,經過這個步奏你應該已經裝好了這兩個軟件。你可以在終端中運行下面命令試試,看有沒有報錯:

roscore

如果沒有表示,你已經安裝好了。在這個基礎之上,你應該按照ROS官網教程配置自己的工作空間http://wiki.ros.org/ROS/Tutorials/InstallingandConfiguringROSEnvironment,我建議使用catkin方式。
4、Kinect2驅動安裝

需要做的事情有兩件:編譯安裝libfreenect2和iai_kinect2。幸運的是這兩個作者都在的github中寫了詳細的安裝過程。

libfreenect2 https://github.com/OpenKinect/libfreenect2
iai_kinect2 https://github.com/code-iai/iai_kinect2

其實上面說的不是非常的準確,libfreenect2是驅動Kinect2讓他工作的,我們只要編譯安裝好之後就不用管了。iai_kinect2其實是一個工具集,主要包括:1、相機標定工具;2、深度數據配準工具;3、libfreenect2和ROS之間的轉換工具,確切的說就是將Kinect2的數據流轉換給ROS,這樣我們就可以藉助ROS上的工具對數據流進行處理了;4、查看數據流的工具

因爲Kinect是RGBD相機,我們需要知道怎麼將深度信息和彩色信息對應,知道這個對應的過程就叫做相機標定。在

https://github.com/code-iai/iai_kinect2/tree/master/kinect2_calibration

中有詳細的標定過程。下面簡單說說剛纔說的那個“對應”的形式化表示:
[ \left[

uv1
\right] = kR \left[
xyz
\right] +T ]
其中(u,v)表示對應的RGB圖像中的點,(x,y,z)表示與之對應的空間中的點,這個座標原點在相機的鏡頭處。(R)是旋轉矩陣,(3*3),(T)是平移向量,(3*1)。(R,T)就是我們求的對應關係。

在這一步你應該可以通過測試程序看到Kinect前的圖像,表示你已經安裝好Kinect2的驅動了,並且可以通過iai_kinect2將Kinect2的數據轉給ROS了。

若果有錯誤,請重新按照步奏再做一遍

5、測試ROS和TurtleBot底座通信是否正常

這裏主要是硬件連接和終端命令執行。保證硬件連接正確後就以在在終端中執行命令了:

roscore

然後打開底座的電源。
ctrl+alt+t新打開一個終端,執行下面命令:

roslaunch turtlebot_bringup minimal.launch

再打開一個終端,執行下面命令:

roslaunch turtlebot_teleop keyboard_teleop.launch

下來你就可以按照提示信息按相應的鍵遙控溜達你的機器人了(i:前進;,:後退;j:左轉;l:右轉;k:剎車)

注意:確保你機器人的電池有足夠的電量。
參考:http://learn.turtlebot.com/2015/02/01/6/

5.1、roslaunch turtlebot_bringup minimal.launch 異常處理

解決辦法如下:

如果出現異常情況,首先確認TurtleBot的移動底座的開關是否打開,筆記本和底座的連線是否連接完好
如果確認上面的沒有問題,還時出現下面的問題:

提示找不到設備,分析原因就可能是驅動不對。修改的beg的辦法就是查看源碼修改相應的參數:
我們執行的命令是:“roslaunch turtlebot_bringup minimal.launch”,那麼我們就

roscd turtlebot_bringup

進入“turtlebot_bringup”,然後

cd launch

找到minimal.launch文件複製一份,並將其命名爲“my_minimal.launch”。使用編輯將其打開

gedit my_minimal.launch

可以看到代碼的第二行就是設置TurtleBot移動底座的類型,在代碼中提供了“create,roomba”兩種類型。但是我的是“kobuki”,我只在這裏修改運行後報錯(改爲)。然後我就找這個參數最後傳給了誰,發現只有兩個文件用到這個參數:robot.launch.xml和mobile_base.launch.xml。直接將包含有mobile_base.launch.xml的代碼修改爲:

具體怎麼改,繼續往下看:
關閉當前文件,執行命令:

cd includes

你就會發現mobile_base.launch.xml就在這裏,打開mobile_base.launch.xml:

cat mobile_base.launch.xml

查看源碼,發現在第四行,我們傳進來的base參數原來別加入到了路徑當中。路徑指的就是當前的路徑,你執行“ls”命令後就會發現有create和roomba文件夾,同時你也會看見有kobuki文件夾,進入kobuki文件夾,你會發現有“mobile_base.launch.xml”文件,將這個文件複製一份,並命名爲“my_mobile_base.launch.xml”,然後將

的註釋去掉。要不然你用他的驅動底座後收不到“cmd_vel”話題下的消息。然後回退到上層目錄,將mobile_base.launch.xml複製一份,並且命名爲:“my_mobile_base.launch.xml”。然後打開它,直接將

修改爲:

然後打開底座電源,鏈接好線,執行(注意使用的是my_minimal.launch):

roscore
roslaunch turtlebot_bringup my_minimal.launch
roslaunch turtlebot_teleop keyboard_teleop.launch

現在你就可以溜達你的機器人了~~~
++++++++++++++++++++++++++++基本的環境已經配置好了++++++++++++++++++++++++++++
6、主程序

在基本的環境配置好了基礎之上,我們將處理從kinec2拿到的數據,然後向底座發命令,讓其執行響應的移動操作。
剛開始,我們當然不是從頭寫程序,而是先看別人的代碼然後進行響應的修改。首先推薦一本書(ros_by_example http://download.csdn.net/detail/a_cainiao_a/9477742),我們這裏用的代碼都是這本書上的。先安裝必要的工具:

sudo apt-get install ros-indigo-turtlebot-bringup \
ros-indigo-turtlebot-create-desktop ros-indigo-openni-* \
ros-indigo-openni2-* ros-indigo-freenect-* ros-indigo-usb-cam \
ros-indigo-laser-* ros-indigo-hokuyo-node \
ros-indigo-audio-common gstreamer0.10-pocketsphinx \
ros-indigo-pocketsphinx ros-indigo-slam-gmapping \
ros-indigo-joystick-drivers python-rosinstall \
ros-indigo-orocos-kdl ros-indigo-python-orocos-kdl \
python-setuptools ros-indigo-dynamixel-motor-* \
libopencv-dev python-opencv ros-indigo-vision-opencv \
ros-indigo-depthimage-to-laserscan ros-indigo-arbotix-* \
ros-indigo-turtlebot-teleop ros-indigo-move-base \
ros-indigo-map-server ros-indigo-fake-localization \
ros-indigo-amcl git subversion mercurial

然後克隆代碼:

cd ~/catkin_ws/src
git clone https://github.com/pirobot/rbx1.git
cd rbx1
git checkout indigo-devel
cd ~/catkin_ws
catkin_make
source ~/catkin_ws/devel/setup.bash
rospack profile

下面我們就是將一些launch文件進行修改,我們修改的時候並不是在原文件上修改而是同名複製一份前面加“my_”的,例如原文件叫:“minimal.launch”,我們複製的就叫:“my_minimal.launch”。修改的主要內容是:修改數據流輸入的話題;下面我們只是說在複製後的文件中怎麼改,去掉“my_”就是原文件名了。

roscd rbx1_vision
cd launch
gedit my_face_tracker2.launch

將這兩句


改爲


roscd rbx1_apps
cd launch
gedit my_object_tracker.launch

將這句

改爲

7、啓動主程序

啓動的時候每一句話一個終端,我在這就一塊給出了:

roscore
roslaunch turtlebot_bringup minimal.launch 或者 roslaunch turtlebot_bringup my_minimal.launch
roslaunch kinect2_bridge kinect2_bridge.launch
roslaunch rbx1_vision my_face_tracker2.launch
roslaunch rbx1_apps my_object_tracker.launch

儘可能讓你的臉出現在視頻監視窗口中,並且讓程序找到你的臉,然後你左右移動,就會看到TurtleBot發生響應的轉動,因爲這個程序儘可能的將你的臉放在畫面的中間。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章