
# 摘要
預計完成時間:10分鐘
該單元是5天課程中ROS的預覽版。通過對不同部分的介紹,以及每個部分的一些簡單示例,您將可以一瞥在課程中學到的內容。
# 開始學習
所以你希望學習ROS,你想快速做到,對吧?我認為這就是為什么你在這里學習,在5天課程的ROS中。別擔心,我向您保證,在課程結束時,您會覺得自己可以對機器人做任何事情!但是,這并不容易,你必須盡力而為!
在本課程預覽中,您將對課程中將要介紹的不同單元進行簡短介紹。這個單元并不是要在30分鐘內教你ROS。那并沒那么簡單!您將只是概述您將在課程中學到的主要內容。通過完成本課程的不同章節,您將能夠學習如何編程任何機器人。
但是,為了能夠對任何機器人進行編程,您需要學習什么?看看這個章節,你會明白!
*****
# 用ROS編程機器人需要學習什么?
>[danger] ### 首先,您需要學習一些基本概念
在開始學習任何東西之前,總是需要首先介紹一些基本概念。例如,在你知道如何走路之前,你無法學會跑步。在你知道如何說話之前,你不能學會唱歌。對?所以,通過這門課程,你會了解到這些內容。
在本課程的第一部分(基本概念章節)中,您將了解一些在開始處理更復雜的概念之前,所需要學習的ROS基本概念。
>[danger]### 其次,您需要了解主題
為了學習ROS,您需要了解的第一件事是如何使用主題。主題可能是ROS最重要的部分,因此您需要仔細了解它們。
ROS通過主題處理幾乎所有的通信。更復雜的通信系統,例如服務或行動,最終依賴于主題。這就是他們如此重要的原因!例如,通過ROS主題,您將能夠與機器人進行通信以使其移動,讀取機器人的傳感器讀數等。
在屏幕的右上角,您有模擬窗口。在這個窗口中,您將在課程期間遇到不同的機器人(取決于您所在的章節),這將有助于您學習ROS。在第一章(課程預覽)中,您將與可愛的Kobuki合作。我相信你會相處得很好!
所以現在我們已經做了正確的介紹......讓我們從第一個例子開始吧!
*****
# 例1.1
**在WebShell編號#1中執行以下命令**,以便開始移動Kobuki機器人。
WebShells就像Linux shell,但在網絡上。 默認情況下,它們位于屏幕的右下部分。 您可以在那里鍵入Linux命令。
在WebShell#1中執行
```
roslaunch publisher_example move.launch
```
每當您想要停止移動機器人時,為了停止程序,只需在WebShell中按Ctrl + C.
注意:您會注意到,即使在停止程序后,機器人仍將繼續移動。 為了阻止它,你將不得不執行另一個命令。
現在選擇WebShell#2并執行以下命令以停止Kobuki機器人。
在WebShell#2中執行
```
roslaunch publisher_example stop.launch
```
>[danger] 重要提示:在每個示例的最后,您會發現一些有用的注釋。 請看看他們!
例1.1的預期結果

>[warning]實例1.1的數據
檢查以下注釋以完成示例:
注1:即使用Ctrl + C終止命令,機器人仍然會繼續移動。 這是因為機器人將繼續收聽您在該主題上發布的最后一條消息。 你會明白這意味著什么。
>[info]例1.1結束
*****
在整個課程中,您將必須執行ROS程序并在模擬機器人上進行測試。
太棒了吧?你可能會對整個過程如何工作有很多疑問......你真正做的是啟動一個發布者,這是一個將消息寫入主題的ROS程序,在這種情況下寫入/ cmd_vel話題。該主題用于將速度命令發送到機器人的基礎。因此,通過本主題發送消息,您已使機器人開始移動。
但是......即使我停止了程序,機器人為什么還要繼續前進?好吧,那是因為機器人不斷聽到發布到主題中的最后一條消息,告訴它移動機器人。因此,為了阻止它,你剛剛啟動了另一個發布者,在這種情況下,發布了一條消息,告訴機器人停止。
但請稍等,請記住,這只是一個課程預覽。您將能夠在主題單元(第3章和第4章)中了解有關主題的更多信息。耐心一點!
>[danger]### 第三,您需要了解服務
現在,讓我們繼續吧。您已經看到主題是ROS的一個非常重要的部分,它們可以讓您與機器人進行通信。但這是唯一的方法嗎?
你可以想象,答案是否定的。當然! ROS還提供服務。服務允許您為機器人編寫特定功能,然后讓任何人都可以調用它。例如,您可以創建一個服務,讓您的機器人在特定時間段內移動,然后停止。
服務比主題稍微復雜一些,因為它們分為兩部分。一方面,您擁有Service Server,它為任何想要使用它的人提供功能(稱之為)。另一方面,您擁有服務客戶端,即調用/請求服務功能的服務客戶端。
讓我們看一個如何調用先前創建的服務的示例,這使得Kobuki機器人在一個圓圈中移動4秒鐘。
# 例1.2
>[danger] 重要信息:在開始此示例之前,請確保停止在WebShells中運行的所有先前程序(通過按Ctrl + C)。另外,確保Kobuki機器人不動。
在WebShell編號#1中執行以下命令以啟動該服務。
```
roslaunch service_demo service_launch.launch
```
在WebShell編號#2中執行以下命令以調用該服務。
```
rosservice call / service_demo“{}”
```
例1.2的預期結果

