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的版本是有對應的,不是隨意的組合(我剛開始就在這吃虧了)

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

  1. 先安裝Ubuntu,在安裝ROS。至於怎么安裝Ubuntu,網上的資料很多(建議直接裝到真機上,不要用虛擬機,不是很好用)。
    ROS安裝,ROS有很多版本供您選擇。但是要注意,只有ROS Indigo之后的才支持Kinect2。這是ROS的官網http://wiki.ros.org/。在這里有詳細的安裝教程。
  2. 簡單方式,直接使用別人封裝好的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是驅動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[
\begin{matrix}
u\
v\
1
\end{matrix}
\right]
= kR
\left[
\begin{matrix}
x\
y\
z
\end{matrix}
\right]
+T
$$
其中$u,v$表示對應的RGB圖像中的點,$x,y,z$表示與之對應的空間中的點,這個坐標原點在相機的鏡頭處。$R$是旋轉矩陣,$33$,$T$是平移向量,$31$。$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 異常處理

解決辦法如下:

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

提示找不到設備,分析原因就可能是驅動不對。修改的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的代碼修改為:

<include file="$(find turtlebot_bringup)/launch/includes/my_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”,然后將

<remap from="mobile_base/commands/velocity" to="cmd_vel"/>

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

<include file="$(find turtlebot_bringup)/launch/includes/$(arg base)/mobile_base.launch.xml">

修改為:

<include file="$(find turtlebot_bringup)/launch/includes/kobuki/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

將這兩句

<remap from="input_rgb_image" to="/camera/rgb/image_raw"/>
<remap from="input_depth_image" to="/camera/depth_registered/image_raw"/>

改為

<remap from="input_rgb_image" to="/kinect2/qhd/image_color"/>
<remap from="input_depth_image" to="/kinect2/sd/image_depth"/>

> roscd rbx1_apps
> cd launch
> gedit my_object_tracker.launch

將這句

<remap from="camera_info" to="/camera/rgb/camera_info"/>

改為

<remap from="camera_info" to="/kinect2/qhd/camera_info"/>

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發生響應的轉動,因為這個程序盡可能的將你的臉放在畫面的中間。



免責聲明!

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



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