Webots和ROS的使用說明(譯)

zhangrelay發表於2018-12-25

Webots和ROS的使用說明(譯)




Webots和ROS SLAM聯調效果


官方文件:


官方文件和教程

  • 要了解如何使用ROS連線Webots,請閱讀此處的說明。

  • 這裡連結提供了一步步配置Webots ROS教程。

  • 這裡連結一個視訊教程。

  • 完整的Webots ROS API記錄在這裡

  • 有關Webots的更多資訊,請訪問Cyber​​botics的網站

 

第三方貢獻

所述kaist_webots功能集包含用於直接從ROS啟動檔案,對於搖桿遠端操作的控制器和關節位置控制器和接合狀態釋出器啟動Webots節點。

 

報告錯誤

在這裡開啟一個錯誤報告。


Webots使用者指南 

R2019a

使用ROS

目錄

什麼是ROS?

ROS(機器人作業系統)是用於機器人軟體開發的框架,在異構計算機叢集之上提供類似作業系統的功能。ROS最初由史丹佛人工智慧實驗室於2007年開發。截至2019年,Willow Garage的發展仍在繼續。

ROS提供標準作業系統服務,例如硬體抽象,低階裝置控制,常用功能的實現,程式之間的訊息傳遞以及包管理。它基於圖形架構,其中處理髮生在可以接收,釋出和多路感測器,控制,狀態,計劃,執行器和其他訊息的節點中。該庫面向類Unix系統,在Linux下支援,在macOS上實驗版,在Windows下具有部分功能。

ROS有兩個基本的“方面”:作業系統方面,ros如上所述和ROS包,一套使用者貢獻的包(組織成稱為堆疊),實現功能,如同步定位和地圖構建,規劃,感知,模擬等。

ROS是根據BSD許可條款釋出的,是一個開源軟體。它可以免費用於商業和研究用途。使用者貢獻的軟體包根據各種開源許可證進行許可。

Web的ROS

有兩種方法可以在Web上使用ROS。第一個解決方案和最簡單的解決方案是使用標準ROS控制器。它是Webots預設控制器的一部分,可在任何專案中使用。該控制器可用於Webots中的任何機器人,並充當ROS節點,將所有Webots功能作為服務或主題提供給其他ROS節點。第二個定製和更復雜的解決方案是構建您自己的Webots控制器,它也將是使用Webots和ROS庫的ROS節點。此解決方案僅應用於標準控制器無法完成的特定應用程式。

標準控制器

該控制器使用“libCppController”庫,並根據機器人的配置在ROS網路上提供可用的Webots功能。使用“roscpp”庫,它主要將這些Webots功能作為ROS服務提供,並使用標準訊息型別來避免對第三方軟體包的依賴。

在模擬模擬期間,可以有多個機器人或裝置例項以及連線到ROS網路的其他Webot應用程式。因此,控制器使用特定語法在網路上宣告其服務或主題:[robot_unique_name]/[device_name]/[service/topic_name]

[robot_unique_name]:為了避免同一機器人的不同例項之間存在任何誤解,機器人的名稱後面跟著程式的ID和計算機的IP地址。

[device_name]:由於相同的功能可以引用不同的裝置,因此該欄位顯示它所引用的裝置。

[service/topic_name]:此欄位與其對應的Webots函式相同或非常接近。對於主題,接下來是取樣週期。對於服務,它也是相應srv檔案的名稱。

使用標準控制器

名為ros的控制器已預編譯,您不需要編輯它。您所要做的就是將它裝入controller機器人的領域; 你會在預設的控制器列表中找到它。為了使用它,您必須構建一個ROS節點,該節點將使用可用的不同服務與機器人通訊。在Webots中可以找到這種ROS節點的好例子WEBOTS_HOME/projects/languages/ros/webots_ros

教程7章節中,您將找到設定工作區並使用ROS執行示例模擬模擬的說明。

在下表中,您可以找到ros控制器引數列表。

爭論 描述
--ROS_MASTER_URI=<address> 指定roscore正在執行的計算機的URI地址。
--name=<robot_unique_name> 指定要用於服務和主題的預定義[robot_unique_name]。請注意,您負責避免不同機器人控制器之間的任何名稱衝突。
--synchronize 預設情況下,ros即使沒有連線ROS節點,控制器也不會阻止模擬。為了使模擬與ROS節點同步,--synchronize可以指定引數,以便只要time_step未呼叫機器人服務,模擬就不會執行。
--clock 使用clock主題釋出Webots時間。
--use-sim-time 指定Webots時間應該用作ROS時間。要正常工作,還應定義--clock引數並將ROS引數設定use_sim_time為true。

ros控制器引數

如果要從另一臺計算機訪問控制器並且roscore未在與Webot相同的計算機上執行,​​則需要編輯ROS_MASTER_URI變數。這可以通過編輯環境變數,--ROS_MASTER_URI=<address>在控制器引數(參見表)中設定或使用runtime.ini控制器目錄中的檔案來完成。您還必須能夠以ssh兩種方式連線到每臺計算機 。由於ROS使用主機名查詢網路上的其他計算機,因此必須將其他計算機的主機名和關聯的IP地址新增到每臺計算機的已知主機。您可以在名為hosts的檔案中找到此列表。在Linux發行版上,你可以直接找到它/etc/hosts; 在macOS上,它位於/private/etc/hosts; 在Windows上,它位於C:\Windows\System32\drivers\etc\hosts。在Windows和macOS上,這是一個隱藏路徑,您需要直接搜尋此路徑。hosts檔案通常受到保護,您需要管理員或root許可權才能對其進行編輯。

自定義控制器