>[warning]實施例1.2的數據
請檢查以下注釋以完成示例:
注1:服務必須啟動并運行才能調用它。因此,請確保在調用之前已啟動該服務。
注意2:請記住,您的機器人將從上一個示例中停止的點開始移動。因此,它可能與顯示的gif不一致。
>[info]例1.2結束
*****
我打賭你開始對這件事感到激動,對吧?但我相信你還有更多問題。
在上面的例子中,你做了兩件事。首先,您啟動了該服務,以便為想要呼叫它的任何人提供服務。然后,您執行了一個調用該服務的命令。此服務的目的是將Kobuki機器人移動一圈4秒鐘,然后停止它。因此,當您調用該服務時,機器人開始執行此移動。
但請記住,這只是預覽單元。在服務單元(第5章和第6章)中,您將學到更多有關服務的知識!
>[danger]### 第四,你需要了解行動
以為你做完了?一點也不!你仍然需要一些東西才能使用ROS。目前,您已經對主題和服務進行了一瞥,您已經了解了它們如何允許您與機器人進行通信。
但是,這還不是全部。 ROS還提供行動。操作類似于服務,從某種意義上說,它們還允許您為機器人編寫功能,然后提供它以便任何人都可以調用它。操作和服務之間的主要區別在于,當您調用服務時,機器人必須等到服務結束才能執行其他操作。另一方面,當您調用動作時,您的機器人在執行動作時仍可繼續執行其他操作。
還有其他差異,例如允許您在執行操作時提供反饋的操作。但是你會在課程中看到所有這些。現在,讓我們嘗試一個簡單的例子來處理一個動作。
# 例1.3
>[danger]重要信息:在開始本示例之前,請確保停止在WebShells中運行的所有程序(通過按Ctrl + C)。
在WebShell編號#1中執行以下命令以啟動操作。
```
roslaunch action_demo action_launch.launch
```
在WebShell編號#2中執行以下命令以“調用”操作。
```
roslaunch action_demo_client client_launch.launch
```
例1.3的預期結果

>[warning]實施例1.3的數據
請檢查以下注釋以完成示例:
注意1:確保通過執行第一個命令啟動了Action Server。否則,您將無法撥打電話。
注意2:請記住,您的機器人將從上一個示例中的停止點開始移動。因此,它可能與顯示的gif不一致。
>[info]例1.3結束
*****
我確信,在這一點上,你開始對你正在做的事情感到有些困惑。別擔心,沒關系!
基本上,你在前面的例子中做了兩件事。首先,通過發出第一個命令啟動Action Server。然后,通過發出第二個命令調用該Action。您可能認為這與前面的服務示例相同,但事實并非如此。它們之間存在一些重要的差異,但您可能無法看到它們。
但是,你現在不必擔心。正如我之前告訴過你的那樣,這只是一個課程預覽,所以當你通過動作單元時,你將更好地理解動作(第7章和第8章)。
最后,您需要知道如何使用調試工具
如果你要開始使用機器人,你需要知道這一件事:你將不得不處理錯誤。
幸運的是,ROS提供了許多工具,可以幫助您檢測正在發生的事情。在下面的示例中,您將了解可能是所有這些工具中最重要的工具:RViz。按照下面的例子快速瀏覽一下這個神奇的工具吧!
# 例1.4
>[danger]重要信息:在開始本示例之前,請確保停止在WebShells中運行的所有程序(通過按Ctrl + C)。
在WebShell編號#1中執行以下命令以啟動RViz。
```
rosrun rviz rviz
```
現在,點擊位于IDE窗口右上角的屏幕上的圖標,以打開圖形界面。
這將在新選項卡中打開圖形界面。你應該在這里看到RViz。

現在,請按照以下步驟操作:
#### a)更改base\_link的固定幀。

#### b)單擊“顯示”部分下方的“添加”按鈕。 選擇RobotModel選項。

#### c)現在,重復該過程并選擇LaserScan選項。
#### d)從LaserScan選項中選擇/ kobuki / laser / scan主題。

#### e)如果需要,您也可以使用例1.1中啟動的程序移動機器人
例1.4的預期結果
注意:為了通過激光束可視化墻壁,機器人必須面向墻壁。 否則,顯然,它不會檢測到任何東西。

>[warning]實施例1.4的數據
請檢查以下注釋以完成示例:
注意1:您可以通過雙擊頂部欄來最大化RViz窗口。
>[info]例1.4結束
*****
在這一點上,我相信你有很多疑問和懷疑...但是不要著急!
你現在在RViz看到的是你的Kobuki機器人。 這很明顯,對嗎? 但是在小熊面前出現的紅線是什么? 你知道嗎?
好吧,這就是Kobuki機器人正在獲得的激光讀數。 因此,正如您可能已經猜到的那樣,紅線表示機器人前方的墻壁,激光束正在探測到該墻壁。
太棒了吧? 但這仍然只是您使用RViz可以實現的一小部分。 你必須檢查調試工具單元(第9章)以查看更多的RViz!
你認為呢? 想真正了解所有這些是如何工作的? 想成為機器人大師嗎? 然后讓我們開始吧!