-
Notifications
You must be signed in to change notification settings - Fork 277
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Visualze Frustum #2707
base: gz-sim9
Are you sure you want to change the base?
Visualze Frustum #2707
Conversation
@@ -0,0 +1,440 @@ | |||
/* | |||
* Copyright (C) 2020 Open Source Robotics Foundation |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
* Copyright (C) 2020 Open Source Robotics Foundation | |
* Copyright (C) 2024 Open Source Robotics Foundation |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@ahcorde thank you for reviewing.
Before proceeding, I have a small query.
Do you want me to,
- use
sign off and commit suggestion
for each review comment? - Or, do all the changes in my local branch and push it?
Additionally, for sign off, do I need to do to all the commits as I missed it in my first version, or commits from now onwards it's ok.
I'm bit confused.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Updated!
///////////////////////////////////////////////// | ||
void VisualizeFrustum::OnRefresh() | ||
{ | ||
gzmsg << "Refreshing topic list for Logical Camera Sensor messages." << std::endl; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
remove or maybe debug
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Updated!
@@ -0,0 +1,105 @@ | |||
/* | |||
* Copyright (C) 2020 Open Source Robotics Foundation |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
* Copyright (C) 2020 Open Source Robotics Foundation | |
* Copyright (C) 2024 Open Source Robotics Foundation |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Updated!
EntityComponentManager &_ecm) override; | ||
|
||
/// \brief Callback function to get data from the message | ||
/// \param[in]_msg FrustumSensor message |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
/// \param[in]_msg FrustumSensor message | |
/// \param[in] _msg FrustumSensor message |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Updated!
@@ -0,0 +1,78 @@ | |||
/* | |||
* Copyright (C) 2020 Open Source Robotics Foundation |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
* Copyright (C) 2020 Open Source Robotics Foundation | |
* Copyright (C) 2024 Open Source Robotics Foundation |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Updated!
Signed-off-by: Utkarsh <[email protected]>
32d5e9b
to
cbabb37
Compare
Signed-off-by: Utkarsh <[email protected]>
@ahcorde , thank you for review. I have addressed all the review comments. |
Thanks for the contribution. There are still stray spaces in the code. Do you mind fixing them: https://github.com/gazebosim/gz-sim/actions/runs/12514253900/job/35270143157?pr=2707 Also is there a chance that we can visualize the frustum without the need for pressing play? |
Signed-off-by: Utkarsh <[email protected]>
/// \brief Mutex for variable mutated by the checkbox and spinboxes | ||
/// callbacks. | ||
/// The variables are: msg | ||
public: std::mutex serviceMutex; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
include <mutex>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Updated!
if (!engine) | ||
{ | ||
gzerr << "Internal error: failed to load engine [" << engineName | ||
<< "]. VisualizeFrustum plugin won't work." << std::endl; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
include <ostream>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Updated!
{ | ||
auto parent = baseEntity; | ||
bool success = false; | ||
for (size_t i = 0u; i < frustumURIVec.size()-1; i++) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
include <cstddef>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Updated!
std::lock_guard<std::mutex> lock(this->dataPtr->serviceMutex); | ||
if (this->dataPtr->initialized) | ||
{ | ||
this->dataPtr->msg = std::move(_msg); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
include <utility>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Updated!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It looks like this->dataPtr->msg
is redundant member variable.
It's used in this method only, to initialize some other fields and invoking Set(Near|Far|FOV|AspectRatio)
methods
Maybe it could be removed?
@@ -0,0 +1,105 @@ | |||
/* | |||
* Copyright (C) 2024 Open Source Robotics Foundation |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
* Copyright (C) 2024 Open Source Robotics Foundation | |
* Copyright (C) 2025 Open Source Robotics Foundation |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Updated!
@@ -0,0 +1,438 @@ | |||
/* | |||
* Copyright (C) 2024 Open Source Robotics Foundation |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
* Copyright (C) 2024 Open Source Robotics Foundation | |
* Copyright (C) 2025 Open Source Robotics Foundation |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Updated!
@@ -0,0 +1,78 @@ | |||
/* | |||
* Copyright (C) 2024 Open Source Robotics Foundation |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
* Copyright (C) 2024 Open Source Robotics Foundation | |
* Copyright (C) 2025 Open Source Robotics Foundation |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Updated!
Signed-off-by: Utkarsh <[email protected]>
{ | ||
std::lock_guard<std::mutex> lock(this->dataPtr->serviceMutex); | ||
this->dataPtr->frustum->SetVisible(_value); | ||
gzerr << "Frustum Visual Display " << ((_value) ? "ON." : "OFF.") |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
is it really error level of logging?
} | ||
std::string childname = std::string( | ||
comp->Data()); | ||
if (nextstring.compare(childname) == 0) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
nextstring
and childname
are std::string
s, why not use == for it?
Like: if (nextstring == childname)
{ | ||
std::vector<transport::MessagePublisher> publishers; | ||
this->dataPtr->node.TopicInfo(topic, publishers); | ||
for (auto pub : publishers) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
do you really need a pub by copy? Just curious
// Get updated list | ||
std::vector<std::string> allTopics; | ||
this->dataPtr->node.TopicList(allTopics); | ||
for (auto topic : allTopics) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
maybe const reference could be enough for topic
?
{ | ||
auto frustumURIVec = common::split(common::trimmed( | ||
this->dataPtr->frustumString), "::"); | ||
if (frustumURIVec.size() > 0) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
size()
is already unsigned, maybe !frustumURIVec.empty()
is more c++-like
(and for some containers size() operation can be quite costly)
bool foundChild = false; | ||
for (auto child : children) | ||
{ | ||
std::string nextstring = frustumURIVec[i+1]; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
it can be const reference on a left side of expression, you don't need a full string copy here AFAIS
const std::string &nextstring = frustumURIVec[i+1];
or use auto
instead of std::string
|
||
this->dataPtr->visualDirty = true; | ||
|
||
for (auto data_values : this->dataPtr->msg.header().data()) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
const reference should be fine here I suppose
if (this->dataPtr->frustumString.compare( | ||
common::trimmed(data_values.value(0))) != 0) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
seems it's comparing of 2 strings, seems better to use !=
here
} | ||
} | ||
} | ||
if (this->dataPtr->topicList.size() > 0) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
same comment as above about size() and empty
std::lock_guard<std::mutex> lock(this->dataPtr->serviceMutex); | ||
if (this->dataPtr->initialized) | ||
{ | ||
this->dataPtr->msg = std::move(_msg); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
It looks like this->dataPtr->msg
is redundant member variable.
It's used in this method only, to initialize some other fields and invoking Set(Near|Far|FOV|AspectRatio)
methods
Maybe it could be removed?
@ntfshard , \cc: @ahcorde In my opinion, the changes are not needed for now. @ahcorde , please let me know your views on the same.. |
🎉 New feature
Summary
This PR mainly adds the visualization of Frustum.
We could see it was present in gazebo classic and from gazebo garden onwards the plugin/feature is not available.
Test it
$ Build gazebo from source.
$ . install/setup.sh
$ gz sim examples/worlds/visualize_frustum.sdf
Test Ref images,
Play the simulation.
Select the topic from scroll down.
Refresh it to get the "logical_camera/frustum" topic.
Subcriibed to "logical_camera/frustum".
Final output
Checklist
codecheck
passedSupporting PRs,