ros2_control中的controller manager 和 Nav2 中的 lifecycle_manager

这一节补一下前面填的坑,介绍一下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\

### 关于 `nav2_smoother` 的使用与配置 #### 背景介绍 `nav2_smoother` 是 ROS 2 导航堆栈(Navigation2中的一个重要组件,用于平滑控制器发出的速度指令。它通过调整机器人接收到的运动命令来减少抖动并提高轨迹执行的质量[^1]。 在 Navigation2 中,`velocity_smoother` `cmd_vel_mux` 组件共同协作完成这一目标。具体来说,`velocity_smoother` 接收来自规划器或控制器的速度指令,并对其进行滤波平滑处理后再发布给下游节点[^3]。 #### 配置方法 为了正确配置使用 `nav2_smoother`,可以按照以下方式操作: 1. **启动导航堆栈** 使用标准的 Navigation2 启动文件加载整个导航系统。例如,在仿真环境中可以通过以下命令启动 TurtleBot3 的导航功能: ```bash ros2 launch nav2_bringup tb3_simulation_launch.py default_bt_xml_filename:=/path/to/bt.xml ``` 这里指定了行为树 XML 文件路径以支持自定义逻辑[^2]。 2. **设置参数** 参数对于 `nav2_smoother` 的表现至关重要。以下是常见的几个关键参数及其作用: - `max_velocity`: 设置允许的最大线性角速度。 - `min_velocity`: 定义最小可接受的速度阈值。 - `frequency`: 平滑器运行频率,默认通常是 20 Hz 或更高。 - `accel_lim_x`, `accel_lim_theta`: 加速度限制分别对应线加速度角加速度。 参考文档中提到的地图服务器 (`map_server`)、生命周期管理器 (`lifecycle_manager`) AMCL 等模块也需要同步配置相应的 YAML 文件[^4]。这些模块共享相同的上下文环境以便协同工作。 3. **Remapping Topics** 默认情况下,`smooth_cmd_vel` 主题会被重新映射至 `cmd_vel_mux` 输入端口之一。这一步骤确保经过平滑后的速度数据能够传递到最终驱动层[^5]。 修改 remap 规则可以在启动脚本中实现,比如这样: ```xml <remap from="~/smooth_cmd_vel" to="/cmd_vel"/> ``` #### 示例代码片段 下面展示了一个简单的 Python 脚本来动态更新某些重要参数: ```python import rclpy from rcl_interfaces.msg import ParameterValue, SetParametersResult from dynamic_reconfigure.client import Client as DynamicReconfigureClient def update_parameters(): node = rclpy.create_node('smoother_param_updater') client = DynamicReconfigureClient(node, '/controller_server/parameter_updates') params = [ {'name': 'max_velocity', 'value': 0.8}, {'name': 'min_velocity', 'value': 0.1} ] config = {} for p in params: value = ParameterValue() if isinstance(p['value'], float): value.type = ParameterValue.DOUBLE_VALUE value.double_value = p['value'] elif isinstance(p['value'], int): value.type = ParameterValue.INTEGER_VALUE value.integer_value = p['value'] config[p['name']] = value result = client.update_configuration(config) if __name__ == '__main__': rclpy.init() try: update_parameters() finally: rclpy.shutdown() ``` 此脚本展示了如何利用 `dynamic_reconfigure` 动态修改正在运行的服务实例上的数值属性。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mubibaiwhale

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值