iT邦幫忙

2023 iThome 鐵人賽

DAY 10
0
自我挑戰組

一個營建系學生的韌體之路-自走車篇系列 第 10

【AMR_Day10】ROS2 基本功- Workspace & Packages

  • 分享至 

  • xImage
  •  

地基要打穩

營建系的我:「地基不穩,房子蓋得多高都沒用阿~」
為了好好的學會ROS2怎麼使用,必須得先學會幾個概念:

  1. workspace
  2. packages
  3. nodes
  4. topics
  5. Launch
  6. services
  7. parameters
  8. actions

前五項是我自己最常用到的基本功,不管事自己要建立一個專案或使用別人的專案,都得好好學會,至於剩下的就是看需求決定要使用的多深入了。絕對不是剩下的不重要!也很重要!只是我的鐵人賽會提的比較少,因為已經有很多前輩整理過教學了,我認為自己沒有必要也沒有強大到可以寫成教學~

那接下來我就會用自身經驗來介紹這些基本功~

設定環境

環境變數

先前提過,在安裝完ROS後,第一件要做的事情就是先確認環境變數有被添加。
而且是每一個新的terminal開啟後,都要做這件事,我以前很容易忘記,還以為哪裡出問題了...

  • linux
source /opt/ros/foxy/setup.bash
或
. /opt/ros/foxy/setup.bash
  • windows
call C:\dev\ros2\local_setup.bat

如果跟我一樣健忘可以把它加到shell的啟動腳本

echo "source /opt/ros/foxy/setup.bash" >> ~/.bashrc

下次開機後生效,但要注意,如果是在同一台電腦(非使用Docker)同時安裝兩個版本的ROS1&ROS2(如同時裝了ROS1 Noetic 和ROS2 Foxy),用同時將兩者的setup.bash加入啟動腳本中,terminal可能會搞不清楚要用哪個版本...
我自己後來固定Docker就沒遇過這種問題了

workspace

workspace是工作空間的意思,不過其實就是一個資料夾,裡面又包含了這些資料夾:

workspace_name
├── build //存放編譯暫存
├── install //存放執行檔,專案的setup.bash也在這
├── log //存放一些資訊或報錯
└── src //存放原始碼

4 directories, 0 files

,不過前三個在colcon build後會自行產生。
新建一個新的工作空間的步驟是:

mkdir -p ~/ros2_ws/src
cd ~/ros2_ws/src
git clone https://github.com/ros/ros_tutorials.git -b foxy-devel #示範用packages
cd .. #回到前一層 ros2_ws
rosdep install -i --from-path src --rosdistro foxy -y #檢查依賴的程式庫
colcon build #編譯
#編譯完產生 build install log

最後!!!添加這個工作空間的環境變數

source install/local_setup.bash

注意事項:得在workspace層colcon build,笨笨的我曾在/srccolcon build,還有要記得source!!!!

packages

packages可以是自己撰寫的或別人寫好的程式庫,放在/src底下,上面的例子是官方提供的ros_tutorials package,編譯和添加完環境變數後可以ros2 run turtlesim turtlesim_node檢查小烏龜有沒有出現。
turtlesim_node
那想查詢某個package有哪些執行檔(executables)可以用,輸入以下指令:

ros2 pkg executables turtlesim

https://ithelp.ithome.com.tw/upload/images/20230926/201404337gMB7g3Kaw.jpg
以turtlesim為例,裡面有4個執行檔可以用~

turtlesim draw_square
turtlesim mimic
turtlesim turtle_teleop_key
turtlesim turtlesim_node

p.s.
那如果要自己撰寫packages可以用c++或Python編輯,在~/ros2_ws/src中輸入

ros2 pkg create --build-type ament_cmake --node-name my_node my_package //C++
ros2 pkg create --build-type ament_python --node-name my_node my_package //Python

細節就之後慢慢補上~~


上一篇
【AMR_Day9】 關於GUI的歪路
下一篇
【AMR_Day11】ROS2 基本功- Node
系列文
一個營建系學生的韌體之路-自走車篇30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言