基於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部落格
過程中,可能需要安裝rosdep
和 colcon
:
安裝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-cmake
、colcon-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 發行版名稱,比如foxy
或humble
。為了每次啟動終端時自動載入這些環境變數,你可以將這行命令新增到
~/.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
目錄中的路徑新增到你的環境變數(如PATH
、LD_LIBRARY_PATH
、PYTHONPATH
、AMENT_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或以下)
任務二: 模擬
- 完成URDF、rviz、Gazebo的探索學習
- 建立鐳射雷達,使用URDF建立自定義模型,在Gazebo中搭建模擬環境,在rviz模擬器中使用鍵盤完成對小車的控制,並實時在Gazebo中完成構圖
URDF+Gazebo+Rviz模擬_gazebo模型顯示在rviz-CSDN部落格
ROS_blinkroad的部落格-CSDN部落格
新建一個功能包task2, 新增依賴項:
你需要在功能包的
package.xml
和CMakeLists.txt
中配置依賴項,以便讓你的功能包能夠使用urdf
和xacro
這些庫。1. 在
package.xml
中新增依賴在
package.xml
檔案中,你需要明確宣告你的功能包依賴於urdf
和xacro
。這可以確保在構建和執行時這些依賴項會被自動處理。開啟
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
來找到urdf
和xacro
包,以確保它們在構建過程中被正確載入和使用。開啟
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.xml
和CMakeLists.txt
之後,返回到工作空間的根目錄,然後重新構建功能包:cd ~/dev_ws colcon build
透過這些步驟,你的功能包將正確依賴
urdf
和xacro
,並且能夠在啟動時處理這些檔案。
如果沒有安裝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 版本,比如foxy
或galactic
。)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