ego-planner实际测试bug修改

存在问题

1)仿真里面存在点云,可以避障,但实机没有点云

run_in_xtdrone.launch中修改depth_topic的话题,将之改为

    <!-- <arg name="depth_topic" value="realsense/depth_camera/depth/image_raw"/> -->
    <arg name="depth_topic" value="camera/depth/image_rect_raw"/> 

同时在advanced_param_xtdrone.xml存在如下映射,对应grid_map.cpp中如下的订阅代码,可以得知remap这个配置是用于更改在 C++ 代码中订阅的 grid_map/depth 话题的名称,使其变成 /iris_ ( a r g d r o n e i d ) / (arg drone_id)/ (argdroneid)/(arg depth_topic)

//advanced_param_xtdrone.xml
 <remap from="~grid_map/depth" to = "/iris_$(arg drone_id)/$(arg depth_topic)"/>
//grid_map.cpp
  depth_sub_.reset(new message_filters::Subscriber<sensor_msgs::Image>(node_, "grid_map/depth", 50));
  extrinsic_sub_ = node_.subscribe<nav_msgs::Odometry>(
      "/vins_estimator/extrinsic", 10, &GridMap::extrinsicCallback, this); //sub

2)仿真里面存在点云,避障正常,实机映射点云之后,点云错误
查看各自的深度图像,可以看出仿真里面的远景是黑色的,稍微远一点的树是白的,近的树是灰色的,过远距离没有数值是黑的;
而实际的深度相机近景深,远景浅,但是比较杂
不是深度相机取反的问题
仿真:
请添加图片描述

实际:

关于仿真
关于点云,仿真深度图像很干净,点云生成很直接
在这里插入图片描述在这里插入图片描述

关于实机
前面深度图像有一点值,他就会建立点云当作障碍物

请添加图片描述
捂住深度相机时,完全黑的,相当于没有数据,就不建立障碍物点云了
请添加图片描述

结论:目前仿真和实际流程一致,但是仿真环境的深度图像干净,建立障碍物点云直观,真实情况下深度图像很有很多数值,导致前方一直会建立障碍物点云。
设想的解决方案:查看源码建立栅格地图部分,看作者是否有根据深度阈值建立栅格的设定,若有,可以把这个阈值调低,比如深度图2m深度之外就完全先不建图

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
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、付费专栏及课程。

余额充值