ego-planner开源代码之default.rviz介绍&分析

74 篇文章 17 订阅

1. 源由

ego-planner开源代码之数据流分析工作的延续。

  • 对于算法逻辑的数据流,在前面已经初步做了整理,部分主要模块已经有比较清晰的认识。
  • 从数据流的角度,理解模块的工作逻辑,还是非常直观、简洁的。

如何从系统的角度,思考问题,尤其是一个系统由众多模块组成的复杂体系,要能够整体的理解,反而并不能一下子上手。

反之,若能够将整个系统作为一个模块来理解,入参和出参分别如何对应和理解呢?

2. RViz 配置文件

这部分是 RViz 配置文件的内容,它定义了 RViz 的界面布局、显示的内容、工具栏和其他设置。

下面将其分块解释,并说明每一块的含义:

2.1 Panels

定义了 RViz 界面上的面板及其配置。每个面板可以显示不同的信息和功能。

Panels:
  - Class: rviz/Displays
    Help Height: 0
    Name: Displays
    Property Tree Widget:
      Expanded:
        - /Planning1
        - /Mapping1
        - /Mapping1/simulation_map1/Autocompute Value Bounds1
      Splitter Ratio: 0.5
    Tree Height: 170
  - Class: rviz/Selection
    Name: Selection
  - Class: rviz/Tool Properties
    Expanded:
      - /2D Pose Estimate1
      - /2D Nav Goal1
      - /Publish Point1
    Name: Tool Properties
    Splitter Ratio: 0.588679016
  - Class: rviz/Views
    Expanded:
      - /Current View1
      - /ThirdPersonFollower1
    Name: Views
    Splitter Ratio: 0.5
  - Class: rviz/Time
    Experimental: false
    Name: Time
    SyncMode: 0
    SyncSource: simulation_map
  • Class: 面板的类型,例如 rviz/Displays 表示显示面板。
  • Name: 面板的名称。
  • Expanded: 面板中子项的展开状态。
  • Splitter Ratio: 面板中分割器的比例,控制面板的大小分配。
  • Help Height: 帮助区域的高度。
  • Tree Height: 属性树的高度。
  • Experimental: 表示是否使用实验性功能。
  • SyncModeSyncSource: 时间面板的同步模式和同步源。

2.2 Toolbars

定义了 RViz 工具栏的样式。

Toolbars:
  toolButtonStyle: 2
  • toolButtonStyle: 工具按钮的样式,2 通常表示图标和文本一起显示。

2.3 Visualization Manager

定义了 RViz 的可视化管理器设置,包括显示的内容和工具。

Visualization Manager:
  Class: ""
  Displays:
    - Class: rviz/Axes
      Enabled: true
      Length: 1
      Name: Axes
      Radius: 0.100000001
      Reference Frame: <Fixed Frame>
      Value: true
    - Alpha: 0.5
      Cell Size: 1
      Class: rviz/Grid
      Color: 160; 160; 164
      Enabled: true
      Line Style:
        Line Width: 0.0299999993
        Value: Lines
      Name: Grid
      Normal Cell Count: 0
      Offset:
        X: 0
        Y: 0
        Z: 0
      Plane: XY
      Plane Cell Count: 40
      Reference Frame: <Fixed Frame>
      Value: true
    ...
  • Class: 用于表示显示的类型,例如 rviz/Axesrviz/Grid
  • Enabled: 是否启用该显示项。
  • Name: 显示项的名称。
  • Alpha: 显示项的透明度。
  • Color: 颜色设置。
  • Topic: 用于显示的 ROS 话题。
  • SizeStyle: 控制显示的大小和样式。

2.4 Tools

定义了 RViz 工具栏中包含的工具及其设置。

Tools:
  - Class: rviz/Interact
    Hide Inactive Objects: true
  - Class: rviz/Select
  - Class: rviz/FocusCamera
  - Class: rviz/Measure
  - Class: rviz/SetInitialPose
    Topic: /initialpose
  - Class: rviz/SetGoal
    Topic: /move_base_simple/goal
  - Class: rviz/PublishPoint
    Single click: true
    Topic: /clicked_point
  • Class: 工具的类型,例如 rviz/Interactrviz/Select
  • Name: 工具的名称。
  • Hide Inactive Objects: 工具的特性设置,例如是否隐藏非活动对象。
  • Topic: 相关的 ROS 话题,用于工具的操作。

