商品描述
本商品為研發實驗用的模組,無法隨插即用,須經專業背景人士(如:工程師、研究生、師生)
撰寫程式、燒錄、接線等二次加工後,才具備訊號傳輸功能。
並非直接插電後可直接使用之射頻模組,非屬電信管制射頻器材,購買前請詳閱商品說明。
這是Neuron Omni Bot使用ROS的自主和快速集成功能的展示品
【特徵】
- ‧SEMA庫和ROS1、ROS2之間的完美結合
- ‧配有三個全向輪,每個輪上帶有一個12V、4.32瓦直流編碼馬達
(霍爾編碼器,每轉一圈可提供390個脈衝 (1560個計數)) - ‧使用STM32F103晶片與定制的馬達驅動板 - ominiBotHV
- ‧基於 ROS系統、定製化的馬達驅動節點
- ‧MPU6050 6-axis IMU可使用 ROS發佈器,發佈 ROS 標準化訊息格式
- ‧簡單使用 ROS中的 launch 文件,高效能打造屬於自己的機器人系統
- ‧提供完整的參數列表,可快速微調ROS中導航,制導和控制演算法
- ‧使用SEMA庫的多種通訊介面
主機板
| ROS Starter Kit - Neuron |
處理器
| Intel®Celeron® 3900TE 處理器 |
記憶體
| 4G |
儲存裝置
| 128 SSD |
使用軟體
| ROS/ROS 2 SDK for Ubuntu 16.04 LTS 64bits |
ADLINK Opensplice DDS |
電源供應
| 直流輸入:24V ±5% |
影像輸出
| Display Port x 3(分辨率最高 4096 x 2160 像素) |
USB
| USB 3.0 x 4 |
USB2.0 x 4 |
板載USB3.0 x 2 |
Dongle USB3.0 x 1 |
連接埠
| RS-232 x 3 |
板載 RS-232/422/485 x 1 |
網路
| 乙太網路 GbE x 2 |
WIFI/BT 網卡 |
支援802.11 ac/a/b/g/n 雙頻(2.4GHz或5GHz)無線網路傳輸技術 |
雷射測距儀
| 掃描頻率 6Hz~12Hz |
測距範圍 <10m |
測距頻率可達 5Khz |
馬達
| 直流減速編碼馬達 x 3 (額定電壓 12V,額定扭矩0.5kg.cm,減速比10) |
馬達控制版
| OminiBotHV |
USB / TTL 連接埠(UART) |
輸入電壓 : 8V~30V |
支援控制 4顆 帶編碼器 / 一般直流馬達 |
6軸加速度感測器 |
5V / 4A 電源輸出埠 x 4 |
車體
| 全向輪移動平台 全向輪直徑60mm |
配件
| 精密六角板手組(7支組) |
DP公轉VGA母轉接器 |
22.2V 5200mah 35C 6S 鋰電池,XT60 |
周邊配件
| 50W 5A鋰電池充電器 平衡器 |
T母頭轉XT60公 電源線轉接插頭插座 |
產品尺寸 (H x L x W)
| 245 x 280 x 280 mm |
外箱尺寸 (H x L x W)
| 389 x 442 x 357 mm |
【入門】
下列說明文件將為您提供如何將影片中的範例,複製到您自己的機器人上。
如果您不熟悉 ROS 系統的操作,可在下方的 「相關操作技巧」文件中,找尋基礎的操作方法;也可在下方的 「多機操作」文件中,找尋多台機器遠端遙控的操作方法。
【必備的前置作業】
- 1. Neuron硬體與 SEMA 程式庫的設定
您需要可兼容ADLINK SEMA程式庫的主機板,才能進行下方範例影片中的操作。您可以至此網站查閱更多相關的訊息 : https://neuron.adlinktech.com
- 2. 將此專案的程式碼下載到您的ROS(catkin)工作區
cd catkin_ws/src
git clone ttps://github.com/EwingKang/Neuron-OmniBot.git neuron_omnibot - 3. 若有需要,可準備一些電子零件:3個LED、3個接觸開關、1個觸覺(按動)開關
- 4. 安裝光學雷達相關的 ROS package,本次範例使用 ydlidar package : https://github.com/YDLIDAR/ydlidar_ros
- 5. 正確的連接電線線路(請參閱下方安裝步驟中的「硬體設定」)
【安裝步驟】
a)硬體設定
根據下圖正確連接所有電線
-
1. VDMC 手冊
- ‧從Neuron PSU 拉出24V電源,連接至 OmniBotHV
- ‧使用 MicroUSB 傳輸線,連接 Neuron 控制板與 OmniBotHV
- ‧Neuron 控制板須設定 ttyUSB的權限 : /dev/neurontty
- 2. 光學雷達(本範例以YDLidar為例)
- ‧使用MicroUSB傳輸線,連接至Neuron 控制板
- ‧若有需要,可使用第2條MicroUSB傳輸線,連接光學雷達的電源線至Neuron 控制板
- 3. [非必要]SEMA外圍設備(衝突檢測,狀態指示LED)
- ‧LED:對GPIO正極,對GND負極
- ‧開關:跨越GPIO和GND
- 4. 其他要求
- ‧建議將機器人的鋒利邊緣包裹起來
- ‧請勿遮蔽光學雷達的掃瞄視野
- ‧您的兩個wifi天線應相互垂直(即90度)
- ‧如果您使用鋰電池,請始終戴上天平鉛監測儀
b)軟體設定
- 1. 安裝好ADLINK SEMA程式庫後,您的Neuron OminiBot應該已經安裝了正確的SEMA。如有任何疑問,可至此查詢:https://neuron.adlinktech.com
- 2. 安裝ROS系統 – kinetic 版本,並設定好工作空間(catkin_ws) 。
若尚未安裝ROS系統,可至此查看相關步驟:
【安裝方法】
【工作空間設定方法】
- 3. 安裝本專案依賴 (ubuntu 軟體):
- ‧ROS
- ‧Robot Localization ( EKF )
sudo apt-get install ros-kinetic-robot-localization - ‧Laser SLAM (gmapping)
sudo apt-get install ros-kinetic-gmapping ros-kinetic-scan-tools\ ros-kinetic-navigation # laser slam - ‧Navigation Planner
sudo apt-get install ros-kinetic-teb-local-planner ros-kinetic-teb-local-planner-tutorials\ ros-kinetic-eband-local-planner
- ‧推薦
- ‧KATE
sudo apt-get install kate - ‧htop
sudo apt-get install htop - ‧serial port terminoa (GUI monitor)
sudo apt-get install gtkterm - ‧OBS
- ‧SSH server
sudo apt-get install openssh-server
- 4. 接著設定 SEMA 程式庫的軟連接,找到 SEMA程式庫後,運行auto shell命令文件。
cd ${project_root}/lib
(e.g.: cd catkin_ws/src/neuron_omnibot/neuron_demo_gpio/lib)
./setlink.sh
注意:如果遇到類似的錯誤error: no such file as...,則需要使用chmod +x命令, 使setlink.sh成為可執行文件。 - 5. 編譯該專案的程式碼
我們將使用ROS構建管理工具「Catkin」來建構節點。我們需要使用root權限,才能進行 SEMA程式庫鏈接。
SEMA程式庫節點建構完成後,強烈建議您退出root模式。
cd ~/catkin_ws
sudo -sE catkin_make
exit - 6. 設置光學雷達連接埠,下載來自YDLidar github所開源的 package
cd ~/catkin_ws/src
git clone https://github.com/Adlink-ROS/ydlidar_ros.git
開始設定光學雷達連接埠【使用教學】
roscd ydlidar/startup
sudo chmod 777 ./*
sudo sh initenv.sh - 7. 新增 USB權限
sudo sh init_neuron_tty.sh
【使用範例】
Neuron Omnibot範例可以分為四個部分:
- 1. Omnibot IO:馬達控制器、光學雷達
- 2. SLAM:同步定位與即時地圖建立(simultaneous localization and mapping)
- 3. Localization:在建立好的地圖上,實現定位功能
- 4. 移動:障礙物檢測,路徑規劃、路徑生成與移動控制
上述的每個功能都包裝為單個ROS的 launch 文件,以方便執行。
我們將在下面提供教學範例。
對於每個 launch 文件,都可以打開一個新的終端機 (按下ctrl + alt + t )執行文件。
a)OmniBot driver
在本章節中,我們將啟動ROS omnibot的驅動程式。
該驅動程式包括所有IO和感測器設備,包括馬達驅動板,編碼器與里程計,光學雷達和IMU狀態。
- 1. roscore
roscore是ROS的核心。我們鼓勵您在一個新的終端機視窗執行該指令,因為這將讓您的機器人能夠控制所有有關該 ROS 系統的任何操作
roscore - 2. Robot Base驅動程式,此 launch 文件包含多個節點。它啟動了STM32馬達驅動板,光學雷達以及所有機器人TF定義之間的通信。
請注意,如果您要結束節點,請按下 「ctrl + c」,然後等待一秒鐘後(LaserScan節點需要一些時間來關閉運行中的連接埠),該執行文件即可自動關閉。
roslaunch omni_base_driver omni_ekf.launch - 3. 我們使用teleop_twist_keyboard作為控制機器人的程式。
它使用鍵盤來下達指令,但預設的指令,下達給馬達控制板的速度太快了,
所以須先使用x和c將速度降低到0.3左右。
rosrun teleop_twist_keyboard teleop_twist_keyboard.py
注意:由於Neuron OmniBot是全向輪平台的機器人,因此您可以按住shift+移動來執行平移移動。
- 4. RVIZ是ROS中功能強大的3-D可視化工具。
我們可以通過以下方式簡單地啟動RVIZ:rviz
在 rviz裡,使用「File > Open Config」 或ctrl + o打開位於該專案中的基本可視化設置
$(omni_base_driver)/rviz_config/omni_driver_laser.rviz
需要注意的是,儘管簡單地使用提供的gui來打開rviz配置文件更容易,但是可以通過添加絕對路徑來使用 rviz:
rviz -d
"/home/ros/catkin_ws/src/neuron_omnibot/omni_base_slam/rviz_config/omni_slam.rviz"
b)Laser Slam
在本節中,我們將使用2D光學雷達來構建地圖。
- 1. 確保已經啟動 omnibot driver中的所有內容,包括TF,馬達驅動板和光學雷達。
- 2. 正確設置rviz,以便我們可以看到所有內容
您可以在 rviz 中手動打開設置檔案 :
($ omni_base_slam)/rviz_config/omni_slam.rviz
或運行以下指令
rviz -d
"/home/ros/catkin_ws/src/neuron_omnibot/omni_base_slam/rviz_config/omni_slam.rviz" - 3. 讓我們使用下列指令,執行gmapping演算法並開始進行瘸雷大定位與建圖過程:
roslaunch omni_base_slam omni_gmapping.launch - 4. 使用 omnibot driver步驟中引入的鍵盤驅動程式來回移動機器人。
- 5. 建好地圖後,請記住在關閉gmapping演算法 之前保存地圖:
rosrun map_server map_saver -f map_file_name
一個地圖文件(.x)和一個配置文件(.xxx)將保存在home路徑下
請確保將這兩個文件都移至($ omni_base_slam)/map/ - 6. 在執行gmapping終端機(步驟4的終端)上,按下「ctrl + c」以便停止gmapping。
c)Robot Localization
在獲得靜態地圖之後,我們並不會一直執行SLAM,避免增加機器人的運算負擔。在此步驟中,我們將使用AMCL package,來幫助我們根據先前生成的地圖和當前的光學雷達掃描來找到機器人的位置。
- 1. 確保已經啟動 omnibot driver中的所有內容,包括TF,馬達驅動板和光學雷達。
- 2. 正確設置rviz,以便我們可以看到所有內容
您可以在 rviz 中手動打開設置檔案 :
($ omni_base_slam)/rviz_config/omni_slam.rviz
或運行以下指令
rviz -d
"/home/ros/catkin_ws/src/neuron_omnibot/omni_base_slam/rviz_config/omni_slam.rviz"
- 3. 載入存放在 ($ omni_base_slam)/map/ 的地圖。
透過修改 omni_base_nav)/omni_localize.launch 中的第 4 行程式碼 「args= …」 ,將想要開啟的地圖檔案名稱填入。
- 4. 現在,我們將使用預設的地圖,啟動amcl的 package
roslaunch omni_base_nav omni_localize.launch
預設情況下, localization package會將機器人初始化為(x,y)=(0,0),即與一開始建圖過程時的起始點位置相同。
但是,如果機器人一開始並不在建圖時的起始位置時,我們可以在RVIZ中使用“2D Pose Estimate” 功能手動設定起始位置。
如下圖上方橫幅處用紅色正方形標記 - 5. 現在我們已經初始化了機器人的 pose,我們可以在RVIZ世界中看到很多箭頭。這些箭頭是用於定位機器人的粒子。由於AMCL的工作方式,如果機器人保持靜止,則這些 pose將不會更新或收斂。話雖如此,我們仍然可以要求 localization嘗試通過以下方式進行更新:
rosservice call /request_nomotion_update
並且您將看到箭頭變得更加一致,並且您的光學雷達掃描圖案將逐漸與地圖匹配。 - 6. 機器人通常無需手動設置初始 pose即可識別其初始位置。您可以調用此服務,以便 localization 將平均分配 pose 粒子。全局初始化後,您可以執行上述多個no-motion-update,並且程式將對其進行 localization。
rosservice call /global_localization
d)導航
透過使用OmniBot localization,我們現在可以進行路徑規劃了。在此範例中,我們利用ROS導航中的move base結構。
- 1. 確保已經啟動omnibot driver中的所有內容,包括TF,馬達驅動板和光學雷達。
- 2. localization 已經初始化
- 3. RVIZ設置為 ($ omni_base_nav)/rviz_config/omni_nav.rviz
- 4. 您可以選擇三種不同的導航演算法:
‧Dynamic Window Approach
‧Timed Elastic Band
‧Elastic Band
您可以從以下命令之一進行選擇:
roslaunch omni_base_nav omni_nav_dwa.launch
roslaunch omni_base_nav omni_nav_teb.launch
roslaunch omni_base_nav omni_nav_eband.launch - 5. 路徑規劃啟動後,您應該在RVIZ中看到如上圖所示的內容。您可以在RVIZ的頂部橫幅上選擇 「2D nav Goal」工具。單擊地圖並拖動以指定目標方向。機器人應自行向目標行駛。 背景灰色地圖是全局地圖,而彩色藍色-粉紅色-紅色是1.5x1.5米的局部地圖。全局路徑用青色繪製,而本地計劃器則用藍色繪製。不同的localization 將具有不同的表示形式。
【多台機器操作】
通常在機器人四處移動時,是無法在機器人上將處理畫面顯示出來,如移動滑鼠、輸入指令等相關操作。幸運的是,ROS的構建方式使得多台機器運行相同的系統非常容易。實際上,有一個簡單的官方教程可供參考。
可以通過一個wifi路由器輕鬆地實現(和擴展)物理網絡,如下圖所示:
- 1. 首先,找到OmniBot的IP地址。這可以通過linux豬的指令來完成 : ifconfg。
- 2. 設置環境變量。我們將變量添加到隱藏文件「 .bashrc」 中。您可以按下「ctrl+h」顯示隱藏文件,並手動或通過以下命令編輯「.bashrc」:
echo export ‘ROS_IP=YOUR_OMNIBOT_IP' >> ~/.bashrc
echo export ‘ROS_MASTER_URI=http://$ROS_IP:11311' >> ~/.bashrc
此步驟皆應執在工作電腦與OmniBot進行。 - 3. 由於我們沒有螢幕或鍵盤可查看 omnibot執行畫面,因此所有操作都將以遠端操作方式進行。首先,讓我們確保我們的主控電腦可以通過
ping NeuronBot.local # or ping YOUR_OMNIBOT_IP
進行溝通。 - 4. 我們將建立SSH連接。(以防您在OmniBot上沒有該功能,請按照上一節中所述進行操作)。這可以通過以下方式輕鬆完成:
ssh NeuronBot.local # or ssh YOUR_OMNIBOT_IP - 5. 在OmniBot SSH連接上,啟動byobu,這樣我們現在可以在一個SSH連接中擁有多個終端機 byobu ,您可以使用添加新的終端機F2,使用F3和切換終端機F4,使用指令退出中斷機: exit
- 6. 通過SSH,在OmniBot終端機上運行omniBot節點。
- 7. RVIZ和工作機器上的所有其他東西
- 8. 盡情使用 omnibot!
Linux / Ubuntu終端
- ctrl + shift + T 打開新的終端標籤
- ctrl + PageUp/PageDn 在標籤之間切換
- rqt ROS-QT,ROS訊息可視化工具
- rostopic:ROS主題服務器功能
- rostopic list 列出所有主題
- rostopic echo /SOME_TOPIC 直接列印主題
- rosservice :ROS服務 服務器功能
Neuron Omni Bot GitHub