ROS 機器人控制 - 1

白龍 Lv3

筆記製作中

目前我也還在學習 ROS 中,之後慢慢有成過再放上來

學習目標

筆記的學習目標

  1. 直接在 terminal 用 rostopic pub -1 /turtle1/cmd_vel 和 rostopic pub -r 10 /turtle1/cmd_vel 的方式控制烏龜
  2. 用 pid 控制 twist 隨機 a 點到 b 點
  3. 用 rviz 上的 2D Nav Goal 給出點位 做判斷有沒有超出範圍 a 點到 b 點
  4. 接續 2. 的 code 新增一功能 寫一個暫停的 server (std_srv::Bool)
  5. 接續 3. 然後寫另一個 code 當按空白鍵的時候可以用 client call 3. 創立的 server 暫停小烏龜前進
  6. spin spinOnce c++ python 形式 都寫寫看 並看 rostopic hz 看看有哪些差異
    後續想好要用 python 或 c++ 寫一種就好
  7. 寫一個 roslaunch 一次啟動 2 個 node
  8. 把 geometry::twist 轉掉 寫一個只有 2 個參數的 msg 也能使用(c++ 比較難 可試看看)
  9. 把 std_srv::Bool 拿掉 寫一個 srv 並把裡面換成 int 形式 然後程式再做修改
  10. 寫一個 code 用 把起點和終點的位置用 TF 轉換的方式 發布到轉到 map 上
    然後開啟 rviz 打開 tf,fix_frame 改成 map 接續先前功能(提示 /turtle1/pose 中的 theta 即為 yaw)

相關資源

聽從學長的建議,整理了以下相關資源

了解ROS的目標

簡單來說ROS就是一個控制機器人的系統,目標是建立一個用於控制各種機器人的共通入口

優點

  • 免費
  • 多種開發語言
  • 開源

ROS 方程式

  • Plumbing - 管道
    底層的訊息通訊 機制,讓不同的 程式之間可相互 交流和協作。
  • Tools - 工具
    一系列的開發和 除錯工具,幫助 我們更有效率地 開發機器人應用 程式。
  • Capabilities - 能力
    ROS 提供的各種 功能模組和演算 法,可直接用於 機器人應用開發。
  • community - 社群
    由全球開發者、 研究者和使用者 組成的ROS 社 群,共同貢獻和 分享資源,推動 ROS 的發展

安裝ROS

安裝環境

建立環境的選項有很多,不過我們最終目標都是開設一個 Linux Ubuntu 的環境,可以選的選項有

  • Docker 部屬
  • 使用遠端虛擬機
  • Windows 內建 WSL 工具

以我來說當然用 Windows 內建的最方便,因為安裝過程非常簡單,這邊就以 Windows 內建 WSL 工具作為環境建立方式

要快速在 Windows 中快速建立環境的方式很簡單,只需要開啟 powershell 輸入

1
wsl --install -d Ubuntu-20.04

就可以安裝好 Ubuntu 20.04 ,如果是使用其他安裝方式的讀者,請注意為了相容性考量請勿比使用 Ubuntu 20.04 發行版本安裝

安裝完後重新開啟一次 PowerShell 在新增這裡就可以找到 Ubuntu 的環境了,點一下新增就可以進入了,接下來就要來安裝 ROS 到本地了

how to open env

# 點一下Ubuntu 20.04 LTS 就可以開啟虛擬面

小技巧

在正式開始安裝ROS前我們先介紹一些在使用Windows Ubuntu虛擬機介面的一些快捷鍵

視窗管理快捷鍵

功能 鍵盤快捷鍵
往下切割新的一格 alt + shift + "-"
往右切割新的一格 alt + shift + "+"
目前焦點往下 alt + down
目前焦點往左 alt + left
目前焦點往右 alt + right
目前焦點往上 alt + up

關閉視窗

如果要關掉一個是窗可以在當前視窗打 exit 就可以關閉當前視窗了

安裝ROS

接下來的步驟簡單來說就是一長串的複製貼上,為了簡單一點你可以把以下指令一次性貼到端機中,網路快一點等個10分鐘左右就可以回來了

1
2
3
4
5
6
7
8
9
10
sudo apt update -y
sudo apt upgrade -y
cd ~/ && mkdir ROS_Setup
cd ROS_Setup
wget "https://cdn.sourceb.in/bins/bLPkJb6xck/0" -O install_ros_noetic.sh
sudo apt install dos2unix && dos2unix -k -o install_ros_noetic.sh
chmod 755 ./install_ros_noetic.sh
bash ./install_ros_noetic.sh
cd ~/
sudo apt-get install -y ros-noetic-joy ros-noetic-teleop-twist-joy ros-noetic-teleop-twist-keyboard ros-noetic-laser-proc ros-noetic-rgbd-launch ros-noetic-rosserial-arduino ros-noetic-rosserial-python ros-noetic-rosserial-client ros-noetic-rosserial-msgs ros-noetic-amcl ros-noetic-map-server ros-noetic-move-base ros-noetic-urdf ros-noetic-xacro ros-noetic-compressed-image-transport ros-noetic-rqt* ros-noetic-rviz ros-noetic-gmapping ros-noetic-navigation ros-noetic-interactive-markers

或是你不會複製貼上可以打以下這串

1
wget -O- "https://cdn.sourceb.in/bins/Jy1mBsaBdJ/0" | sed 's/\r$//' | bash

Debugging

如果遇到卡很久或是DNS有問提可以重新寫一下 resolv.conf 把 nameserver 換成 168.95.192.1 或是 8.8.8.8

以下是我的配置文件長相

1
2
3
4
5
6
7
8
# This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/wsl.conf:
[network]
generateResolvConf = false

# Setting
# nameserver 10.255.255.254
nameserver 168.95.192.1
nameserver 8.8.8.8

初次使用ROS

既然環境都安裝完成了,現在我們就來初次體驗一下ROS吧,不過要注意現在我們其實只是想要測試一下環境有沒有正常運作,所以用到的指令目前還不用特別記,之後的筆記都會提到

我們先開啟四個視窗,可以用剛剛提到的小技巧在一個頁面一次開啟多個視窗,接下來四個視窗中分別輸入

  • roscore
  • rosrun turtlesim turtlesim_node
  • rosrun turtlesim turtle_teleop_key
  • rqt

輸入完成後應該會跳出兩個視窗,一個是模擬的畫面另一個是紀錄各種模擬數值的視窗,同時你可在輸入rosrun turtlesim turtle_teleop_key的視窗用上下左右鍵來測試模擬視窗的烏龜有沒有移動,也可以看在紀錄模擬數值的視窗中的數值有沒有甚麼變化

如果以上一切都正常納下一篇文章我們可以正式好好學習ROS了