@@ -37,8 +37,11 @@ void EnvironmentVisualizationTool::CreatePointCloudTopics(
3737 this ->pubs .emplace (key, node.Advertise <gz::msgs::Float_V>(key));
3838 gz::msgs::Float_V msg;
3939 this ->floatFields .emplace (key, msg);
40+
4041 const double time = std::chrono::duration<double >(_info.simTime ).count ();
41- auto sess = _data->frame [key].CreateSession (time);
42+ const auto sess = _data->staticTime ?
43+ _data->frame [key].CreateSession (0.0 ) :
44+ _data->frame [key].CreateSession (time);
4245 if (!_data->frame [key].IsValid (sess))
4346 {
4447 gzerr << key << " data is out of time bounds. Nothing will be published"
@@ -76,7 +79,7 @@ void EnvironmentVisualizationTool::Step(
7679 {
7780 return ;
7881 }
79- auto now = std::chrono::steady_clock::now ();
82+ const auto now = std::chrono::steady_clock::now ();
8083 std::chrono::duration<double > dt (now - this ->lastTick );
8184
8285 if (this ->resample )
@@ -91,23 +94,25 @@ void EnvironmentVisualizationTool::Step(
9194 this ->lastTick = now;
9295 }
9396
94- // Progress session pointers to next time stamp
95- for (auto &it : this ->sessions )
97+ if (!_data->staticTime )
9698 {
97- auto res =
98- _data->frame [it.first ].StepTo (it.second ,
99- std::chrono::duration<double >(_info.simTime ).count ());
100- if (res.has_value ())
101- {
102- it.second = res.value ();
103- }
104- else
99+ // Progress session pointers to next time stamp
100+ for (auto &it : this ->sessions )
105101 {
106- gzerr << " Data does not exist beyond this time."
107- << " Not publishing new environment visualization data."
108- << std::endl;
109- this ->finishedTime = true ;
110- return ;
102+ const auto time = std::chrono::duration<double >(_info.simTime ).count ();
103+ const auto res = _data->frame [it.first ].StepTo (it.second , time);
104+ if (res.has_value ())
105+ {
106+ it.second = res.value ();
107+ }
108+ else
109+ {
110+ gzerr << " Data does not exist beyond this time (t = " << time << " )."
111+ << " Not publishing new environment visualization data."
112+ << std::endl;
113+ this ->finishedTime = true ;
114+ return ;
115+ }
111116 }
112117 }
113118
@@ -127,24 +132,24 @@ void EnvironmentVisualizationTool::Visualize(
127132{
128133 for (auto key : _data->frame .Keys ())
129134 {
130- const auto session = this ->sessions [key];
131- auto frame = _data->frame [key];
132- auto [lower_bound, upper_bound] = frame.Bounds (session);
133- auto step = upper_bound - lower_bound;
134- auto dx = step.X () / _xSamples;
135- auto dy = step.Y () / _ySamples;
136- auto dz = step.Z () / _zSamples;
135+ const auto & session = this ->sessions [key];
136+ const auto & frame = _data->frame [key];
137+ const auto [lower_bound, upper_bound] = frame.Bounds (session);
138+ const auto step = upper_bound - lower_bound;
139+ const auto dx = step.X () / _xSamples;
140+ const auto dy = step.Y () / _ySamples;
141+ const auto dz = step.Z () / _zSamples;
137142 std::size_t idx = 0 ;
138143 for (std::size_t x_steps = 0 ; x_steps < _xSamples; x_steps++)
139144 {
140- auto x = lower_bound.X () + x_steps * dx;
145+ const auto x = lower_bound.X () + x_steps * dx;
141146 for (std::size_t y_steps = 0 ; y_steps < _ySamples; y_steps++)
142147 {
143- auto y = lower_bound.Y () + y_steps * dy;
148+ const auto y = lower_bound.Y () + y_steps * dy;
144149 for (std::size_t z_steps = 0 ; z_steps < _zSamples; z_steps++)
145150 {
146- auto z = lower_bound.Z () + z_steps * dz;
147- auto res = frame.LookUp (session, math::Vector3d (x, y, z));
151+ const auto z = lower_bound.Z () + z_steps * dz;
152+ const auto res = frame.LookUp (session, math::Vector3d (x, y, z));
148153
149154 if (res.has_value ())
150155 {
@@ -185,21 +190,21 @@ void EnvironmentVisualizationTool::ResizeCloud(
185190 // Assume all data have same point cloud.
186191 gz::msgs::InitPointCloudPacked (pcMsg, " some_frame" , true ,
187192 {{" xyz" , gz::msgs::PointCloudPacked::Field::FLOAT32}});
188- auto numberOfPoints = _numXSamples * _numYSamples * _numZSamples;
193+ const auto numberOfPoints = _numXSamples * _numYSamples * _numZSamples;
189194 std::size_t dataSize{
190195 static_cast <std::size_t >(numberOfPoints * pcMsg.point_step ())};
191196 pcMsg.mutable_data ()->resize (dataSize);
192197 pcMsg.set_height (1 );
193198 pcMsg.set_width (numberOfPoints);
194199
195- auto session = this ->sessions [this ->pubs .begin ()->first ];
196- auto frame = _data->frame [this ->pubs .begin ()->first ];
197- auto [lower_bound, upper_bound] = frame.Bounds (session);
200+ const auto & session = this ->sessions [this ->pubs .begin ()->first ];
201+ const auto & frame = _data->frame [this ->pubs .begin ()->first ];
202+ const auto [lower_bound, upper_bound] = frame.Bounds (session);
198203
199- auto step = upper_bound - lower_bound;
200- auto dx = step.X () / _numXSamples;
201- auto dy = step.Y () / _numYSamples;
202- auto dz = step.Z () / _numZSamples;
204+ const auto step = upper_bound - lower_bound;
205+ const auto dx = step.X () / _numXSamples;
206+ const auto dy = step.Y () / _numYSamples;
207+ const auto dz = step.Z () / _numZSamples;
203208
204209 // Populate point cloud
205210 gz::msgs::PointCloudPackedIterator<float > xIter (pcMsg, " x" );
@@ -208,22 +213,22 @@ void EnvironmentVisualizationTool::ResizeCloud(
208213
209214 for (std::size_t x_steps = 0 ; x_steps < _numXSamples; x_steps++)
210215 {
211- auto x = lower_bound.X () + x_steps * dx;
216+ const auto x = lower_bound.X () + x_steps * dx;
212217 for (std::size_t y_steps = 0 ; y_steps < _numYSamples; y_steps++)
213218 {
214- auto y = lower_bound.Y () + y_steps * dy;
219+ const auto y = lower_bound.Y () + y_steps * dy;
215220 for (std::size_t z_steps = 0 ; z_steps < _numZSamples; z_steps++)
216221 {
217- auto z = lower_bound.Z () + z_steps * dz;
218- auto coords = getGridFieldCoordinates (_ecm, math::Vector3d{x, y, z},
222+ const auto z = lower_bound.Z () + z_steps * dz;
223+ const auto coords = getGridFieldCoordinates (_ecm, math::Vector3d{x, y, z},
219224 _data);
220225
221226 if (!coords.has_value ())
222227 {
223228 continue ;
224229 }
225230
226- auto pos = coords.value ();
231+ const auto pos = coords.value ();
227232 *xIter = pos.X ();
228233 *yIter = pos.Y ();
229234 *zIter = pos.Z ();
0 commit comments