[具身智能-678]:ROS2 功能包 = 动态库 + 可执行节点 + launch 文件 三合一!
一、一句话终极结论绝大多数 ROS2 功能包既是动态链接库.so又是独立可执行节点程序。动态库给你写代码时调用API可执行节点直接运行就能用开箱即用launch 文件一键启动多个节点它们同时存在不冲突二、用一张表彻底分清形态是什么怎么用例子动态链接库 (.so)提供 API、算法、类、函数你写代码#include调用tf2_ros,cv_bridge,nav2_core独立可执行节点编译好的二进制程序直接ros2 run运行robot_localization,laser_filters,nav2_planner启动文件 (launch)配置脚本ros2 launch启动nav2_bringup,slam_toolbox三、逐包举例说明你马上就懂1.tf2库libtf2_ros.so→ 你写代码调用节点static_transform_publisher→ 直接运行发坐标bash运行ros2 run tf2_ros static_transform_publisher 0 0 0 0 0 0 base_link laser2.robot_localization库librobot_localization.so→ 算法核心节点ekf_node、ukf_node→ 直接运行定位融合bash运行ros2 run robot_localization ekf_node --ros-args ...3.Nav2库libnav2_core.so、libnav2_controller.so→ 路径规划算法节点nav2_planner、nav2_controller、nav2_recoveries直接运行不用写代码4.cv_bridge纯库libcv_bridge.so没有可执行节点只给你代码调用5.laser_filters库滤波算法节点scan_to_scan_filter_chain→ 直接运行过滤激光6.slam_toolbox库SLAM 算法节点slam_toolbox→ 直接运行建图7.MoveIt2库运动学、轨迹算法节点move_group→ 直接运行控制机械臂四、最关键的底层真相你必须懂1.功能包 库 工具 节点一个 ROS2 包里面有.cpp源码 → 编译成.so 动态库有main()函数 → 编译成可执行节点有.launch.py→ 启动脚本2.库给开发者用节点给使用者用你写算法、二次开发→ 调用.so 库你直接跑功能→ 运行可执行节点3.所有库都是动态链接库所有 ROS2 功能包编译出来都是.so内存共享不浪费空间你的节点程序运行时自动加载五、最直白比喻秒懂ROS2 功能包 手机 APP动态库 APP 的内部功能代码可执行节点 APP 图标点开就能用launch 一键打开多个 APP你可以点开 APP 直接用运行节点也可以在自己的程序里调用 APP 功能链接库六、最终总结背下来ROS2 功能包 动态库 可执行节点 launch库给开发者写代码调用节点直接运行开箱即用所有库都是 .so 动态链接库你的节点程序既可以调用库也可以和其他节点通信