| 36 | } |
| 37 | |
| 38 | bool GridMapRosConverter::fromMessage(const grid_map_msgs::GridMap& message, grid_map::GridMap& gridMap, const std::vector<std::string>& layers, bool copyBasicLayers, bool copyAllNonBasicLayers) |
| 39 | { |
| 40 | gridMap.setTimestamp(message.info.header.stamp.toNSec()); |
| 41 | gridMap.setFrameId(message.info.header.frame_id); |
| 42 | gridMap.setGeometry(Length(message.info.length_x, message.info.length_y), message.info.resolution, |
| 43 | Position(message.info.pose.position.x, message.info.pose.position.y)); |
| 44 | |
| 45 | if (message.layers.size() != message.data.size()) { |
| 46 | ROS_ERROR("Different number of layers and data in grid map message."); |
| 47 | return false; |
| 48 | } |
| 49 | |
| 50 | // Copy non-basic layers. |
| 51 | for (unsigned int i = 0u; i < message.layers.size(); ++i) { |
| 52 | |
| 53 | // check if layer should be copied. |
| 54 | if (!copyAllNonBasicLayers && std::find(layers.begin(), layers.end(), message.layers[i]) == layers.end()) { |
| 55 | continue; |
| 56 | } |
| 57 | |
| 58 | // TODO Could we use the data mapping (instead of copying) method here? |
| 59 | Matrix data; |
| 60 | if(!multiArrayMessageCopyToMatrixEigen(message.data[i], data)) { |
| 61 | return false; |
| 62 | } |
| 63 | |
| 64 | // TODO Check if size is good. size_ << getRows(message.data[0]), getCols(message.data[0]); |
| 65 | gridMap.add(message.layers[i], data); |
| 66 | } |
| 67 | |
| 68 | // Copy basic layers. |
| 69 | if (copyBasicLayers) { |
| 70 | gridMap.setBasicLayers(message.basic_layers); |
| 71 | } |
| 72 | |
| 73 | gridMap.setStartIndex(Index(message.outer_start_index, message.inner_start_index)); |
| 74 | return true; |
| 75 | } |
| 76 | |
| 77 | bool GridMapRosConverter::fromMessage(const grid_map_msgs::GridMap& message, grid_map::GridMap& gridMap) |
| 78 | { |
nothing calls this directly
no test coverage detected