標準控制器的開發是為了適用於每個機器人和一般用途。有時,您可能無法使用此控制器執行您想要的操作,或者它太複雜了。在這種情況下,您可以構建自己的自定義控制器和ROS節點。

可以使用“roscpp”庫在C ++中實現這樣的ROS節點。但是,在這種情況下,您需要設定一個構建配置來處理來自ROS的“catkin_make”和來自Webots的“Makefile”,以便將結果二進位制檔案連結到Webots“libController”和“roscpp”庫。

通過在Webots機器人或監督控制器中匯入ROS庫(roslib,rospy)和Webots庫(控制器),也可以在Python中實現該控制器。


教程7:使用ROS

本教程介紹如何使用webots_rosWebots提供的軟體包中的節點。

這些示例使用ROS melodickineticLinux 進行了測試。如果您使用不同的平臺或古老的ROS發行版,它們將無法保證。

目錄

安裝ROS

要使用這些節點,首先需要安裝ROS框架。要在Ubuntu上安裝最新版本的ROS,請使用以下命令:

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365BD9FF1F717815A3895523BAEEB01FA116
sudo apt-get update
sudo apt-get install ros-melodic-desktop-full
sudo apt-get install ros-melodic-sensor-msgs
sudo rosdep init
rosdep update

有關更多資訊或將其安裝在其他平臺上,請閱讀http://wiki.ros.org/ROS/Installation。除非您需要舊版本用於其他應用程式,否則您應該選擇最新版本(Melodic Morenia或Kinetic Kame)。

注意:如果您以前從未使用過ROS框架,強烈建議您遵循以下教程:http//wiki.ros.org/ROS/Tutorials。這些教程還將幫助您設定ROS環境並初始化catkin工作區。

“webots_ros”包安裝

如果尚未建立任何catkin工作區,可以使用以下命令建立一個:

source /opt/ros/<distro>/setup.bash
mkdir -p catkin_ws/src
cd catkin_ws/src
catkin_init_workspace

設定工作區後,必須將webots_ros位於“projects/languages/ros”中的src資料夾複製到catkin工作區的資料夾中。您還需要複製webots_ros包的服務列表和訊息定義。簡單地複製srvmsg位於資料夾“projects/default/controllers/ros/include”到src/webots_ros你的工作空間catkin的資料夾中。要複製Webots資料夾,catkin_ws/src可以使用以下說明:

cp -r <webots>/projects/languages/ros/webots_ros .
cp -r <webots>/projects/default/controllers/ros/include/srv webots_ros/
cp -r <webots>/projects/default/controllers/ros/include/msg webots_ros/

webots_ros軟體包已經包含一個“CmakeList.txt”,其中包含該軟體包的構建說明。為了構建軟體包,您所要做的就是執行:

cd catkin_ws
catkin_make

執行節點

現在您已經構建了包,您可以執行所需的示例。首先必須使用catkin工作區中的以下命令啟動主節點:

source devel/setup.bash
roscore

然後,您可以啟動Webots並開啟要執行的示例的世界(示例世界位於“projects/languages/ros/worlds”中)。當您開始模擬時,控制器應連線到主站並開始模擬,等待指令。

如果控制器無法連線到主節點,則可能意味著主節點不使用該標準ROS_MASTER_URI。您可以檢查啟動主節點的終端,ROS_MASTER_URI然後在控制器引數,環境變數或控制器目錄的runtime.ini檔案中新增正確的地址。

然後,您可以使用catkin工作區中的以下命令在新終端中啟動與此示例對應的ROS節點:

source devel/setup.bash
rosrun webots_ros [node_name]

例如,如果您開啟世界“projects/languages/ros/worlds/panoramic_view_recorder.wbt”,則必須panoramic_view_recorder使用以下命令啟動節點:

rosrun webots_ros panoramic_view_recorder

注意:Webots的隨機數生成器的種子在模擬開始時初始化,而不是在ROS節點連線時初始化。必須執行Webots才能連線ROS節點。但是,我們無法保證在ROS節點連線之前執行多長時間。因此,由於在連線ROS節點時噪聲略有不同,感測器測量和電機命令在一次執行中會略有不同。這可能對機器人的行為產生影響,從而使得這種模擬不能完全再現。您可以使用'--synchronize'引數,以確保在ROS節點連線之前不會執行Webots。這對於使基於ROS的模擬可重現是有用的。

注意:如果要為ROS主伺服器,Webots模擬和/或節點使用不同的計算機,則必須能夠以兩種方式使用SSH連線到每個計算機。這些計算機的主機名和IP地址應列在每臺計算機的已知主機列表中,並ROS_MASTER_URI應相應地調整該變數。

建立新節點

這些示例僅顯示了連線ROS和Webots的一些可能性,但您可以構建自己的節點以連線Webot。

robot_information_parser節點是最基本的節點,是開始構建自己的節點的良好基礎。該complete_test節點不顯示任何特定應用程式,但包含幾乎詳盡的Webots API函式列表。

Webots API中的所有功能都有相應的服務或主題。您可以在“ 參考手冊 ”中找到與每個裝置關聯的所有服務和主題的定義。


ROS API

通用服務 Common Services

下表描述了Webots裝置之間共享的ROS服務。

service 名稱 service 定義
get_bool bool ask
---
bool value
get_float bool ask
---
float64 value
get_int bool ask
---
int32 value
get_string bool ask
---
string value
get_uint64 bool ask
---
uint64 value
set_bool bool value
---
bool success
set_float float64 value
---
bool success
set_float_array float64[] values
---
bool success
set_int int32 value
---
bool success
set_string string value
---
bool success

----Fin----

相關文章