/* * Copyright 2017 The Cartographer Authors * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef CARTOGRAPHER_IO_SUBMAP_PAINTER_H_ #define CARTOGRAPHER_IO_SUBMAP_PAINTER_H_ #include "Eigen/Geometry" #include "cairo/cairo.h" #include "cartographer/io/image.h" #include "cartographer/io/proto_stream_deserializer.h" #include "cartographer/mapping/id.h" #include "cartographer/mapping/proto/serialization.pb.h" #include "cartographer/mapping/value_conversion_tables.h" #include "cartographer/transform/rigid_transform.h" extern int c[4000000]; extern int a[4000000]; namespace cartographer { namespace io { struct PaintSubmapSlicesResult { PaintSubmapSlicesResult(::cartographer::io::UniqueCairoSurfacePtr surface, Eigen::Array2f origin) : surface(std::move(surface)), origin(origin) {} ::cartographer::io::UniqueCairoSurfacePtr surface; // Top left pixel of 'surface' in map frame. Eigen::Array2f origin; }; // 地图的完整信息, 栅格数据是Cairo格式的 struct SubmapSlice { // 构造时使surface为指向nullptr SubmapSlice() : surface(::cartographer::io::MakeUniqueCairoSurfacePtr(nullptr)) {} // Texture data. int width; int height; int version; double resolution; ::cartographer::transform::Rigid3d slice_pose; ::cartographer::io::UniqueCairoSurfacePtr surface; // surface是图形库cairo的image画布 // Pixel data used by 'surface'. Must outlive 'surface'. std::vector cairo_data; std::vector observer; //jzq 摄像头观测过的区域 // Metadata. ::cartographer::transform::Rigid3d pose; int metadata_version = -1; }; //。。。解压要改 增加color 解压后的地图栅格数据 struct SubmapTexture { struct Pixels { std::vector intensity; // 地图栅格值 std::vector alpha; // 栅格的透明度 std::vector color; //。。。增加颜色值 std::vector observer; //jzq 摄像头观测过的区域 }; Pixels pixels; int width; int height; double resolution; ::cartographer::transform::Rigid3d slice_pose; }; // 压缩后的地图栅格数据 struct SubmapTextures { int version; std::vector textures; }; PaintSubmapSlicesResult PaintSubmapSlices( const std::map<::cartographer::mapping::SubmapId, SubmapSlice>& submaps, double resolution); int* Slices( const std::map<::cartographer::mapping::SubmapId, SubmapSlice>& submaps, const double resolution); void FillSubmapSlice( const ::cartographer::transform::Rigid3d& global_submap_pose, const ::cartographer::mapping::proto::Submap& proto, SubmapSlice* const submap_slice, mapping::ValueConversionTables* conversion_tables); void DeserializeAndFillSubmapSlices( ProtoStreamDeserializer* deserializer, std::map<::cartographer::mapping::SubmapId, SubmapSlice>* submap_slices, mapping::ValueConversionTables* conversion_tables); // Unpacks cell data as provided by the backend into 'intensity' and 'alpha'. SubmapTexture::Pixels UnpackTextureData(const std::string& compressed_cells, int width, int height); // Draw a texture into a cairo surface. 'cairo_data' will store the pixel data // for the surface and must therefore outlive the use of the surface. UniqueCairoSurfacePtr DrawTexture(const std::vector& intensity, const std::vector& alpha, //。。。增加color传参 const std::vector& color, int width, int height, std::vector* cairo_data); UniqueCairoSurfacePtr DrawTexture(const std::vector& intensity, const std::vector& alpha, int width, int height, std::vector* cairo_data); } // namespace io } // namespace cartographer #endif // CARTOGRAPHER_IO_SUBMAP_PAINTER_H_