├── CMakeLists.txt
├── LICENSE
├── README.md
├── assets
├── Example_Environment.png
├── Example_Environment2.png
└── testgif.gif
├── launch
├── open_world.launch
└── request_publisher.launch
├── maps
├── test.pgm
├── test.yaml
├── test2.pgm
└── test2.yaml
├── msgs
├── CMakeLists.txt
└── collision_map_request.proto
├── package.xml
├── src
├── collision_map_creator.cc
└── request_publisher.cc
└── worlds
├── test.world
└── test2.world
/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | cmake_minimum_required(VERSION 2.8.8)
2 | project(pgm_map_creator)
3 |
4 | set (CMAKE_CXX_FLAGS "-g -Wall -std=c++17")
5 |
6 | include (FindPkgConfig)
7 | if (PKG_CONFIG_FOUND)
8 | pkg_check_modules(GAZEBO gazebo)
9 | pkg_check_modules(SDF sdformat)
10 | endif()
11 |
12 | find_package(catkin REQUIRED COMPONENTS
13 | roscpp
14 | rospy
15 | )
16 |
17 | find_package(Boost REQUIRED COMPONENTS system)
18 | find_package(Threads REQUIRED)
19 |
20 |
21 | catkin_package(
22 | # INCLUDE_DIRS include
23 | # LIBRARIES pgm_map_creator
24 | # CATKIN_DEPENDS roscpp rospy
25 | # DEPENDS system_lib
26 | )
27 |
28 |
29 | include_directories(
30 | ${catkin_INCLUDE_DIRS}
31 |
32 | ${GAZEBO_INCLUDE_DIRS}
33 | ${SDF_INCLUDE_DIRS}
34 | ${CMAKE_CURRENT_BINARY_DIR}/msgs
35 | )
36 |
37 | link_directories(${GAZEBO_LIBRARY_DIRS} ${CMAKE_CURRENT_BINARY_DIR}/msgs)
38 | add_subdirectory(msgs)
39 |
40 | add_executable(request_publisher src/request_publisher.cc)
41 | target_link_libraries(request_publisher collision_map_creator_msgs ${Boost_LIBRARIES} ${GAZEBO_LIBRARIES} ${SDF_LIBRARIES} Threads::Threads) # add Threads::Threads
42 | add_dependencies(request_publisher collision_map_creator_msgs)
43 |
44 | add_library(collision_map_creator SHARED src/collision_map_creator.cc)
45 | target_link_libraries(collision_map_creator collision_map_creator_msgs ${Boost_LIBRARIES} ${GAZEBO_LIBRARIES} ${SDF_LIBRARIES} Threads::Threads) # add Threads::Threads
46 | add_dependencies(collision_map_creator collision_map_creator_msgs)
47 |
48 |
49 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2024 Jing Zongxin
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # 1、pgm_map_creator **Project Overview**
2 | This project is designed to generate PGM maps directly from Gazebo .world files. The generated PGM maps can be used as ground truth maps for testing the performance of SLAM algorithms. Additionally, they can serve as prior global maps for path planning algorithms.
3 |
4 | Below are the results generated by the example environment provided by the project.
5 |
6 | 
7 |
8 |
9 |
11 |
12 |
13 |
14 |
15 | ## (1) Features
16 | ① Ground Truth Maps: Create accurate PGM maps for evaluating SLAM algorithm performance.
17 |
18 | ② Prior Global Maps: Utilize the generated maps directly for path planning algorithms.
19 |
20 | ③ High-Quality Mapping: Produce high-quality prior maps for scenarios where SLAM algorithm performance is suboptimal or when using SLAM is inconvenient.
21 |
22 | ④ Convenience and Efficiency: Generate the necessary maps quickly and easily, enhancing the workflow of path planning tasks.
23 |
24 | ## (2) Use Cases
25 | ① Testing SLAM Algorithms: Evaluate and benchmark the performance of SLAM algorithms using the generated ground truth maps.
26 |
27 | ② Path Planning: Employ the generated PGM maps as prior global maps to improve the efficiency and accuracy of path planning algorithms.
28 |
29 | ③ Challenging Environments: Use this project to generate high-quality global maps in environments where SLAM algorithms may struggle or are impractical to deploy.
30 |
31 | ## (3) Testing Environment
32 |
33 | **Ubuntu 20.04, ROS Noetic, Boost 1.71,Gazebo 11, C++ 17**
34 |
35 |
36 | ## (4) Contribution Details
37 |
38 | This project is based on the open-source `pgm_map_creator` project by hyfan1116, available at: [pgm_map_creator](https://github.com/hyfan1116/pgm_map_creator). Due to updates in ROS, Boost, and Gazebo versions, the original project is no longer functional. Our main contribution is updating and fixing the project to ensure compatibility with Ubuntu 20.04, ROS Noetic, Boost 1.71, Gazebo 11, and C++ 17, allowing it to run smoothly in these environments. We extend our gratitude to hyfan1116 for the original `pgm_map_creator` project.
39 |
40 |
41 |
42 |
43 | # 2、**Project Installation**
44 |
45 |
46 | ## (1) Install the dependencies.
47 |
48 | ```bash
49 | sudo apt-get update
50 | ```
51 |
52 | ```bash
53 | sudo apt-get install libboost-all-dev protobuf-compiler
54 | ```
55 |
56 | ## (2) Clone the Package to your ROS workspace `src` folder:
57 |
58 | **Method 1**: Use the following command to quickly clone the package. Note that the default ROS workspace name is `catkin_ws`. If your workspace has a different name, please modify `catkin_ws` accordingly in the command below.
59 |
60 | ```bash
61 | cd ~/catkin_ws/src/
62 | git clone https://github.com/JZX-MY/pgm_map_creator
63 | ```
64 |
65 | **Method 2**: Manually download the project's source code as a zip file, then copy it to your ROS workspace's `src` folder and extract it.
66 |
67 |
68 | ## (3) Build the Package (First Compilation)
69 |
70 | To ensure the project works correctly, it needs to be compiled twice. First, navigate to your ROS workspace and compile the package:
71 |
72 | ```bash
73 | cd ~/catkin_ws/
74 | catkin_make -DCATKIN_WHITELIST_PACKAGES="pgm_map_creator"
75 | ```
76 | ## (4) Modify CMakeLists.txt
77 |
78 | Open the `CMakeLists.txt` file located in the `pgm_map_creator/msgs` directory and comment out the following three lines, then save the changes:
79 |
80 | ```bash
81 | ${PROTOBUF_IMPORT_DIRS}/vector2d.proto
82 | ${PROTOBUF_IMPORT_DIRS}/header.proto
83 | ${PROTOBUF_IMPORT_DIRS}/time.proto
84 | ```
85 |
86 | The modified `CMakeLists.txt` file should look like this:
87 |
88 | ```bash
89 | find_package(Protobuf REQUIRED)
90 |
91 | set(PROTOBUF_IMPORT_DIRS)
92 | foreach(ITR ${GAZEBO_INCLUDE_DIRS})
93 | if(ITR MATCHES ".*gazebo-[0-9.]+$")
94 | set(PROTOBUF_IMPORT_DIRS "${ITR}/gazebo/msgs/proto")
95 | endif()
96 | endforeach()
97 |
98 | set (msgs
99 | collision_map_request.proto
100 | #${PROTOBUF_IMPORT_DIRS}/vector2d.proto
101 | #${PROTOBUF_IMPORT_DIRS}/header.proto
102 | #${PROTOBUF_IMPORT_DIRS}/time.proto
103 | )
104 |
105 | PROTOBUF_GENERATE_CPP(PROTO_SRCS PROTO_HDRS ${msgs})
106 | add_library(collision_map_creator_msgs SHARED ${PROTO_SRCS})
107 | target_include_directories(collision_map_creator_msgs PUBLIC ${PROTOBUF_INCLUDE_DIRS})
108 | target_link_libraries(collision_map_creator_msgs ${PROTOBUF_LIBRARY})
109 | ```
110 |
111 | ## (5) Build the Project (Second Compilation)
112 |
113 | After modifying the `CMakeLists.txt` file, perform the second compilation:
114 |
115 | ```bash
116 | catkin_make -DCATKIN_WHITELIST_PACKAGES="pgm_map_creator"
117 | ```
118 |
119 |
120 | # 3、**Verify if the Package is Functioning Correctly.**
121 |
122 | To verify if the package is functioning correctly, please execute the following two commands in sequence for testing.
123 |
124 | ```bash
125 | roslaunch pgm_map_creator open_world.launch
126 | ```
127 |
128 | ```bash
129 | roslaunch pgm_map_creator request_publisher.launch
130 | ```
131 |
132 | After the program runs successfully, a file named `map.pgm` will be generated in the `maps` folder, as shown in the dynamic demonstration of the testing process below:
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 | Note that the example environment mentioned above includes some third-party models. If these models are not downloaded on your computer, the Gazebo environment you open may be missing some parts compared to the illustrations above. Additionally, since the system may keep searching for the missing files, the time taken to open Gazebo could be longer. Taking this into consideration, we have added a new, simpler test example that does not include any third-party models, named 'test2.world'. Additionally, we have changed the default test file to this new file,as shown in the dynamic demonstration of the testing process below:.
141 |
142 |
143 | 
144 |
145 |
146 | # 4、**How to Use in Your Own .World File**
147 |
148 | ## (1) Copy your `.world` file to the `worlds` folder of the `pgm_map_creator` package.
149 |
150 | ## (2) Add the plugin to the .world file.
151 |
152 | Add the following code to your own `.world` file, just before the `` tag.
153 |
154 | ```xml
155 |
156 | ```
157 |
158 | ## (3) Modify the `open_world.launch` file
159 |
160 |
161 | Open the `open_world.launch` file in the `launch` folder of the `pgm_map_creator` package, and change the referenced `.world` file to your own `.world` file. Replace `test.world` in the following line with the name of your own `.world` file and save the changes:
162 |
163 | ```xml
164 |
165 | ```
166 |
167 | ## (4) Modify the `request_publisher.launch` file
168 |
169 |
170 | Open the `request_publisher.launch` file in the `launch` folder of the `pgm_map_creator` package. Based on your `.world` file, set the relevant parameters for the mapping area range: `xmin`, `xmax`, `ymin`, `ymax`, and the map resolution `resolution`. The commonly used default value for resolution is 0.05.
171 |
172 |
173 | ## (5) Use the `pgm_map_creator` package to generate the map
174 |
175 | After making the above modifications, you can now execute the following two commands sequentially to generate the pgm map file for your own `.world` file:
176 |
177 | ```bash
178 | roslaunch pgm_map_creator open_world.launch
179 | ```
180 |
181 | ```bash
182 | roslaunch pgm_map_creator request_publisher.launch
183 | ```
184 |
185 |
186 | Wait for the plugin th generate map. Track the progess in the terminal that spawns the world file. Once it is done, the pgm map would be in the `maps` folder of the `pgm_map_creator`.
187 |
188 |
189 | ## (6) Create the `yaml` file for the pgm map.
190 |
191 | You may also need a `yaml` file which provides the metadata of the map.
192 |
193 | ```
194 | cd catkin_ws/src/pgm_map_creator/maps
195 | touch map.yaml
196 | ```
197 | `map.yaml`
198 | ```
199 | image: map.pgm
200 | resolution: 0.01
201 | origin: [-5.0, -12.0, 0.0]
202 | occupied_thresh: 0.65
203 | free_thresh: 0.196
204 | negate: 0
205 | ```
206 |
207 | The parameters `resolution` and `origin` are based on the arguments in `request_publisher.launch`.The `image` parameter is the name of the map generated in the previous step. If you manually renamed the map, you need to update this parameter accordingly. In our provided example, it has been manually renamed to `test.pgm`. Alternatively, you can modify the `map_name` parameter in the `request_publisher.launch` file to directly generate a pgm map with the specified name.
208 |
209 |
210 |
211 | # 5、**Acknowledgments**
212 |
213 |
214 | This project is based on the open-source `pgm_map_creator` project by hyfan1116, available at: [pgm_map_creator](https://github.com/hyfan1116/pgm_map_creator). Due to updates in ROS, Boost, and Gazebo versions, the original project is no longer functional. Our main contribution is updating and fixing the project to ensure compatibility with Ubuntu 20.04, ROS Noetic, Boost 1.71, Gazebo 11, and C++ 17, allowing it to run smoothly in these environments. We extend our gratitude to hyfan1116 for the original `pgm_map_creator` project.
215 |
216 |
217 |
218 |
219 |
--------------------------------------------------------------------------------
/assets/Example_Environment.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JZX-MY/pgm_map_creator/f5642e3848007cc535ac9e6273316c4de39ff696/assets/Example_Environment.png
--------------------------------------------------------------------------------
/assets/Example_Environment2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JZX-MY/pgm_map_creator/f5642e3848007cc535ac9e6273316c4de39ff696/assets/Example_Environment2.png
--------------------------------------------------------------------------------
/assets/testgif.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JZX-MY/pgm_map_creator/f5642e3848007cc535ac9e6273316c4de39ff696/assets/testgif.gif
--------------------------------------------------------------------------------
/launch/open_world.launch:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/launch/request_publisher.launch:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/maps/test.pgm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JZX-MY/pgm_map_creator/f5642e3848007cc535ac9e6273316c4de39ff696/maps/test.pgm
--------------------------------------------------------------------------------
/maps/test.yaml:
--------------------------------------------------------------------------------
1 | image: test.pgm
2 | resolution: 0.050000
3 | origin: [-5, -12.000000, 0.000000]
4 | negate: 0
5 | occupied_thresh: 0.65
6 | free_thresh: 0.196
7 |
8 |
--------------------------------------------------------------------------------
/maps/test2.pgm:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/JZX-MY/pgm_map_creator/f5642e3848007cc535ac9e6273316c4de39ff696/maps/test2.pgm
--------------------------------------------------------------------------------
/maps/test2.yaml:
--------------------------------------------------------------------------------
1 | image: test2.pgm
2 | resolution: 0.050000
3 | origin: [-5, -12.000000, 0.000000]
4 | negate: 0
5 | occupied_thresh: 0.65
6 | free_thresh: 0.196
7 |
8 |
--------------------------------------------------------------------------------
/msgs/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | find_package(Protobuf REQUIRED)
2 |
3 | set(PROTOBUF_IMPORT_DIRS)
4 | foreach(ITR ${GAZEBO_INCLUDE_DIRS})
5 | if(ITR MATCHES ".*gazebo-[0-9.]+$")
6 | set(PROTOBUF_IMPORT_DIRS "${ITR}/gazebo/msgs/proto")
7 | endif()
8 | endforeach()
9 |
10 | set (msgs
11 | collision_map_request.proto
12 | ${PROTOBUF_IMPORT_DIRS}/vector2d.proto
13 | ${PROTOBUF_IMPORT_DIRS}/header.proto
14 | ${PROTOBUF_IMPORT_DIRS}/time.proto
15 | )
16 |
17 | PROTOBUF_GENERATE_CPP(PROTO_SRCS PROTO_HDRS ${msgs})
18 | add_library(collision_map_creator_msgs SHARED ${PROTO_SRCS})
19 | target_include_directories(collision_map_creator_msgs PUBLIC ${PROTOBUF_INCLUDE_DIRS})
20 | target_link_libraries(collision_map_creator_msgs ${PROTOBUF_LIBRARY})
21 |
--------------------------------------------------------------------------------
/msgs/collision_map_request.proto:
--------------------------------------------------------------------------------
1 | package collision_map_creator_msgs.msgs;
2 | import "vector2d.proto";
3 |
4 | message CollisionMapRequest
5 | {
6 | required gazebo.msgs.Vector2d upperLeft = 1;
7 | required gazebo.msgs.Vector2d upperRight = 2;
8 | required gazebo.msgs.Vector2d lowerRight = 3;
9 | required gazebo.msgs.Vector2d lowerLeft = 4;
10 | required double height = 5;
11 | required double resolution = 6;
12 | optional string filename = 7 [default = ""];
13 | optional int32 threshold = 8 [default = 255];
14 | }
15 |
--------------------------------------------------------------------------------
/package.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | pgm_map_creator
4 | 0.0.0
5 | This project is designed to generate PGM maps directly from Gazebo .world files.
6 |
7 | JZX-MY
8 |
9 | MIT
10 |
11 | catkin
12 | roscpp
13 | rospy
14 | roscpp
15 | rospy
16 | roscpp
17 | rospy
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/src/collision_map_creator.cc:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 | #include
4 | #include
5 | #include
6 | #include
7 | #include
8 | #include
9 |
10 | #include "gazebo/gazebo.hh"
11 | #include "gazebo/common/common.hh"
12 | #include "gazebo/msgs/msgs.hh"
13 | #include "gazebo/physics/physics.hh"
14 | #include "gazebo/transport/transport.hh"
15 | #include "collision_map_request.pb.h"
16 |
17 | namespace gazebo
18 | {
19 | typedef const boost::shared_ptr<
20 | const collision_map_creator_msgs::msgs::CollisionMapRequest>
21 | CollisionMapRequestPtr;
22 |
23 | class CollisionMapCreator : public WorldPlugin
24 | {
25 | transport::NodePtr node;
26 | transport::PublisherPtr imagePub;
27 | transport::SubscriberPtr commandSubscriber;
28 | physics::WorldPtr world;
29 |
30 | public: void Load(physics::WorldPtr _parent, sdf::ElementPtr _sdf)
31 | {
32 | node = transport::NodePtr(new transport::Node());
33 | world = _parent;
34 | // Initialize the node with the world name
35 | node->Init(world->Name());
36 | std::cout << "Subscribing to: " << "~/collision_map/command" << std::endl;
37 | commandSubscriber = node->Subscribe("~/collision_map/command",
38 | &CollisionMapCreator::create, this);
39 | imagePub = node->Advertise("~/collision_map/image");
40 | }
41 |
42 | public: void create(CollisionMapRequestPtr &msg)
43 | {
44 | std::cout << "Received message" << std::endl;
45 |
46 | std::cout << "Creating collision map with corners at (" <<
47 | msg->upperleft().x() << ", " << msg->upperleft().y() << "), (" <<
48 | msg->upperright().x() << ", " << msg->upperright().y() << "), (" <<
49 | msg->lowerright().x() << ", " << msg->lowerright().y() << "), (" <<
50 | msg->lowerleft().x() << ", " << msg->lowerleft().y() <<
51 | ") with collision projected from z = " <<
52 | msg->height() << "\nResolution = " << msg->resolution() << " m\n" <<
53 | "Occupied spaces will be filled with: " << msg->threshold() <<
54 | std::endl;
55 |
56 | double dX_vertical = msg->upperleft().x() - msg->lowerleft().x();
57 | double dY_vertical = msg->upperleft().y() - msg->lowerleft().y();
58 | double mag_vertical =
59 | sqrt(dX_vertical * dX_vertical + dY_vertical * dY_vertical);
60 | dX_vertical = msg->resolution() * dX_vertical / mag_vertical;
61 | dY_vertical = msg->resolution() * dY_vertical / mag_vertical;
62 |
63 | double dX_horizontal = msg->upperright().x() - msg->upperleft().x();
64 | double dY_horizontal = msg->upperright().y() - msg->upperleft().y();
65 | double mag_horizontal =
66 | sqrt(dX_horizontal * dX_horizontal + dY_horizontal * dY_horizontal);
67 | dX_horizontal = msg->resolution() * dX_horizontal / mag_horizontal;
68 | dY_horizontal = msg->resolution() * dY_horizontal / mag_horizontal;
69 |
70 | int count_vertical = mag_vertical / msg->resolution();
71 | int count_horizontal = mag_horizontal / msg->resolution();
72 |
73 | if (count_vertical == 0 || count_horizontal == 0)
74 | {
75 | std::cout << "Image has a zero dimensions, check coordinates"
76 | << std::endl;
77 | return;
78 | }
79 | double x,y;
80 |
81 | boost::gil::gray8_pixel_t fill(255-msg->threshold());
82 | boost::gil::gray8_pixel_t blank(255);
83 | boost::gil::gray8_image_t image(count_horizontal, count_vertical);
84 |
85 | double dist;
86 | std::string entityName;
87 | ignition::math::Vector3d start, end;
88 | start.Z(msg->height());
89 | end.Z(0.001);
90 |
91 | gazebo::physics::PhysicsEnginePtr engine = world->Physics();
92 | engine->InitForThread();
93 | gazebo::physics::RayShapePtr ray =
94 | boost::dynamic_pointer_cast(
95 | engine->CreateShape("ray", gazebo::physics::CollisionPtr()));
96 |
97 | std::cout << "Rasterizing model and checking collisions" << std::endl;
98 | boost::gil::fill_pixels(image._view, blank);
99 |
100 | for (int i = 0; i < count_vertical; ++i)
101 | {
102 | std::cout << "Percent complete: " << i * 100.0 / count_vertical
103 | << std::endl;
104 | x = i * dX_vertical + msg->lowerleft().x();
105 | y = i * dY_vertical + msg->lowerleft().y();
106 | for (int j = 0; j < count_horizontal; ++j)
107 | {
108 | x += dX_horizontal;
109 | y += dY_horizontal;
110 |
111 | start.X(x);
112 | end.X(x);
113 | start.Y(y);
114 | end.Y(y);
115 | ray->SetPoints(start, end);
116 | ray->GetIntersection(dist, entityName);
117 | if (!entityName.empty())
118 | {
119 | image._view(i,j) = fill;
120 | }
121 | }
122 | }
123 |
124 | std::cout << "Completed calculations, writing to image" << std::endl;
125 | if (!msg->filename().empty())
126 | {
127 | boost::gil::gray8_view_t view = image._view;
128 |
129 | // Write to png
130 | // boost::gil::png_write_view(msg->filename(), view);
131 | // Write to pgm (pnm p2)
132 | pgm_write_view(msg->filename(), view);
133 | }
134 | std::cout << "Output location: " << msg->filename() << std::endl;
135 | }
136 |
137 | public: void pgm_write_view(const std::string& filename, boost::gil::gray8_view_t& view)
138 | {
139 | // Write image to pgm file
140 | std::cout << "running" << std::endl;
141 | int h = view.height();
142 | int w = view.width();
143 |
144 | std::ofstream ofs;
145 | ofs.open(filename+".pgm");
146 | ofs << "P2" << '\n'; // grayscale
147 | ofs << w << ' ' << h << '\n'; // width and height
148 | ofs << 255 << '\n'; // max value
149 | for (int y = 0; y < h; ++y){
150 | for (int x = 0; x < w; ++x){
151 | // std::cout << (int)view(x, y)[0];
152 | ofs << (int)view(x, y)[0] << ' ';
153 | }
154 | ofs << '\n';
155 | }
156 | ofs.close();
157 | }
158 | };
159 |
160 | // Register this plugin with the simulator
161 | GZ_REGISTER_WORLD_PLUGIN(CollisionMapCreator)
162 | }
163 |
--------------------------------------------------------------------------------
/src/request_publisher.cc:
--------------------------------------------------------------------------------
1 | #include
2 | #include
3 | #include
4 | #include
5 |
6 | #include "gazebo/gazebo.hh"
7 | #include "gazebo/common/common.hh"
8 | #include "gazebo/transport/transport.hh"
9 | #include "gazebo/physics/physics.hh"
10 | #include "gazebo/msgs/msgs.hh"
11 |
12 | #include "collision_map_request.pb.h"
13 | #include "vector2d.pb.h"
14 |
15 | using namespace std;
16 |
17 | bool createVectorArray(const char * vectorString,
18 | deque corners)
19 | {
20 | deque::iterator it;
21 |
22 | string cornersStr = vectorString;
23 | size_t opening=0;
24 | size_t closing=0;
25 | for (it = corners.begin(); it != corners.end(); ++it)
26 | {
27 | opening = cornersStr.find('(', closing);
28 | closing = cornersStr.find(')', opening);
29 | if (opening == string::npos || closing == string::npos)
30 | {
31 | std::cout << "Poorly formed string: " << cornersStr << std::endl;
32 | std::cout << "( found at: " << opening << " ) found at: " << closing << std::endl;
33 | return false;
34 | }
35 | string oneCornerStr = cornersStr.substr(opening + 1, closing - opening - 1);
36 | size_t commaLoc = oneCornerStr.find(",");
37 | string x = oneCornerStr.substr(0,commaLoc);
38 | string y = oneCornerStr.substr(commaLoc + 1, oneCornerStr.length() - commaLoc);
39 | (*it)->set_x(atof(x.c_str()));
40 | (*it)->set_y(atof(y.c_str()));
41 | }
42 | return true;
43 | }
44 |
45 | int main(int argc, char * argv[])
46 | {
47 | if (argc > 4)
48 | {
49 | collision_map_creator_msgs::msgs::CollisionMapRequest request;
50 | deque corners;
51 |
52 | corners.push_back(request.mutable_upperleft());
53 | corners.push_back(request.mutable_upperright());
54 | corners.push_back(request.mutable_lowerright());
55 | corners.push_back(request.mutable_lowerleft());
56 |
57 | if (!createVectorArray(argv[1],corners))
58 | {
59 | return -1;
60 | }
61 |
62 | request.set_height(atof(argv[2]));
63 | request.set_resolution(atof(argv[3]));
64 | request.set_filename(argv[4]);
65 |
66 | if (argc == 6)
67 | {
68 | request.set_threshold(atoi(argv[5]));
69 | }
70 |
71 | gazebo::transport::init();
72 | gazebo::transport::run();
73 | gazebo::transport::NodePtr node(new gazebo::transport::Node());
74 | node->Init("default");
75 |
76 | std::cout << "Request: " <<
77 | " UL.x: " << request.upperleft().x() <<
78 | " UL.y: " << request.upperleft().y() <<
79 | " UR.x: " << request.upperright().x() <<
80 | " UR.y: " << request.upperright().y() <<
81 | " LR.x: " << request.lowerright().x() <<
82 | " LR.y: " << request.lowerright().y() <<
83 | " LL.x: " << request.lowerleft().x() <<
84 | " LL.y: " << request.lowerleft().y() <<
85 | " Height: " << request.height() <<
86 | " Resolution: " << request.resolution() <<
87 | " Filename: " << request.filename() <<
88 | " Threshold: " << request.threshold() << std::endl;
89 |
90 | gazebo::transport::PublisherPtr imagePub =
91 | node->Advertise(
92 | "~/collision_map/command");
93 | std::cout << "Waiting for connection ... " << std::endl;
94 | imagePub->WaitForConnection();
95 | std::cout << "Connected." << std::endl;
96 | imagePub->Publish(request);
97 |
98 | gazebo::transport::fini();
99 | return 0;
100 | }
101 | return -1;
102 | }
103 |
--------------------------------------------------------------------------------
/worlds/test2.world:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 1
5 | 0 0 10 0 -0 0
6 | 0.8 0.8 0.8 1
7 | 0.2 0.2 0.2 1
8 |
9 | 1000
10 | 0.9
11 | 0.01
12 | 0.001
13 |
14 | -0.5 0.1 -0.9
15 |
16 | 0
17 | 0
18 | 0
19 |
20 |
21 |
22 | 1
23 |
24 |
25 |
26 |
27 | 0 0 1
28 | 100 100
29 |
30 |
31 |
32 |
33 |
34 | 100
35 | 50
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 | 10
47 |
48 |
49 | 0
50 |
51 |
52 | 0 0 1
53 | 100 100
54 |
55 |
56 |
57 |
61 |
62 |
63 | 0
64 | 0
65 | 0
66 |
67 |
68 | 0 0 -9.8
69 | 6e-06 2.3e-05 -4.2e-05
70 |
71 |
72 | 0.001
73 | 1
74 | 1000
75 |
76 |
77 | 0.4 0.4 0.4 1
78 | 0.7 0.7 0.7 1
79 | 1
80 |
81 |
82 |
83 | EARTH_WGS84
84 | 0
85 | 0
86 | 0
87 | 0
88 |
89 |
90 | 7 0 0 0 -0 0
91 |
92 |
93 |
94 |
95 | 20.3 0.3 1
96 |
97 |
98 | 0 0 0.5 0 -0 0
99 | 10
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 | 0 0 0.5 0 -0 0
115 |
116 |
117 | 20.3 0.3 1
118 |
119 |
120 |
121 |
125 | 1 1 1 1
126 |
127 |
128 | 0
129 |
130 |
131 | -0 8 0 0 -0 0
132 | 0
133 | 0
134 | 0
135 |
136 |
137 |
138 |
139 |
140 | 6.14991 0.3 1
141 |
142 |
143 | 0 0 0.5 0 -0 0
144 | 10
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 | 0 0 0.5 0 -0 0
160 |
161 |
162 | 6.14991 0.3 1
163 |
164 |
165 |
166 |
170 | 1 1 1 1
171 |
172 |
173 | 0
174 |
175 |
176 | -6.769 4.775 0 0 -0 0
177 | 0
178 | 0
179 | 0
180 |
181 |
182 |
183 |
184 |
185 | 5.1001 0.5 1
186 |
187 |
188 | 0 0 0.5 0 -0 0
189 | 10
190 |
191 |
192 |
193 |
194 |
195 |
196 |
197 |
198 |
199 |
200 |
201 |
202 |
203 |
204 | 0 0 0.5 0 -0 0
205 |
206 |
207 | 5.1001 0.5 1
208 |
209 |
210 |
211 |
215 | 1 1 1 1
216 |
217 |
218 | 0
219 |
220 |
221 | 0.426 -5.638 0 0 -0 1.5708
222 | 0
223 | 0
224 | 0
225 |
226 |
227 |
228 |
229 |
230 | 2.90014 0.3 1
231 |
232 |
233 | 0 0 0.5 0 -0 0
234 | 10
235 |
236 |
237 |
238 |
239 |
240 |
241 |
242 |
243 |
244 |
245 |
246 |
247 |
248 |
249 | 0 0 0.5 0 -0 0
250 |
251 |
252 | 2.90014 0.3 1
253 |
254 |
255 |
256 |
260 | 1 1 1 1
261 |
262 |
263 | 0
264 |
265 |
266 | -0.957 -5.671 0 0 -0 0
267 | 0
268 | 0
269 | 0
270 |
271 |
272 |
273 |
274 |
275 | 1.64993 0.3 1
276 |
277 |
278 | 0 0 0.5 0 -0 0
279 | 10
280 |
281 |
282 |
283 |
284 |
285 |
286 |
287 |
288 |
289 |
290 |
291 |
292 |
293 |
294 | 0 0 0.5 0 -0 0
295 |
296 |
297 | 1.64993 0.3 1
298 |
299 |
300 |
301 |
305 | 1 1 1 1
306 |
307 |
308 | 0
309 |
310 |
311 | -0.379001 -4.33 0 0 -0 0
312 | 0
313 | 0
314 | 0
315 |
316 |
317 |
318 |
319 |
320 | 4.59988 0.25 1
321 |
322 |
323 | 0 0 0.5 0 -0 0
324 | 10
325 |
326 |
327 |
328 |
329 |
330 |
331 |
332 |
333 |
334 |
335 |
336 |
337 |
338 |
339 | 0 0 0.5 0 -0 0
340 |
341 |
342 | 4.59988 0.25 1
343 |
344 |
345 |
346 |
350 | 1 1 1 1
351 |
352 |
353 | 0
354 |
355 |
356 | -1.752 -7.055 0 0 -0 0
357 | 0
358 | 0
359 | 0
360 |
361 |
362 |
363 |
364 |
365 | 20.3 0.3 1
366 |
367 |
368 | 0 0 0.5 0 -0 0
369 | 10
370 |
371 |
372 |
373 |
374 |
375 |
376 |
377 |
378 |
379 |
380 |
381 |
382 |
383 |
384 | 0 0 0.5 0 -0 0
385 |
386 |
387 | 20.3 0.3 1
388 |
389 |
390 |
391 |
395 | 1 1 1 1
396 |
397 |
398 | 0
399 |
400 |
401 | -0 -8 0 0 -0 0
402 | 0
403 | 0
404 | 0
405 |
406 |
407 |
408 |
409 |
410 | 2.5 0.15 1
411 |
412 |
413 | 0 0 0.5 0 -0 0
414 | 10
415 |
416 |
417 |
418 |
419 |
420 |
421 |
422 |
423 |
424 |
425 |
426 |
427 |
428 |
429 | 0 0 0.5 0 -0 0
430 |
431 |
432 | 2.5 0.15 1
433 |
434 |
435 |
436 |
440 | 1 1 1 1
441 |
442 |
443 | 0
444 |
445 |
446 | -3.032 1.305 0 0 -0 0
447 | 0
448 | 0
449 | 0
450 |
451 |
452 |
453 |
454 |
455 | 1.25 0.15 1
456 |
457 |
458 | 0 0 0.5 0 -0 0
459 | 10
460 |
461 |
462 |
463 |
464 |
465 |
466 |
467 |
468 |
469 |
470 |
471 |
472 |
473 |
474 | 0 0 0.5 0 -0 0
475 |
476 |
477 | 1.25 0.15 1
478 |
479 |
480 |
481 |
485 | 1 1 1 1
486 |
487 |
488 | 0
489 |
490 |
491 | -4.207 0.755 0 0 -0 -1.5708
492 | 0
493 | 0
494 | 0
495 |
496 |
497 |
498 |
499 |
500 | 2.5 0.15 1
501 |
502 |
503 | 0 0 0.5 0 -0 0
504 | 10
505 |
506 |
507 |
508 |
509 |
510 |
511 |
512 |
513 |
514 |
515 |
516 |
517 |
518 |
519 | 0 0 0.5 0 -0 0
520 |
521 |
522 | 2.5 0.15 1
523 |
524 |
525 |
526 |
530 | 1 1 1 1
531 |
532 |
533 | 0
534 |
535 |
536 | -3.032 0.205 0 0 -0 0
537 | 0
538 | 0
539 | 0
540 |
541 |
542 |
543 |
544 |
545 | 4.85019 1 1
546 |
547 |
548 | 0 0 0.5 0 -0 0
549 | 10
550 |
551 |
552 |
553 |
554 |
555 |
556 |
557 |
558 |
559 |
560 |
561 |
562 |
563 |
564 | 0 0 0.5 0 -0 0
565 |
566 |
567 | 4.85019 1 1
568 |
569 |
570 |
571 |
575 | 1 1 1 1
576 |
577 |
578 | 0
579 |
580 |
581 | -2.959 0.719 0 0 -0 -1.5708
582 | 0
583 | 0
584 | 0
585 |
586 |
587 |
588 |
589 |
590 | 3 0.4 1
591 |
592 |
593 | 0 0 0.5 0 -0 0
594 | 10
595 |
596 |
597 |
598 |
599 |
600 |
601 |
602 |
603 |
604 |
605 |
606 |
607 |
608 |
609 | 0 0 0.5 0 -0 0
610 |
611 |
612 | 3 0.4 1
613 |
614 |
615 |
616 |
620 | 1 1 1 1
621 |
622 |
623 | 0
624 |
625 |
626 | 4.38319 5.80907 0 0 -0 0
627 | 0
628 | 0
629 | 0
630 |
631 |
632 |
633 |
634 |
635 | 1.25 0.6 1
636 |
637 |
638 | 0 0 0.5 0 -0 0
639 | 10
640 |
641 |
642 |
643 |
644 |
645 |
646 |
647 |
648 |
649 |
650 |
651 |
652 |
653 |
654 | 0 0 0.5 0 -0 0
655 |
656 |
657 | 1.25 0.6 1
658 |
659 |
660 |
661 |
665 | 1 1 1 1
666 |
667 |
668 | 0
669 |
670 |
671 | 6.716 2.842 0 0 -0 0
672 | 0
673 | 0
674 | 0
675 |
676 |
677 |
678 |
679 |
680 | 2.65 0.3 1
681 |
682 |
683 | 0 0 0.5 0 -0 0
684 | 10
685 |
686 |
687 |
688 |
689 |
690 |
691 |
692 |
693 |
694 |
695 |
696 |
697 |
698 |
699 | 0 0 0.5 0 -0 0
700 |
701 |
702 | 2.65 0.3 1
703 |
704 |
705 |
706 |
710 | 1 1 1 1
711 |
712 |
713 | 0
714 |
715 |
716 | -7.206 4.789 0 0 -0 -1.5708
717 | 0
718 | 0
719 | 0
720 |
721 |
722 |
723 |
724 |
725 | 16.5 0.5 1
726 |
727 |
728 | 0 0 0.5 0 -0 0
729 | 10
730 |
731 |
732 |
733 |
734 |
735 |
736 |
737 |
738 |
739 |
740 |
741 |
742 |
743 |
744 | 0 0 0.5 0 -0 0
745 |
746 |
747 | 16.5 0.5 1
748 |
749 |
750 |
751 |
755 | 1 1 1 1
756 |
757 |
758 | 0
759 |
760 |
761 | -10 0 0 0 -0 -1.5708
762 | 0
763 | 0
764 | 0
765 |
766 |
767 |
768 |
769 |
770 | 3.14555 0.4 1
771 |
772 |
773 | 0 0 0.5 0 -0 0
774 | 10
775 |
776 |
777 |
778 |
779 |
780 |
781 |
782 |
783 |
784 |
785 |
786 |
787 |
788 |
789 | 0 0 0.5 0 -0 0
790 |
791 |
792 | 3.14555 0.4 1
793 |
794 |
795 |
796 |
800 | 1 1 1 1
801 |
802 |
803 | 0
804 |
805 |
806 | -8.45 4.1945 0 0 -0 -0.436605
807 | 0
808 | 0
809 | 0
810 |
811 |
812 |
813 |
814 |
815 | 4.25046 0.4 1
816 |
817 |
818 | 0 0 0.5 0 -0 0
819 | 10
820 |
821 |
822 |
823 |
824 |
825 |
826 |
827 |
828 |
829 |
830 |
831 |
832 |
833 |
834 | 0 0 0.5 0 -0 0
835 |
836 |
837 | 4.25046 0.4 1
838 |
839 |
840 |
841 |
845 | 1 1 1 1
846 |
847 |
848 | 0
849 |
850 |
851 | -0.581 2.276 0 0 -0 0
852 | 0
853 | 0
854 | 0
855 |
856 |
857 |
858 |
859 |
860 | 4.14966 0.3 1
861 |
862 |
863 | 0 0 0.5 0 -0 0
864 | 10
865 |
866 |
867 |
868 |
869 |
870 |
871 |
872 |
873 |
874 |
875 |
876 |
877 |
878 |
879 | 0 0 0.5 0 -0 0
880 |
881 |
882 | 4.14966 0.3 1
883 |
884 |
885 |
886 |
890 | 1 1 1 1
891 |
892 |
893 | 0
894 |
895 |
896 | 0.257999 2.939 0 0 -0 -1.5708
897 | 0
898 | 0
899 | 0
900 |
901 |
902 |
903 |
904 |
905 | 4.7 0.6 1
906 |
907 |
908 | 0 0 0.5 0 -0 0
909 | 10
910 |
911 |
912 |
913 |
914 |
915 |
916 |
917 |
918 |
919 |
920 |
921 |
922 |
923 |
924 | 0 0 0.5 0 -0 0
925 |
926 |
927 | 4.7 0.6 1
928 |
929 |
930 |
931 |
935 | 1 1 1 1
936 |
937 |
938 | 0
939 |
940 |
941 | 2.308 1.014 0 0 -0 0
942 | 0
943 | 0
944 | 0
945 |
946 |
947 |
948 |
949 |
950 | 4.15034 0.3 1
951 |
952 |
953 | 0 0 0.5 0 -0 0
954 | 10
955 |
956 |
957 |
958 |
959 |
960 |
961 |
962 |
963 |
964 |
965 |
966 |
967 |
968 |
969 | 0 0 0.5 0 -0 0
970 |
971 |
972 | 4.15034 0.3 1
973 |
974 |
975 |
976 |
980 | 1 1 1 1
981 |
982 |
983 | 0
984 |
985 |
986 | 2.811 -1.153 0 0 -0 -1.5708
987 | 0
988 | 0
989 | 0
990 |
991 |
992 |
993 |
994 |
995 | 3.86502 0.3 1
996 |
997 |
998 | 0 0 0.5 0 -0 0
999 | 10
1000 |
1001 |
1002 |
1003 |
1004 |
1005 |
1006 |
1007 |
1008 |
1009 |
1010 |
1011 |
1012 |
1013 |
1014 | 0 0 0.5 0 -0 0
1015 |
1016 |
1017 | 3.86502 0.3 1
1018 |
1019 |
1020 |
1021 |
1025 | 1 1 1 1
1026 |
1027 |
1028 | 0
1029 |
1030 |
1031 | 7.93249 -1.80896 0 0 -0 0.000539
1032 | 0
1033 | 0
1034 | 0
1035 |
1036 |
1037 |
1038 |
1039 |
1040 | 4.65012 0.3 1
1041 |
1042 |
1043 | 0 0 0.5 0 -0 0
1044 | 10
1045 |
1046 |
1047 |
1048 |
1049 |
1050 |
1051 |
1052 |
1053 |
1054 |
1055 |
1056 |
1057 |
1058 |
1059 | 0 0 0.5 0 -0 0
1060 |
1061 |
1062 | 4.65012 0.3 1
1063 |
1064 |
1065 |
1066 |
1070 | 1 1 1 1
1071 |
1072 |
1073 | 0
1074 |
1075 |
1076 | -8.462 -6.462 0 0 -0 0.785398
1077 | 0
1078 | 0
1079 | 0
1080 |
1081 |
1082 |
1083 |
1084 |
1085 | 2.25 0.15 1
1086 |
1087 |
1088 | 0 0 0.5 0 -0 0
1089 | 10
1090 |
1091 |
1092 |
1093 |
1094 |
1095 |
1096 |
1097 |
1098 |
1099 |
1100 |
1101 |
1102 |
1103 |
1104 | 0 0 0.5 0 -0 0
1105 |
1106 |
1107 | 2.25 0.15 1
1108 |
1109 |
1110 |
1111 |
1115 | 1 1 1 1
1116 |
1117 |
1118 | 0
1119 |
1120 |
1121 | -5.874 -4.924 0 0 -0 0
1122 | 0
1123 | 0
1124 | 0
1125 |
1126 |
1127 |
1128 |
1129 |
1130 | 4.15 0.3 1
1131 |
1132 |
1133 | 0 0 0.5 0 -0 0
1134 | 10
1135 |
1136 |
1137 |
1138 |
1139 |
1140 |
1141 |
1142 |
1143 |
1144 |
1145 |
1146 |
1147 |
1148 |
1149 | 0 0 0.5 0 -0 0
1150 |
1151 |
1152 | 4.15 0.3 1
1153 |
1154 |
1155 |
1156 |
1160 | 1 1 1 1
1161 |
1162 |
1163 | 0
1164 |
1165 |
1166 | 6.14998 -3.75792 0 0 -0 -1.5708
1167 | 0
1168 | 0
1169 | 0
1170 |
1171 |
1172 |
1173 |
1174 |
1175 | 2.1 0.5 1
1176 |
1177 |
1178 | 0 0 0.5 0 -0 0
1179 | 10
1180 |
1181 |
1182 |
1183 |
1184 |
1185 |
1186 |
1187 |
1188 |
1189 |
1190 |
1191 |
1192 |
1193 |
1194 | 0 0 0.5 0 -0 0
1195 |
1196 |
1197 | 2.1 0.5 1
1198 |
1199 |
1200 |
1201 |
1205 | 1 1 1 1
1206 |
1207 |
1208 | 0
1209 |
1210 |
1211 | 3.611 -3.078 0 0 -0 0
1212 | 0
1213 | 0
1214 | 0
1215 |
1216 |
1217 |
1218 |
1219 |
1220 | 16.5 0.5 1
1221 |
1222 |
1223 | 0 0 0.5 0 -0 0
1224 | 10
1225 |
1226 |
1227 |
1228 |
1229 |
1230 |
1231 |
1232 |
1233 |
1234 |
1235 |
1236 |
1237 |
1238 |
1239 | 0 0 0.5 0 -0 0
1240 |
1241 |
1242 | 16.5 0.5 1
1243 |
1244 |
1245 |
1246 |
1250 | 1 1 1 1
1251 |
1252 |
1253 | 0
1254 |
1255 |
1256 | 10 0 0 0 -0 -1.5708
1257 | 0
1258 | 0
1259 | 0
1260 |
1261 |
1262 |
1263 |
1264 |
1265 | 2.5 0.15 1
1266 |
1267 |
1268 | 0 0 0.5 0 -0 0
1269 | 10
1270 |
1271 |
1272 |
1273 |
1274 |
1275 |
1276 |
1277 |
1278 |
1279 |
1280 |
1281 |
1282 |
1283 |
1284 | 0 0 0.5 0 -0 0
1285 |
1286 |
1287 | 2.5 0.15 1
1288 |
1289 |
1290 |
1291 |
1295 | 1 1 1 1
1296 |
1297 |
1298 | 0
1299 |
1300 |
1301 | 3.513 -6.651 0 0 -0 -1.5708
1302 | 0
1303 | 0
1304 | 0
1305 |
1306 |
1307 |
1308 |
1309 |
1310 | 2.15018 0.3 2.5
1311 |
1312 |
1313 | 0 0 1.25 0 -0 0
1314 | 10
1315 |
1316 |
1317 |
1318 |
1319 |
1320 |
1321 |
1322 |
1323 |
1324 |
1325 |
1326 |
1327 |
1328 |
1329 | 0 0 1.25 0 -0 0
1330 |
1331 |
1332 | 2.15018 0.3 2.5
1333 |
1334 |
1335 |
1336 |
1340 | 1 1 1 1
1341 |
1342 |
1343 | 0
1344 |
1345 |
1346 | 3.571 -5.956 0 0 -0 0
1347 | 0
1348 | 0
1349 | 0
1350 |
1351 |
1352 |
1353 |
1354 |
1355 | 1.9996 0.4 1
1356 |
1357 |
1358 | 0 0 0.5 0 -0 0
1359 | 10
1360 |
1361 |
1362 |
1363 |
1364 |
1365 |
1366 |
1367 |
1368 |
1369 |
1370 |
1371 |
1372 |
1373 |
1374 | 0 0 0.5 0 -0 0
1375 |
1376 |
1377 | 1.9996 0.4 1
1378 |
1379 |
1380 |
1381 |
1385 | 1 1 1 1
1386 |
1387 |
1388 | 0
1389 |
1390 |
1391 | 4.49 5.03 0 0 -0 -1.5708
1392 | 0
1393 | 0
1394 | 0
1395 |
1396 |
1397 |
1398 |
1399 |
1400 | 2.45 0.6 1
1401 |
1402 |
1403 | 0 0 0.5 0 -0 0
1404 | 10
1405 |
1406 |
1407 |
1408 |
1409 |
1410 |
1411 |
1412 |
1413 |
1414 |
1415 |
1416 |
1417 |
1418 |
1419 | 0 0 0.5 0 -0 0
1420 |
1421 |
1422 | 2.45 0.6 1
1423 |
1424 |
1425 |
1426 |
1430 | 1 1 1 1
1431 |
1432 |
1433 | 0
1434 |
1435 |
1436 | -6.281 5.964 0 0 -0 0
1437 | 0
1438 | 0
1439 | 0
1440 |
1441 | 1
1442 |
1443 |
1444 | 107 437000000
1445 | 109 140123648
1446 | 1721455960 35264714
1447 | 107437
1448 |
1449 | 0 0 0 0 -0 0
1450 | 1 1 1
1451 |
1452 | 0 0 0 0 -0 0
1453 | 0 0 0 0 -0 0
1454 | 0 0 0 0 -0 0
1455 | 0 0 0 0 -0 0
1456 |
1457 |
1458 |
1459 | 7 0 0 0 -0 0
1460 | 1 1 1
1461 |
1462 | 7 8 0 0 -0 0
1463 | 0 0 0 0 -0 0
1464 | 0 0 0 0 -0 0
1465 | 0 0 0 0 -0 0
1466 |
1467 |
1468 | 0.231 4.775 0 0 -0 0
1469 | 0 0 0 0 -0 0
1470 | 0 0 0 0 -0 0
1471 | 0 0 0 0 -0 0
1472 |
1473 |
1474 | 7.426 -5.638 0 0 -0 1.5708
1475 | 0 0 0 0 -0 0
1476 | 0 0 0 0 -0 0
1477 | 0 0 0 0 -0 0
1478 |
1479 |
1480 | 6.043 -5.671 0 0 -0 0
1481 | 0 0 0 0 -0 0
1482 | 0 0 0 0 -0 0
1483 | 0 0 0 0 -0 0
1484 |
1485 |
1486 | 6.621 -4.33 0 0 -0 0
1487 | 0 0 0 0 -0 0
1488 | 0 0 0 0 -0 0
1489 | 0 0 0 0 -0 0
1490 |
1491 |
1492 | 5.248 -7.055 0 0 -0 0
1493 | 0 0 0 0 -0 0
1494 | 0 0 0 0 -0 0
1495 | 0 0 0 0 -0 0
1496 |
1497 |
1498 | 7 -8 0 0 -0 0
1499 | 0 0 0 0 -0 0
1500 | 0 0 0 0 -0 0
1501 | 0 0 0 0 -0 0
1502 |
1503 |
1504 | 3.968 1.305 0 0 -0 0
1505 | 0 0 0 0 -0 0
1506 | 0 0 0 0 -0 0
1507 | 0 0 0 0 -0 0
1508 |
1509 |
1510 | 2.793 0.755 0 0 0 -1.5708
1511 | 0 0 0 0 -0 0
1512 | 0 0 0 0 -0 0
1513 | 0 0 0 0 -0 0
1514 |
1515 |
1516 | 3.968 0.205 0 0 -0 0
1517 | 0 0 0 0 -0 0
1518 | 0 0 0 0 -0 0
1519 | 0 0 0 0 -0 0
1520 |
1521 |
1522 | 4.041 0.719 0 0 0 -1.5708
1523 | 0 0 0 0 -0 0
1524 | 0 0 0 0 -0 0
1525 | 0 0 0 0 -0 0
1526 |
1527 |
1528 | 11.3832 5.80907 0 0 -0 0
1529 | 0 0 0 0 -0 0
1530 | 0 0 0 0 -0 0
1531 | 0 0 0 0 -0 0
1532 |
1533 |
1534 | 13.716 2.842 0 0 -0 0
1535 | 0 0 0 0 -0 0
1536 | 0 0 0 0 -0 0
1537 | 0 0 0 0 -0 0
1538 |
1539 |
1540 | -0.206 4.789 0 0 0 -1.5708
1541 | 0 0 0 0 -0 0
1542 | 0 0 0 0 -0 0
1543 | 0 0 0 0 -0 0
1544 |
1545 |
1546 | -3 0 0 0 0 -1.5708
1547 | 0 0 0 0 -0 0
1548 | 0 0 0 0 -0 0
1549 | 0 0 0 0 -0 0
1550 |
1551 |
1552 | -1.45 4.1945 0 0 0 -0.436605
1553 | 0 0 0 0 -0 0
1554 | 0 0 0 0 -0 0
1555 | 0 0 0 0 -0 0
1556 |
1557 |
1558 | 6.419 2.276 0 0 -0 0
1559 | 0 0 0 0 -0 0
1560 | 0 0 0 0 -0 0
1561 | 0 0 0 0 -0 0
1562 |
1563 |
1564 | 7.258 2.939 0 0 0 -1.5708
1565 | 0 0 0 0 -0 0
1566 | 0 0 0 0 -0 0
1567 | 0 0 0 0 -0 0
1568 |
1569 |
1570 | 9.308 1.014 0 0 -0 0
1571 | 0 0 0 0 -0 0
1572 | 0 0 0 0 -0 0
1573 | 0 0 0 0 -0 0
1574 |
1575 |
1576 | 9.811 -1.153 0 0 0 -1.5708
1577 | 0 0 0 0 -0 0
1578 | 0 0 0 0 -0 0
1579 | 0 0 0 0 -0 0
1580 |
1581 |
1582 | 14.9325 -1.80896 0 0 -0 0.000539
1583 | 0 0 0 0 -0 0
1584 | 0 0 0 0 -0 0
1585 | 0 0 0 0 -0 0
1586 |
1587 |
1588 | -1.462 -6.462 0 0 -0 0.785398
1589 | 0 0 0 0 -0 0
1590 | 0 0 0 0 -0 0
1591 | 0 0 0 0 -0 0
1592 |
1593 |
1594 | 1.126 -4.924 0 0 -0 0
1595 | 0 0 0 0 -0 0
1596 | 0 0 0 0 -0 0
1597 | 0 0 0 0 -0 0
1598 |
1599 |
1600 | 13.15 -3.75792 0 0 0 -1.5708
1601 | 0 0 0 0 -0 0
1602 | 0 0 0 0 -0 0
1603 | 0 0 0 0 -0 0
1604 |
1605 |
1606 | 10.611 -3.078 0 0 -0 0
1607 | 0 0 0 0 -0 0
1608 | 0 0 0 0 -0 0
1609 | 0 0 0 0 -0 0
1610 |
1611 |
1612 | 17 0 0 0 0 -1.5708
1613 | 0 0 0 0 -0 0
1614 | 0 0 0 0 -0 0
1615 | 0 0 0 0 -0 0
1616 |
1617 |
1618 | 10.513 -6.651 0 0 0 -1.5708
1619 | 0 0 0 0 -0 0
1620 | 0 0 0 0 -0 0
1621 | 0 0 0 0 -0 0
1622 |
1623 |
1624 | 10.571 -5.956 0 0 -0 0
1625 | 0 0 0 0 -0 0
1626 | 0 0 0 0 -0 0
1627 | 0 0 0 0 -0 0
1628 |
1629 |
1630 | 11.49 5.03 0 0 0 -1.5708
1631 | 0 0 0 0 -0 0
1632 | 0 0 0 0 -0 0
1633 | 0 0 0 0 -0 0
1634 |
1635 |
1636 | 0.719 5.964 0 0 -0 0
1637 | 0 0 0 0 -0 0
1638 | 0 0 0 0 -0 0
1639 | 0 0 0 0 -0 0
1640 |
1641 |
1642 |
1643 | 0 0 10 0 -0 0
1644 |
1645 |
1646 |
1647 |
1648 | 4.25318 -8.63238 62.8998 3.14159 1.57079 3.14159
1649 | orbit
1650 | perspective
1651 |
1652 |
1653 |
1654 |
1655 |
1656 |
--------------------------------------------------------------------------------