这一节补一下前面填的坑,介绍一下ros2_control中的controller manager 和 Nav2 中的 lifecycle_manager
1.相似点
这两个manager的相似点可以用下面的状态机表示:
manager都有下面四个状态:
Unconfigured
Inactive
Active
Finalized
还有6个转换过程,它们是在从一个状态转换到另一个状态期间执行的任务:
on_configure
on_cleanup
on_activate
on_deactivate
on_shutdown
on_error
而转换过程只能有两个结果:SUCCESS" or "FAILURE
2. ros2_control中的 controller manager
controller manager的工作是管理控制器生命周期的所有相关方面,从加载到卸载控制器以及两者之间
使用 ros2 control list_controllers 可以查看环境中运行的controller
使用 ros2 control set_controller_state forward_position_controller start 可以开始forward_position_controller
使用 ros2 control load_controller forward_position_controller 可以加载forward_position_controller
使用 ros2 control set_controller_state forward_position_controller configure 可以配置forward_position_controller
当然,一般直接使用
ros2 run controller_manager spawner my_controller_name --controller-type forward_position_controller/JointStateBroadcaster
可以直接一步配置到位
配置好forward_position_controller,通过话题可以直接控制关节
ros2 topic pub /forward_position_controller/commands std_msgs/msg/Float64MultiArray "data:
- -0.79
- -0.79" -1
3. Nav2 中的 lifecycle_manager
Nav2中的几个节点(如map_server、amcl、planner_server和controller_server)等托管节点以未配置状态(Unconfigured)启动。要从未配置状态转换到活动状态,节点需要一个外部代理
Lifecycle nodes 将它们移动到 active 这个新状态, Nav2的 Lifecycle nodes更改托管节点的状态,以实现导航堆栈的受控启动、关闭、重置、暂停或恢复
通过 ros2 service type /lifecycle_manager_mapper/manage_nodes 查看节点的类型
使用命令行可以管理节点状态 ros2 service call /lifecycle_manager_mapper/manage_nodes nav2_msgs/srv/ManageLifecycleNodes command:\ 1\