# 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 ```