datetime:2024/01/10 18:18
author:nzb
导航
https://github.com/ros-planning/navigation2.git
分支:humble
节点:3ed4c2d
通用插件系统管理
nav2_bringup
| 启动入口nav2_common
| 公共功能包nav2_msgs
| 通信相关消息定义nav2_util
| 常用工具nav2_lifecycle_manager
|节点生命周期管理器nav2_rviz_plugins
| RVIZ插件
nav2_bringup
- 包含
launch
、maps
、params
、rviz
、urdf
、world
等配置文件
nav2_common
HasNodeParams
:检查配置参数是否有某个节点的参数配置ParseMultiRobotPose
:解析多个机器人位置ReplaceString
:修改配置文件里面的某些字符串RewrittenYaml
:重写配置文件里面的某些参数
nav2_util
simple_action_server.hpp
- ServiceClient:ROS2服务的简单包装器模板类
invoke
:调用,返回结果智能指针invoke
:调用,返回成功与否,布尔类型结果wait_for_service
:等待服务可达getServiceName
:获取服务名
- ServiceClient:ROS2服务的简单包装器模板类
service_client.hpp
- SimpleActionServer:ROS2动作的简单包装器模板类
SimpleActionServer
:构造函数重要属性execute_callback
:执行回调completion_callback
:完成回调
handle_goal
:处理请求,永远接受,除非服务未启handle_cancel
:处理取消handle_accepted
:处理接受,调用work
work
:函数内调用execute_callback
、completion_callback
、accept_pending_goal
activate
:激活deactivate
:取消激活is_running
:是否运行中is_server_active
:服务是否激活is_preempt_requested
:是否抢占式请求accept_pending_goal
:接受新任务terminate_pending_goal
:终止待定任务get_current_goal
:获取当前任务get_current_goal_id
:获取当前任务IDget_pending_goal
:获取待定任务is_cancel_requested
:是否有取消命令到来terminate_all
:终止所有任务terminate_current
:终止当前任务succeeded_current
:设置当前任务完成publish_feedback
:发布反馈信息
- SimpleActionServer:ROS2动作的简单包装器模板类
string_utils.hpp
strip_leading_slash
:去掉前导斜线,用于topic名称切割split
:字符串分割
robot_utils.hpp
getCurrentPose
:获取当前位姿transformPoseInTargetFrame
:获取目标帧位姿getTransform
:获取从源坐标系到目标坐标系的变换,仅适用于在源坐标系和目标坐标系之间进行变换,不考虑时间戳信息getTransform
:获取从源坐标系到目标坐标系的变换。该函数提供了源坐标系的时间戳和目标坐标系的时间戳,会考虑源坐标系和目标坐标系之间的时间偏差,并在给定的容忍度范围内查找最近的变换。validateTwist
:校验速度指令数据是否合法
odometry_utils.hpp
:里程计平滑器,订阅odom
话题,使用简单的移动平均值做的平滑器- OdomSmoother:构造函数
getTwist
:获取twistgetTwistStamped
:获取待时间戳的twistodomCallback
:话题回调,调用updateState
updateState
:当获取到新数据的时候,使用移动平均值更新数据
occ_grid_values.hpp
:占用网格,数据常量OCC_GRID_UNKNOWN
:占用未知OCC_GRID_FREE
:未占用OCC_GRID_OCCUPIED
:占用
node_utils.hpp
sanitize_node_name
:替换潜在节点名称中的无效字符,把不是字母数字的字符替换成_
add_namespaces
:添加命名空间generate_internal_node_name
:生成内部节点名称time_to_string
:生成伪随机数字字符串generate_internal_node
:生成节点declare_parameter_if_not_declared
:声明静态 ROS2 参数并将其设置为给定值(如果尚未声明)declare_parameter_if_not_declared
:如果尚未声明,则声明具有给定类型的静态 ROS2 参数get_plugin_type_param
:获取所选节点的插件类型及其插件copy_all_parameters
:将所有参数从一个节点(父节点)复制到另一个节点(子节点)的方法
node_thread.hpp
:用于处理节点回调构造函数的后台线程NodeThread(rclcpp::node_interfaces::NodeBaseInterface::SharedPtr node_base)
:用于处理节点回调构造函数的后台线程NodeThread(rclcpp::executors::SingleThreadedExecutor::SharedPtr executor)
:处理执行器回调构造函数的后台线程
line_iterator.hpp
:实现 Bresenham 算法的光线追踪的迭代器LineIterator(int x0, int y0, int x1, int y1)
:构造函数,接收起点和终点的坐标作为参数。isValid()
:检查迭代器是否有效,即是否仍然有点可迭代。advance()
:将迭代器前进到下一个点。getX()
:获取当前点的 X 坐标。getY()
:获取当前点的 Y 坐标。getX0()
:获取起点的 X0 坐标。getY0()
:获取起点的 Y0 坐标。getX1()
:获取终点的 X1 坐标。getY1()
:获取终点的 Y1 坐标。
lifecycle_node.hpp
:生命周期节点包装器(继承于rclcpp_lifecycle::LifecycleNode
),可满足常见的 Nav2 需求,例如操作参数- LifecycleNode:构造函数,调用
printLifecycleNodeNotification
、register_rcl_preshutdown_callback
~LifecycleNode
:析构函数,调用runCleanups
,移除预关闭回调add_parameter
:添加参数,声明没有整数或浮点范围限制的参数add_parameter
:添加参数,声明有浮点范围限制的参数add_parameter
:添加参数,声明有整数范围限制的参数shared_from_this
:获取当前实例的共享指针on_error
:错误回调on_rcl_preshutdown
:在我们的上下文关闭之前执行预关闭活动。请注意,这与我们的 Context 的关闭顺序有关,而不是生命周期节点状态机。 调用runCleanups
、destroyBond
createBond
:创建与生命周期管理器的绑定连接destroyBond
:销毁与生命周期管理器的绑定连接printLifecycleNodeNotification
:打印生命周期节点的通知register_rcl_preshutdown_callback
:为该节点的 rcl 上下文注册我们的预关闭回调- 回调在该节点的上下文关闭之前触发。
- 请注意,这与生命周期状态机没有直接关系。
- 添加绑定回调
on_rcl_preshutdown
runCleanups
:清理- 如果节点激活状态,调用节点的
deactivate
方法 - 如果节点未激活状态,调用节点的
cleanup
方法
- 如果节点激活状态,调用节点的
- LifecycleNode:构造函数,调用
lifecycle_service_client.hpp
:生命周期服务客户端,使用nav2_util::service_client.hpp::SimpleActionServer
创建- LifecycleServiceClient:构造函数,如果提供了节点指针,直接初始化一个节点,否则使用
nav2_util::node_utils.hpp::generate_internal_node
自动生成一个节点change_state
:更改状态,可以设置超时时间change_state
:更改状态,不可以设置超时时间get_state
:获取状态
- LifecycleServiceClient:构造函数,如果提供了节点指针,直接初始化一个节点,否则使用
lifecycle_utils.hpp
:生命周期工具startup_lifecycle_nodes
:按顺序将给定生命周期节点转换为ACTIVATED
状态,接收节点名称列表startup_lifecycle_nodes
:按顺序将给定生命周期节点转换为ACTIVATED
状态,接收以:
拼接的字符串,分割后调用上面startup_lifecycle_nodes
函数reset_lifecycle_nodes
:按顺序将给定生命周期节点转换为UNCONFIGURED
状态,接收节点名称列表reset_lifecycle_nodes
:按顺序将给定生命周期节点转换为UNCONFIGURED
状态,接收以:
拼接的字符串,分割后调用上面reset_lifecycle_nodes
函数lifecycle_utils.cpp
#define RETRY(fn, retries)
:重试startupLifecycleNode
:使用nav2_util::lifecycle_service_client.hpp::LifecycleServiceClient.change_state
方法,状态由TRANSITION_CONFIGURE
->TRANSITION_ACTIVATE
resetLifecycleNode
:使用nav2_util::lifecycle_service_client.hpp::LifecycleServiceClient.change_state
方法,状态由TRANSITION_DEACTIVATE
->TRANSITION_CLEANUP
lifecycle_bringup_commandline.cpp
:nav2_util
入口文件geometry_utils.hpp
:几何工具orientationAroundZAxis
:绕Z轴的四元数转换euclidean_distance
:欧氏距离(2d、3d)min_by
:在迭代器中查找计算值最小的元素,比如:一组点到目标点最短距离first_after_integrated_distance
:查找迭代器中积分距离大于比较值的第一个元素calculate_path_length
:从提供的索引开始计算提供的路径的剩余长度
execution_timer.hpp
:执行时间- ExecutionTimer:执行时间类,测量调用 start 和 end 之间代码的执行时间
start
:开始时间end
:结束时间elapsed_time
:花费时间,返回纳秒elapsed_time_in_seconds
:花费时间,返回秒
- ExecutionTimer:执行时间类,测量调用 start 和 end 之间代码的执行时间
costmap.hpp
:代价地图- Costmap:代价地图类
set_static_map
:设置静态代价地图set_test_costmap
:设置测试代价地图get_costmap
:获取代价地图get_properties
:获取代价地图配置参数is_free
:获取某些坐标是否没有障碍物is_free
:获取代价地图中某个索引是否没有障碍物
- Costmap:代价地图类
nav2_lifecycle_manager
lifecycle_manager.hpp
- LifecycleManager:生命周期管理类
LifecycleManager
:构造函数- 声明和获取相关参数
- 调用
registerRclPreshutdownCallback
- 创建
节点名称/manage_nodes
服务,处理函数为managerCallback
- 创建
节点名称/is_active
服务,处理函数为isActiveCallback
- 创建
init_timer_
定时器- 调用
createLifecycleServiceClients
,遍历和创建管理的所有节点的生命周期服务客户端nav2_util::LifecycleServiceClient
- 如果配置了
autostart_
,重新创建init_timer_
定时器,调用startup
- 实例化
rclcpp::executors::SingleThreadedExecutor
,启动线程nav2_util::NodeThread
,运行执行器
- 调用
managerCallback
:管理服务回调request->command==STARTUP
:调用startup
request->command==RESET
:调用reset
request->command==SHUTDOWN
:调用shutdown
request->command==PAUSE
:调用pause
request->command==RESUME
:调用resume
isActiveCallback
:如果管理的所有节点都激活了,激活服务回调,返回system_active_
的值startup
:启动所有管理节点- 调用
changeStateForAllNodes
,修改节点状态TRANSITION_CONFIGURE
、TRANSITION_ACTIVATE
- 调用
createBondTimer
- 调用
shutdown
:取消激活,清理和关闭所有管理节点- 调用
destroyBondTimer
、shutdownAllNodes
、destroyLifecycleServiceClients
- 调用
reset
:重置所有管理节点- 调用
changeStateForAllNodes
,修改节点状态TRANSITION_DEACTIVATE
、TRANSITION_CLEANUP
- 注意是逆序更改节点状态,跟激活相反
- 调用
pause
:暂停所有管理节点- 调用
destroyBondTimer
- 调用
changeStateForAllNodes
,修改节点状态TRANSITION_DEACTIVATE
- 调用
resume
:恢复所有管理节点- 调用
changeStateForAllNodes
,修改节点状态TRANSITION_ACTIVATE
- 调用
createBondTimer
- 调用
onRclPreshutdown
:上下文关闭回调,调用destroyBondTimer
,属性重置createLifecycleServiceClients
:创建所有管理的节点的生命周期服务客户端shutdownAllNodes
:关闭所有管理节点- 调用
changeStateForAllNodes
,依次修改节点状态TRANSITION_DEACTIVATE
、TRANSITION_CLEANUP
、TRANSITION_UNCONFIGURED_SHUTDOWN
- 调用
destroyLifecycleServiceClients
:销毁所有管理的节点的生命周期服务客户端,遍历节点,调用nav2_util::LifecycleServiceClient
的reset
方法createBondTimer
:创建连接定时器,创建连接检测定时器,绑定checkBondConnections
createBondConnection
:连接定时器,初始化bond::Bond
destroyBondTimer
:销毁连接定时器,调用定时器cancel
和reset
checkBondConnections
:支持检查连接的功能,如果出现无响应的情况,将关闭系统- 遍历管理节点,调用
nav2_util::LifecycleServiceClient
的isBroken
方法,如果有一个节点宕掉,调用reset
关闭所有节点 - 如果配置了恢复,创建一个定时器,绑定
checkBondRespawnConnection
- 遍历管理节点,调用
checkBondRespawnConnection
:支持检查键连接的功能,如果出现无响应的情况,将恢复系统- 调用
nav2_util::LifecycleServiceClient
的get_state
方法,查看存活的节点和管理的节点数 - 一致的话,调用
startup
- 不一致,查看是否恢复超时,重置超时和定时器
- 调用
changeStateForNode
:修改一个节点的状态- 调用
nav2_util::LifecycleServiceClient
的change_state
和get_state
方法 - 如果是激活状态,调用
createBondConnection
- 调用
changeStateForAllNodes
:一次性修改所有节点的状态- 遍历管理节点,依次调用
changeStateForNode
hard_change
参数,如果为True,如果一个节点失败了,跳过,否则为False,一个节点转变失败,就返回失败
- 遍历管理节点,依次调用
message
:日志输出CreateActiveDiagnostic
:生成活动状态的诊断信息registerRclPreshutdownCallback
:注册上下文关闭回调,获取上下文,绑定onRclPreshutdown
- LifecycleManager:生命周期管理类
lifecycle_manager_client.hpp
- LifecycleManagerClient:生命周期管理客户端,用来向
LifecycleManager
发送请求控制导航模块的生命周期状态。 注意区分nav2_util::LifecycleServiceClient
LifecycleManagerClient
:构造函数- 实例化
节点名称/manage_nodes
的nav2_util::ServiceClient
客户端 - 实例化
节点名称/is_active
的nav2_util::ServiceClient
客户端
- 实例化
startup
:启动,调用callService
shutdown
:关闭,调用callService
pause
:暂停,调用callService
resume
:恢复,调用callService
reset
:重置,调用callService
is_active
:生命周期管理服务是否激活状态,调用nav2_util::ServiceClient
的invoke
callService
:调用startup
、shutdown
等等服务,调用nav2_util::ServiceClient
的invoke
- LifecycleManagerClient:生命周期管理客户端,用来向
nav2_rviz_plugins
rviz插件工具包