1.helloworld案例
1.創建功能包(C++)
終端下,進入ws00_helloworld/src目錄,使用如下指令創建一個C ++ 功能包:
ros2 pkg create pkg01_helloworld_cpp --build-type ament_cmake --dependencies rclcpp --node-name helloworld
執行完畢,在src目錄下將生成一個名為pkg01_helloworld_cpp的目錄,且目錄中已經默認生成了一些子級文件與文件夾。
2.編輯源文件
進入pkg01\_helloworld\_cpp/src目錄,該目錄下有一helloworld.cpp文件,修改文件內容如下:
#include "rclcpp/rclcpp.hpp"int main(int argc, char ** argv)
{// 初始化 ROS2rclcpp::init(argc,argv);// 創建節點auto node = rclcpp::Node::make_shared("helloworld_node");// 輸出文本RCLCPP_INFO(node->get_logger(),"hello world!");// 釋放資源rclcpp::shutdown();return 0;
}
3.編譯執行
在終端進入ws_helloworld下,執行:
colcon build
. install/setup.bash
ros2 run pkg01_helloworld_cpp helloworld
程序執行,在終端下將輸出文本:"hello world!"。
4.創建功能包(Python)
ros2 pkg create pkg02_helloworld_py --build-type ament_python --dependencies rclpy --node-name helloworld
5.編輯源文件
進入pkg02_helloworld_py/pkg02_helloworld_py目錄,該目錄下有一helloworld.py文件,修改文件內容如下:
import rclpydef main():# 初始化 ROS2rclpy.init()# 創建節點node = rclpy.create_node("helloworld_py_node")# 輸出文本node.get_logger().info("hello world!")# 釋放資源rclpy.shutdown()if __name__ == '__main__':main()
6.編譯執行
終端下進入到工作空間,執行如下指令:
colcon build
. install/setup.bash
ros2 run pkg02_helloworld_py helloworld
7.運行優化
每次終端中執行工作空間下的節點時,都需要調用. install/setup.bash
指令,使用不便,優化策略是,可以將該指令的調用添加進~/setup.bash
,操作格式如下:
echo "source /{工作空間路徑}/install/setup.bash" >> ~/.bashrc
示例:
echo "source /home/ros2/ws00_helloworld/install/setup.bash" >> ~/.bashrc
以后再啟動終端時,無需手動再手動刷新環境變量。
8.定向構建
colcon build --packages-select 文件名
9.功能包
功能包是ROS2應用程序的核心,但是功能包不能直接構建,必須依賴于工作空間,一個ROS2工作空間的目錄結構如下:
WorkSpace --- 自定義的工作空間。|--- build:存儲中間文件的目錄,該目錄下會為每一個功能包創建一個單獨子目錄。|--- install:安裝目錄,該目錄下會為每一個功能包創建一個單獨子目錄。|--- log:日志目錄,用于存儲日志文件。|--- src:用于存儲功能包源碼的目錄。|-- C++功能包|-- package.xml:包信息,比如:包名、版本、作者、依賴項。|-- CMakeLists.txt:配置編譯規則,比如源文件、依賴項、目標文件。|-- src:C++源文件目錄。|-- include:頭文件目錄。|-- msg:消息接口文件目錄。|-- srv:服務接口文件目錄。|-- action:動作接口文件目錄。|-- Python功能包|-- package.xml:包信息,比如:包名、版本、作者、依賴項。|-- setup.py:與C++功能包的CMakeLists.txt類似。|-- setup.cfg:功能包基本配置文件。|-- resource:資源目錄。|-- test:存儲測試相關文件。|-- 功能包同名目錄:Python源文件目錄。
另外,無論是Python功能包還是C++功能包,都可以自定義一些配置文件相關的目錄。
|-- C++或Python功能包|-- launch:存儲launch文件。|-- rviz:存儲rviz2配置相關文件。|-- urdf:存儲機器人建模文件。|-- params:存儲參數文件。|-- world:存儲仿真環境相關文件。|-- map:存儲導航所需地圖文件。|-- ......