基於ROS2的智慧協同系統

Mintisn發表於2024-10-16

基於ROS2的智慧協同系統

任務一: 基礎

任務

  • 配置ubuntu環境,注意ROS版本與ubuntu版本間的對應關係

  • 安裝ROS 2框架

  • 使用Publisher-Subscriber結構,完成兩個node節點間傳輸資料功能

    • 傳輸文字與影片

STEP: 配置Ubuntu環境

安裝VMware

安裝虛擬機器(VMware)保姆級教程(附安裝包)_vmware虛擬機器-CSDN部落格

下載 Ubuntu 22.04 LTS 映象檔案 Alternative downloads | Ubuntu 選擇22.04的bittorrent檔案,使用qbittorrent等軟體下載就好.

配置好虛擬機器

可能遇到的問題

VMware Workstation 17 執行虛擬機器總是閃屏,有時還導致原系統當機/黑屏_vmware虛擬機器不斷閃屏-CSDN部落格

STEP: 安裝ROS2框架

按照這個步驟來 ubuntu22.04安裝ROS2 詳細教程-CSDN部落格

如果遇到這個問題: [關於ROS安裝及ROS定位不到軟體包的問題解決_rosdep install --rosdistro melodic --ignore-src ---CSDN部落格](https://blog.csdn.net/YMMMAR/article/details/122142925#:~:text=檢查網路連線是否正常,可以嘗試使用以下命令更新 軟體包 列表: sudo apt-get update,源。 3. 檢查 軟體包 名稱是否正確,有時候輸入錯誤的 軟體包 名稱也會導致 定位不到軟體包。)

可以嘗試更換一下網路環境, 連線熱點

STEP: ROS2入門

ROS2——建立ROS2工作空間_ros2建立工作空間-CSDN部落格

跟著這個教程, 實現一個簡單的訂閱者和釋出者:

ROS2入門教程—建立一個簡單的訂閱者和釋出者(C++版)_ros2 c++-CSDN部落格

過程中,可能需要安裝rosdepcolcon :

安裝colcon

colcon 是用於構建 ROS 2 工作空間的工具,如果你的系統提示 colcon: command not found,說明你還沒有安裝 colcon。你可以按照以下步驟來安裝並配置 colcon

1. 安裝 colcon

可以透過包管理器安裝 colcon。首先,確保你的系統已經安裝了 ROS 2,並且你的系統源已經配置好。

Ubuntu 下安裝 colcon

執行以下命令來安裝 colcon 和相關的構建工具:

sudo apt update
sudo apt install python3-colcon-common-extensions

這個命令會安裝 colcon 以及一些常見的擴充套件,如用於自動補全的 colcon-cmakecolcon-ament-cmake 等。

2. 驗證安裝

安裝完成後,你可以透過以下命令驗證是否成功安裝 colcon

colcon --version

如果命令輸出 colcon 的版本號,則表示安裝成功。按照gpt步驟做到這裡就ok了, 之後跟著部落格的步驟走

3. 設定環境變數(可選)

確保你已經正確地設定了 ROS 2 的環境變數。你可以透過在終端執行以下命令來載入 ROS 2 的環境:

source /opt/ros/<your_ros2_distro>/setup.bash

<your_ros2_distro> 替換為你正在使用的 ROS 2 發行版名稱,比如 foxyhumble

為了每次啟動終端時自動載入這些環境變數,你可以將這行命令新增到 ~/.bashrc 檔案中:

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

4. 構建 ROS 2 工作空間

安裝完成 colcon 之後,你就可以在工作空間中使用它來構建功能包。比如進入你的工作空間:

cd ~/dev_ws
colcon build

這將會自動構建你在 src 目錄中的所有 ROS 2 功能包。

總結

  • 透過 sudo apt install python3-colcon-common-extensions 安裝 colcon
  • 確保正確載入 ROS 2 的環境變數。
  • 使用 colcon build 來構建你的工作空間。

在每次編譯前, 需要確認功能包的依賴項是否安裝好, 在dev_ws路徑執行

rosdep install -i --from-path src --rosdistro humble -y

最後 實現兩個節點的通訊

. install/setup.bash
ros2 run cpp_pubsub listener

為什麼需要. install/setup.bash

在 ROS 2 中,. install/setup.bash 是一個關鍵步驟,用於設定你工作空間中的環境變數,確保系統能夠正確找到並執行你已經構建好的功能包。具體來說,這個步驟的主要作用如下:

1. 新增安裝路徑到環境變數

在你使用 colcon build 構建功能包時,構建的二進位制檔案和庫會被安裝到工作空間的 install 目錄中。透過執行 . install/setup.bash,你會將 install 目錄中的路徑新增到你的環境變數(如 PATHLD_LIBRARY_PATHPYTHONPATHAMENT_PREFIX_PATH 等),使系統可以找到這些檔案。

2. 為什麼需要 source install/setup.bash

在你執行 ros2 run cpp_pubsub listener 這樣的命令時,ROS 2 需要知道:

  • 從哪裡載入功能包。
  • 從哪裡找到依賴庫和其他資源(例如,已編譯的節點、訊息定義等)。

當你執行 . install/setup.bash(相當於 source install/setup.bash),這會在當前的 shell 中執行指令碼,更新你的環境變數,以便 ros2 命令能夠找到你的功能包以及所有依賴項。

如果不執行這個步驟,ROS 2 可能找不到你剛剛構建的功能包,導致無法正確執行 ros2 run 命令。

3. 什麼時候需要執行 install/setup.bash

  • 首次構建後:當你第一次透過 colcon build 構建了工作空間,你需要執行 . install/setup.bash 來讓系統知道新的功能包和二進位制檔案的位置。
  • 每次新開啟一個終端時:在每個新的終端會話中,環境變數不會自動保留。因此,每次開啟一個新的終端後,如果你想執行工作空間中的功能包,你需要再次執行 . install/setup.bash

4. 使 install/setup.bash 自動載入(可選)

如果你不想每次都手動執行這條命令,你可以將它新增到你的 ~/.bashrc 檔案中,以便每次開啟新終端時自動載入:

echo "source ~/dev_ws/install/setup.bash" >> ~/.bashrc
source ~/.bashrc

總結

  • . install/setup.bash 的目的是將你的工作空間安裝路徑新增到環境變數中。
  • 它確保你能夠使用 ros2 命令找到和執行你構建的功能包。
  • 每次開啟新終端時,你都需要重新執行這條命令,或者將其加入 ~/.bashrc 檔案以自動執行。

按照上述步驟我們實現了兩個node節點間傳輸文字的功能, 下一步需要實現傳輸影片的功能.

STEP 兩個節點間傳輸影片

需要檢查自己是否安裝了opencv2(或者說opencv4) 和 cv_bridge, 要想實現影片的傳輸, 我們需要這兩個庫.

合理使用prompt, 讓gpt根據之前的基礎模板參考實現一個傳輸影片的釋出者和訂閱者.

完善程式碼後, 需要和之前一樣新增並完善依賴項:

<!-- package.xml   -->
<!-- 新增依賴項 -->
  <buildtool_depend>rclcpp</buildtool_depend>
  <buildtool_depend>std_msgs</buildtool_depend>
  <buildtool_depend>sensor_msgs</buildtool_depend>
  <buildtool_depend>cv_bridge</buildtool_depend>
  <buildtool_depend>OpenCV</buildtool_depend>
# CMakeLists.txt
# find dependencies
find_package(ament_cmake REQUIRED)
# uncomment the following section in order to fill in
# further dependencies manually.
find_package(rclcpp REQUIRED)
find_package(std_msgs REQUIRED)
find_package(sensor_msgs REQUIRED)
find_package(cv_bridge REQUIRED)
find_package(OpenCV REQUIRED) # 新增openCV作為依賴項

# 增加編譯規則 釋出者 
# 2024年10月15日: 新增依賴opencv4 cv_bridge
add_executable(talker src/publisher_member_function.cpp)
ament_target_dependencies(talker rclcpp std_msgs sensor_msgs cv_bridge OpenCV)
# 訂閱者
add_executable(listener src/subscriber_member_function.cpp )
ament_target_dependencies(listener rclcpp std_msgs sensor_msgs cv_bridge OpenCV)

編譯:

colcon build --packages-select cpp_pubsub

編譯完成後分別執行listener talker

. install/setup.bash
ros2 run cpp_pubsub listener

我們就可以看到虛擬機器上出現影片流了(如果要影片流暢, 你應該將定時器設定為40ms或以下)

image-20241016142336530

任務二: 模擬

  • 完成URDF、rviz、Gazebo的探索學習
  • 建立鐳射雷達,使用URDF建立自定義模型,在Gazebo中搭建模擬環境,在rviz模擬器中使用鍵盤完成對小車的控制,並實時在Gazebo中完成構圖

URDF+Gazebo+Rviz模擬_gazebo模型顯示在rviz-CSDN部落格

ROS_blinkroad的部落格-CSDN部落格

新建一個功能包task2, 新增依賴項:

你需要在功能包的 package.xmlCMakeLists.txt 中配置依賴項,以便讓你的功能包能夠使用 urdfxacro 這些庫。

1. package.xml 中新增依賴

package.xml 檔案中,你需要明確宣告你的功能包依賴於 urdfxacro。這可以確保在構建和執行時這些依賴項會被自動處理。

開啟 package.xml 檔案,在合適的地方(通常是在 <build_depend><exec_depend> 部分)新增如下依賴:

<package format="3">
  <!-- 其他已有內容 -->
  
  <!-- 新增 urdf 和 xacro 依賴 -->
  <build_depend>urdf</build_depend>
  <exec_depend>urdf</exec_depend>
  
  <build_depend>xacro</build_depend>
  <exec_depend>xacro</exec_depend>

  <!-- 其他已有內容 -->
</package>

解釋:

  • <build_depend>:功能包在編譯時所依賴的包。
  • <exec_depend>:功能包在執行時所依賴的包。

2. CMakeLists.txt 中新增依賴

CMakeLists.txt 中,你需要使用 find_package 來找到 urdfxacro 包,以確保它們在構建過程中被正確載入和使用。

開啟 CMakeLists.txt,新增如下內容:

cmake_minimum_required(VERSION 3.5)
project(my_robot_package)

# 找到 urdf 和 xacro 包
find_package(urdf REQUIRED)
find_package(xacro REQUIRED)

# 其他已有內容 ...

# 安裝 URDF 檔案
install(DIRECTORY urdf
  DESTINATION share/${PROJECT_NAME}/
)

# 其他已有內容 ...

解釋:

  • find_package(urdf REQUIRED)find_package(xacro REQUIRED) 會確保在構建時找到這兩個包。
  • install(DIRECTORY urdf DESTINATION ...) 語句用於確保 urdf 資料夾中的 URDF 檔案在安裝包時被正確處理。

3. 重新構建功能包

在修改完 package.xmlCMakeLists.txt 之後,返回到工作空間的根目錄,然後重新構建功能包:

cd ~/dev_ws
colcon build

透過這些步驟,你的功能包將正確依賴 urdfxacro,並且能夠在啟動時處理這些檔案。

如果沒有安裝xacro, 先去安裝

這個錯誤提示 CMake 找不到 xacro 包的配置檔案,通常是因為 xacro 沒有安裝或沒有被正確新增到 CMake 的查詢路徑中。可以按照以下步驟來解決問題:

1. 確認 xacro 是否已經安裝

首先,確保 xacro 已經正確安裝。可以使用以下命令檢查:

ros2 pkg list | grep xacro

如果 xacro 沒有安裝,可以使用以下命令來安裝它:

sudo apt update
sudo apt install ros-humble-xacro

(如果你使用的不是 ROS2 Humble 版本,將 humble 替換為你的 ROS2 版本,比如 foxygalactic。)

2. 設定 xacro_DIR 環境變數

如果 xacro 已經安裝,但 CMake 仍然找不到它,可以透過手動設定 xacro_DIR 來指定其路徑。

首先,找到 xacro 的安裝位置。使用以下命令查詢 xacro 包的安裝目錄:

ros2 pkg prefix xacro

這個命令會返回 xacro 包的安裝路徑,比如 /opt/ros/humble. 然後在你的 CMake 構建過程中,設定 xacro_DIR 環境變數:

export xacro_DIR=/opt/ros/humble/share/xacro/cmake

3. 修改 CMakeLists.txt

在你的 CMakeLists.txt 中,嘗試使用 ament_cmake 來尋找 xacro,而不是直接呼叫 find_package(xacro REQUIRED)

find_package(ament_cmake REQUIRED)
find_package(xacro REQUIRED)

這可以確保 CMake 使用 ament_cmake 查詢 ROS2 中的包,確保依賴項能夠正確被識別和使用。

4. 重新構建功能包

在確認 xacro 已安裝並設定了正確路徑後,重新構建你的功能包:

cd ~/dev_ws
colcon build

總結:

  • 確保 xacro 已經安裝。
  • 使用 ros2 pkg prefix xacro 找到 xacro 包的路徑,並設定 xacro_DIR 環境變數。
  • 修改 CMakeLists.txt 使用 ament_cmake
  • 重新構建功能包。

這樣應該可以解決 CMake 找不到 xacro 的問題。

colcon build --packages-select task2

相關文章