---
# System prepended metadata

title: ROS與SLAM

---

# ROS與SLAM
# ROS介紹
* 機器人作業系統 Robot Operating System(ROS)，可以不侷限於硬體就可開發的架構。
* ROS的框架的核心是一個通訊中介，各程序可彼此通訊交換資料。
* 本次使用的環境:
windows電腦關虛擬機
ubunut 18.04
ROS1 Melodic
RPLiDAR A1

## 設置金鑰
在Ubuntu  加入新的儲存庫時，需要加入金鑰代表這是受信任的來源，這些金鑰還能驗證套件來源。
```
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 install curl
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
```
## 安裝 ROS Melodic
* 更新Ubuntu 的套件清單
```
sudo apt update
```
* 安裝完整的ROS 套件包
```
sudo apt-get install ros-melodic-desktop-full
```
ROS 有提供各種不同功能包來提供使用，我們可以根據自己的需求去做安裝(選擇其中一種安裝即可)
完整版(較推薦):包含ROS、rqt、rviz、機器人通用庫、2D/3D 模擬器和 2D/3D 感知庫

## 設置ROS環境
* ROS 安裝檔中大多數是腳本檔與執行檔，大部分裝在/opt/ros/<ros_version>資料夾中。
* Ubuntu 終端機加入ROS的環境變數才能存取這些指令與腳本檔，只要 source這個 bash檔就可以:opt/ros/<ros_version>/setup.bash
* 如果安裝多個 ROS版本。修改以上版本名稱及可切換到不同的ROS版本。 
```
echo "source/opt/ros/melodic/setup.bash" >> ~/bashrc
source ~/.bashrc
```
## ROS dependencies 相關設置
* ROS 的rosdep工具更方便安奘指定套件的相依套件。ROS的核心元件也會用到此工具。
```
sudo apt install python-rosdep python-rosinstall python-rosinstall-generator python-wstool build-essential
sudo apt install python-rosdep
sudo rosdep init
rosdep update
```

* 確認是否安裝成功
```
roscore
```
# 設置ROS 的工作空間
創建一個存放ROS功能包的空間，我們使用基於catkin的工作空間來建置並安裝ROS套件。

* 基本架構
```
-- workspace
    -- build
    -- devel
    -- src
        -- package1
        -- package2
            -- launch
            -- CMakelists.txt
            -- package.xml
            -- src
                -- node.cpp
                -- ...
            -- ...
        -- ...

```
![ros_workspace.drawio](https://hackmd.io/_uploads/HkRF_NCZyl.png =80%x)


* 我懶得畫圖了
 ![image](https://hackmd.io/_uploads/SJ4HD4A-Jg.png)
![image](https://hackmd.io/_uploads/HyOtwE0bke.png )

 
* 創建catkin_ws工作空間資料夾，並建置src的資料夾存放ROS套件。
```
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make
export ROS_PACKAGE_PATH=$ROS_PACKAGE_PATH:~/catkin_ws/src
source ~/catkin_ws/devel/setup.bash
```
# RPLidar
https://github.com/robopeak/rplidar_ros/tree/slam
下載解壓縮到catkin_ws/src，名字改成rplidar_ros
![image](https://hackmd.io/_uploads/Bk5uPQ0b1x.png)

```
cd ~/catkin_ws/
catkin_make
```



```
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
```

```
cd ~/catkin_ws/src/rplidar_ros/scripts
 ./create_udev_rules.sh
```
* 修改dev
```
cd catkin_ws/src/rplidar_ros/launch
gedit rplidar.launch
```
![image](https://hackmd.io/_uploads/H1_zrQAbJx.png)

参数修改成/dev/rplidar，重新插拔

![image](https://hackmd.io/_uploads/ByYKomC-1g.png)

* 單純preview畫面
```
roslaunch rplidar_ros view_rplidar.launch 
```

## Hector SLAM
Simulaneous Loaction and Mapping,SLAM

```
cd ~/catkin_ws/src
git clone https://github.com/tu-darmstadt-ros-pkg/hector_slam
cd ~/catkin_ws
catkin_make
```
* 執行SLAM
```
roslaunch rplidar_ros view_slam.launch
```