鱼香ROS社区
    • 版块
    • 最新
    • 未解决
    • 已解决
    • 群组
    • 注册
    • 登录
    紧急通知:禁止一切关于政治&VPN翻墙等话题,发现相关帖子会立马删除封号
    提问前必看的发帖注意事项: 社区问答规则(小鱼个人)更新 | 高质量帖子发布指南

    ROS2 NAV2 获取全局地图接口不能指定获取位置

    已定时 已固定 已锁定 已移动
    Nav2
    nav2 代价地图
    1
    1
    385
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • 10373300281
      方
      最后由 编辑

      nav2 提供的service 话题/global_costmap/global_costmap定义:

      nav2_msgs/CostmapMetaData specs
      	builtin_interfaces/Time map_load_time
      		int32 sec
      		uint32 nanosec
      	builtin_interfaces/Time update_time
      		int32 sec
      		uint32 nanosec
      	string layer
      	float32 resolution
      	uint32 size_x
      	uint32 size_y
      	geometry_msgs/Pose origin
      		Point position
      			float64 x
      			float64 y
      			float64 z
      		Quaternion orientation
      			float64 x 0
      			float64 y 0
      			float64 z 0
      			float64 w 1
      
      

      从接口定义来看入参支持设置获取的地图位置和大小,但实际测试无论参数填什么都会传回整张地图
      查看了源码:

      void
      Costmap2DPublisher::costmap_service_callback(
        const std::shared_ptr<rmw_request_id_t>/*request_header*/,
        const std::shared_ptr<nav2_msgs::srv::GetCostmap::Request>/*request*/,
        const std::shared_ptr<nav2_msgs::srv::GetCostmap::Response> response)
      {
        RCLCPP_DEBUG(logger_, "Received costmap service request");
      
        // TODO(bpwilcox): Grab correct orientation information
        tf2::Quaternion quaternion;
        quaternion.setRPY(0.0, 0.0, 0.0);
      
        auto size_x = costmap_->getSizeInCellsX();
        auto size_y = costmap_->getSizeInCellsY();
        auto data_length = size_x * size_y;
        unsigned char * data = costmap_->getCharMap();
        auto current_time = clock_->now();
      
        response->map.header.stamp = current_time;
        response->map.header.frame_id = global_frame_;
        response->map.metadata.size_x = size_x;
        response->map.metadata.size_y = size_y;
        response->map.metadata.resolution = costmap_->getResolution();
        response->map.metadata.layer = "master";
        response->map.metadata.map_load_time = current_time;
        response->map.metadata.update_time = current_time;
        response->map.metadata.origin.position.x = costmap_->getOriginX();
        response->map.metadata.origin.position.y = costmap_->getOriginY();
        response->map.metadata.origin.position.z = 0.0;
        response->map.metadata.origin.orientation = tf2::toMsg(quaternion);
        response->map.data.resize(data_length);
        response->map.data.assign(data, data + data_length);
      }
      

      确实是没用使用用户填入的参数,是接口功能没实现完整吗?或者有什么接口能获取到指定位置的地图?

      1 条回复 最后回复 回复 引用 0
      • 第一个帖子
        最后一个帖子
      皖ICP备16016415号-7
      Powered by NodeBB | 鱼香ROS