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插件
  • 包含launchmapsparamsrvizurdfworld等配置文件
  • HasNodeParams:检查配置参数是否有某个节点的参数配置
  • ParseMultiRobotPose:解析多个机器人位置
  • ReplaceString:修改配置文件里面的某些字符串
  • RewrittenYaml:重写配置文件里面的某些参数
  • simple_action_server.hpp

    • ServiceClient:ROS2服务的简单包装器模板类
      • invoke:调用,返回结果智能指针
      • invoke:调用,返回成功与否,布尔类型结果
      • wait_for_service:等待服务可达
      • getServiceName:获取服务名
  • service_client.hpp

    • SimpleActionServer:ROS2动作的简单包装器模板类
      • SimpleActionServer:构造函数重要属性
        • execute_callback:执行回调
        • completion_callback:完成回调
      • handle_goal:处理请求,永远接受,除非服务未启
      • handle_cancel:处理取消
      • handle_accepted:处理接受,调用work
      • work:函数内调用execute_callbackcompletion_callbackaccept_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:获取当前任务ID
      • get_pending_goal:获取待定任务
      • is_cancel_requested:是否有取消命令到来
      • terminate_all:终止所有任务
      • terminate_current:终止当前任务
      • succeeded_current:设置当前任务完成
      • publish_feedback:发布反馈信息
  • string_utils.hpp

    • strip_leading_slash:去掉前导斜线,用于topic名称切割
    • split:字符串分割
  • robot_utils.hpp

    • getCurrentPose:获取当前位姿
    • transformPoseInTargetFrame:获取目标帧位姿
    • getTransform:获取从源坐标系到目标坐标系的变换,仅适用于在源坐标系和目标坐标系之间进行变换,不考虑时间戳信息
    • getTransform:获取从源坐标系到目标坐标系的变换。该函数提供了源坐标系的时间戳和目标坐标系的时间戳,会考虑源坐标系和目标坐标系之间的时间偏差,并在给定的容忍度范围内查找最近的变换。
    • validateTwist:校验速度指令数据是否合法
  • odometry_utils.hpp:里程计平滑器,订阅odom话题,使用简单的移动平均值做的平滑器

    • OdomSmoother:构造函数
    • getTwist:获取twist
    • getTwistStamped:获取待时间戳的twist
    • odomCallback:话题回调,调用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:构造函数,调用printLifecycleNodeNotificationregister_rcl_preshutdown_callback
    • ~LifecycleNode:析构函数,调用runCleanups,移除预关闭回调
    • add_parameter:添加参数,声明没有整数或浮点范围限制的参数
    • add_parameter:添加参数,声明有浮点范围限制的参数
    • add_parameter:添加参数,声明有整数范围限制的参数
    • shared_from_this:获取当前实例的共享指针
    • on_error:错误回调
    • on_rcl_preshutdown:在我们的上下文关闭之前执行预关闭活动。请注意,这与我们的 Context 的关闭顺序有关,而不是生命周期节点状态机。 调用runCleanupsdestroyBond
    • createBond:创建与生命周期管理器的绑定连接
    • destroyBond:销毁与生命周期管理器的绑定连接
    • printLifecycleNodeNotification:打印生命周期节点的通知
    • register_rcl_preshutdown_callback:为该节点的 rcl 上下文注册我们的预关闭回调
      • 回调在该节点的上下文关闭之前触发。
      • 请注意,这与生命周期状态机没有直接关系。
      • 添加绑定回调on_rcl_preshutdown
    • runCleanups:清理
      • 如果节点激活状态,调用节点的deactivate方法
      • 如果节点未激活状态,调用节点的cleanup方法
  • 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:获取状态
  • 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.cppnav2_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:花费时间,返回秒
  • costmap.hpp:代价地图
    • Costmap:代价地图类
      • set_static_map:设置静态代价地图
      • set_test_costmap:设置测试代价地图
      • get_costmap:获取代价地图
      • get_properties:获取代价地图配置参数
      • is_free:获取某些坐标是否没有障碍物
      • is_free:获取代价地图中某个索引是否没有障碍物
  • 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_CONFIGURETRANSITION_ACTIVATE
        • 调用createBondTimer
      • shutdown:取消激活,清理和关闭所有管理节点
        • 调用destroyBondTimershutdownAllNodesdestroyLifecycleServiceClients
      • reset:重置所有管理节点
        • 调用changeStateForAllNodes,修改节点状态TRANSITION_DEACTIVATETRANSITION_CLEANUP
        • 注意是逆序更改节点状态,跟激活相反
      • pause:暂停所有管理节点
        • 调用destroyBondTimer
        • 调用changeStateForAllNodes,修改节点状态TRANSITION_DEACTIVATE
      • resume:恢复所有管理节点
        • 调用changeStateForAllNodes,修改节点状态TRANSITION_ACTIVATE
        • 调用createBondTimer
      • onRclPreshutdown:上下文关闭回调,调用destroyBondTimer,属性重置
      • createLifecycleServiceClients:创建所有管理的节点的生命周期服务客户端
      • shutdownAllNodes:关闭所有管理节点
        • 调用changeStateForAllNodes,依次修改节点状态TRANSITION_DEACTIVATETRANSITION_CLEANUPTRANSITION_UNCONFIGURED_SHUTDOWN
      • destroyLifecycleServiceClients:销毁所有管理的节点的生命周期服务客户端,遍历节点,调用nav2_util::LifecycleServiceClientreset方法
      • createBondTimer:创建连接定时器,创建连接检测定时器,绑定checkBondConnections
      • createBondConnection:连接定时器,初始化bond::Bond
      • destroyBondTimer:销毁连接定时器,调用定时器cancelreset
      • checkBondConnections:支持检查连接的功能,如果出现无响应的情况,将关闭系统
        • 遍历管理节点,调用nav2_util::LifecycleServiceClientisBroken方法,如果有一个节点宕掉,调用reset关闭所有节点
        • 如果配置了恢复,创建一个定时器,绑定checkBondRespawnConnection
      • checkBondRespawnConnection:支持检查键连接的功能,如果出现无响应的情况,将恢复系统
        • 调用nav2_util::LifecycleServiceClientget_state方法,查看存活的节点和管理的节点数
        • 一致的话,调用startup
        • 不一致,查看是否恢复超时,重置超时和定时器
      • changeStateForNode:修改一个节点的状态
        • 调用nav2_util::LifecycleServiceClientchange_stateget_state方法
        • 如果是激活状态,调用createBondConnection
      • changeStateForAllNodes:一次性修改所有节点的状态
        • 遍历管理节点,依次调用changeStateForNode
        • hard_change参数,如果为True,如果一个节点失败了,跳过,否则为False,一个节点转变失败,就返回失败
      • message:日志输出
      • CreateActiveDiagnostic:生成活动状态的诊断信息
      • registerRclPreshutdownCallback:注册上下文关闭回调,获取上下文,绑定onRclPreshutdown
  • lifecycle_manager_client.hpp

    • LifecycleManagerClient:生命周期管理客户端,用来向 LifecycleManager 发送请求控制导航模块的生命周期状态。 注意区分nav2_util::LifecycleServiceClient
      • LifecycleManagerClient:构造函数
        • 实例化节点名称/manage_nodesnav2_util::ServiceClient客户端
        • 实例化节点名称/is_activenav2_util::ServiceClient客户端
      • startup:启动,调用callService
      • shutdown:关闭,调用callService
      • pause:暂停,调用callService
      • resume:恢复,调用callService
      • reset:重置,调用callService
      • is_active:生命周期管理服务是否激活状态,调用nav2_util::ServiceClientinvoke
      • callService:调用startupshutdown等等服务,调用nav2_util::ServiceClientinvoke

rviz插件工具包

results matching ""

    No results matching ""