Skip to content

Commit 187ee0e

Browse files
authored
Merge pull request #327 from gazebosim/merge_3_6_20230224
3 -> 6
2 parents e03feb1 + fc7fa51 commit 187ee0e

File tree

2 files changed

+28
-17
lines changed

2 files changed

+28
-17
lines changed

src/CameraSensor.cc

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -290,6 +290,11 @@ bool CameraSensor::Load(const sdf::Sensor &_sdf)
290290
if (this->Topic().empty())
291291
this->SetTopic("/camera");
292292

293+
if (!_sdf.CameraSensor()->CameraInfoTopic().empty())
294+
{
295+
this->dataPtr->infoTopic = _sdf.CameraSensor()->CameraInfoTopic();
296+
}
297+
293298
this->dataPtr->pub =
294299
this->dataPtr->node.Advertise<msgs::Image>(
295300
this->Topic());
@@ -581,17 +586,17 @@ std::string CameraSensor::InfoTopic() const
581586
//////////////////////////////////////////////////
582587
bool CameraSensor::AdvertiseInfo()
583588
{
584-
// TODO(anyone) Make info topic configurable from SDF
585-
// Info topic must be at same level as image topic
586-
auto parts = common::Split(this->Topic(), '/');
587-
parts.pop_back();
588-
589-
for (const auto &part : parts)
589+
if (this->dataPtr->infoTopic.empty())
590590
{
591-
if (!part.empty())
592-
this->dataPtr->infoTopic += "/" + part;
591+
auto parts = common::Split(this->Topic(), '/');
592+
parts.pop_back();
593+
for (const auto &part : parts)
594+
{
595+
if (!part.empty())
596+
this->dataPtr->infoTopic += "/" + part;
597+
}
598+
this->dataPtr->infoTopic += "/camera_info";
593599
}
594-
this->dataPtr->infoTopic += "/camera_info";
595600

596601
return this->AdvertiseInfo(this->dataPtr->infoTopic);
597602
}

src/Camera_TEST.cc

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,8 @@ sdf::ElementPtr cameraToBadSdf()
4848

4949
sdf::ElementPtr CameraToSdf(const std::string &_type,
5050
const std::string &_name, double _updateRate,
51-
const std::string &_topic, bool _alwaysOn, bool _visualize)
51+
const std::string &_topic, const std::string &_cameraInfoTopic,
52+
bool _alwaysOn, bool _visualize)
5253
{
5354
std::ostringstream stream;
5455
stream
@@ -62,6 +63,8 @@ sdf::ElementPtr CameraToSdf(const std::string &_type,
6263
<< " <always_on>"<< _alwaysOn <<"</always_on>"
6364
<< " <visualize>" << _visualize << "</visualize>"
6465
<< " <camera>"
66+
<< " <camera_info_topic>" << _cameraInfoTopic
67+
<< "</camera_info_topic>"
6568
<< " <horizontal_fov>.75</horizontal_fov>"
6669
<< " <image>"
6770
<< " <width>640</width>"
@@ -146,8 +149,8 @@ TEST(Camera_TEST, CreateCamera)
146149
{
147150
gz::sensors::Manager mgr;
148151

149-
sdf::ElementPtr camSdf = CameraToSdf("camera", "my_camera", 60.0, "/cam",
150-
true, true);
152+
sdf::ElementPtr camSdf = CameraToSdf("camera", "my_camera", 60.0,
153+
"/cam", "my_camera/camera_info", true, true);
151154

152155
// Create a CameraSensor
153156
gz::sensors::CameraSensor *cam =
@@ -158,7 +161,7 @@ TEST(Camera_TEST, CreateCamera)
158161

159162
// Check topics
160163
EXPECT_EQ("/cam", cam->Topic());
161-
EXPECT_EQ("/camera_info", cam->InfoTopic());
164+
EXPECT_EQ("my_camera/camera_info", cam->InfoTopic());
162165

163166
// however camera is not loaded because a rendering scene is missing so
164167
// updates will not be successful and image size will be 0
@@ -190,32 +193,35 @@ TEST(Camera_TEST, Topic)
190193
// Default topic
191194
{
192195
const std::string topic;
193-
auto cameraSdf = CameraToSdf(type, name, updateRate, topic, alwaysOn,
194-
visualize);
196+
const std::string cameraInfoTopic;
197+
auto cameraSdf = CameraToSdf(type, name, updateRate, topic, cameraInfoTopic,
198+
alwaysOn, visualize);
195199

196200
auto camera = mgr.CreateSensor<ignition::sensors::CameraSensor>(cameraSdf);
197201
ASSERT_NE(nullptr, camera);
198202
EXPECT_NE(gz::sensors::NO_SENSOR, camera->Id());
199203
EXPECT_EQ("/camera", camera->Topic());
204+
EXPECT_EQ("/camera_info", camera->InfoTopic());
200205
}
201206

202207
// Convert to valid topic
203208
{
204209
const std::string topic = "/topic with spaces/@~characters//";
205-
auto cameraSdf = CameraToSdf(type, name, updateRate, topic, alwaysOn,
210+
auto cameraSdf = CameraToSdf(type, name, updateRate, topic, "", alwaysOn,
206211
visualize);
207212

208213
auto camera = mgr.CreateSensor<ignition::sensors::CameraSensor>(cameraSdf);
209214
ASSERT_NE(nullptr, camera);
210215
EXPECT_NE(gz::sensors::NO_SENSOR, camera->Id());
211216

212217
EXPECT_EQ("/topic_with_spaces/characters", camera->Topic());
218+
EXPECT_EQ("/topic_with_spaces/camera_info", camera->InfoTopic());
213219
}
214220

215221
// Invalid topic
216222
{
217223
const std::string topic = "@@@";
218-
auto cameraSdf = CameraToSdf(type, name, updateRate, topic, alwaysOn,
224+
auto cameraSdf = CameraToSdf(type, name, updateRate, topic, "", alwaysOn,
219225
visualize);
220226

221227
auto sensor = mgr.CreateSensor<gz::sensors::CameraSensor>(cameraSdf);

0 commit comments

Comments
 (0)