2.5 Views

定义了 RViz 的视图设置,包括当前视图和保存的视图。

Views:
  Current:
    Class: rviz/ThirdPersonFollower
    Distance: 27.7380829
    ...
  Saved:
    - Class: rviz/ThirdPersonFollower
      Distance: 17.4853859
      ...
  • Class: 视图的类型,例如 rviz/ThirdPersonFollower
  • Distance: 相机距离。
  • Focal Point: 相机对焦点的坐标。
  • PitchYaw: 相机的俯仰角和偏航角。

2.6 Window Geometry

定义了 RViz 窗口的几何属性,包括窗口的大小和位置。

Window Geometry:
  Displays:
    collapsed: true
  Height: 1007
  Width: 1180
  X: 442
  Y: 123
  ...
  • HeightWidth: 窗口的高度和宽度。
  • XY: 窗口的屏幕位置。
  • collapsed: 面板是否折叠。

3. 总结

这些参数定义了 RViz 的整个界面配置,包括面板、工具栏、可视化管理器、工具、视图和窗口几何。

通过这些设置,可以自定义 RViz 的显示布局、工具和视图,以适应特定的应用需求。

Ego-Planner是一个基于ROS的路径规划器,它可以在给定的地图和起点、终点信息下,生成一条可行的路径。以下是Ego-Planner的代码框架: 1. 首先需要定义一个EgoPlanner类,其中包含了一些必要的成员变量和函数。 ```c++ class EgoPlanner { private: ros::NodeHandle nh_; ros::Subscriber sub_map_; ros::Subscriber sub_pose_; ros::Subscriber sub_goal_; ros::Publisher pub_path_; nav_msgs::OccupancyGrid map_; geometry_msgs::PoseStamped start_; geometry_msgs::PoseStamped goal_; public: EgoPlanner(); // 构造函数 ~EgoPlanner(); // 析构函数 void mapCallback(const nav_msgs::OccupancyGrid::ConstPtr& msg); // 地图回调函数 void poseCallback(const geometry_msgs::PoseStamped::ConstPtr& msg); // 当前位置回调函数 void goalCallback(const geometry_msgs::PoseStamped::ConstPtr& msg); // 目标位置回调函数 void plan(); // 路径规划函数 }; ``` 2. 在构造函数中,需要完成ROS节点的初始化、订阅和发布话题的设置。 ```c++ EgoPlanner::EgoPlanner() { nh_ = ros::NodeHandle("~"); sub_map_ = nh_.subscribe("map", 1, &EgoPlanner::mapCallback, this); sub_pose_ = nh_.subscribe("pose", 1, &EgoPlanner::poseCallback, this); sub_goal_ = nh_.subscribe("goal", 1, &EgoPlanner::goalCallback, this); pub_path_ = nh_.advertise<nav_msgs::Path>("path", 1); } ``` 3. 在地图、当前位置和目标位置的回调函数中,需要将接收到的信息保存到对应的成员变量中。 ```c++ void EgoPlanner::mapCallback(const nav_msgs::OccupancyGrid::ConstPtr& msg) { map_ = *msg; } void EgoPlanner::poseCallback(const geometry_msgs::PoseStamped::ConstPtr& msg) { start_ = *msg; } void EgoPlanner::goalCallback(const geometry_msgs::PoseStamped::ConstPtr& msg) { goal_ = *msg; } ``` 4. 在路径规划函数中,需要调用路径规划算法,生成一条可行的路径,并将路径发布出去。 ```c++ void EgoPlanner::plan() { // 调用路径规划算法,生成一条可行的路径 std::vector<geometry_msgs::PoseStamped> path = pathPlanning(map_, start_, goal_); // 将路径发布出去 nav_msgs::Path path_msg; path_msg.header.frame_id = "map"; path_msg.header.stamp = ros::Time::now(); path_msg.poses = path; pub_path_.publish(path_msg); } ``` 5. 在主函数中,创建EgoPlanner对象,并进入ROS循环。 ```c++ int main(int argc, char** argv) { ros::init(argc, argv, "ego_planner"); EgoPlanner planner; ros::Rate rate(10); while (ros::ok()) { planner.plan(); ros::spinOnce(); rate.sleep(); } return 0; } ``` 以上就是Ego-Planner的代码框架,其中路径规划算法需要根据具体情况进行选择和实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值