Skip to content

Commit ac7f92d

Browse files
committed
small improvements from Chat
1 parent 27cb4bf commit ac7f92d

File tree

2 files changed

+34
-33
lines changed

2 files changed

+34
-33
lines changed

mission/landmark_server/src/Landmark_server.cpp

Lines changed: 23 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -30,51 +30,42 @@ LandmarkServerNode::LandmarkServerNode(const rclcpp::NodeOptions& options)
3030

3131
}
3232

33-
void LandmarkServerNode::landmarksRecievedCallback(
33+
void LandmarkServerNode::landmarksReceivedCallback(
3434
const vortex_msgs::msg::LandmarkArray::SharedPtr msg)
3535
{
36-
if (!storedLandmarks_) {
37-
storedLandmarks_ = std::make_shared<vortex_msgs::msg::LandmarkArray>();
38-
}
36+
std::lock_guard<std::mutex> lock(storedLandmarksMutex_);
3937

40-
for (const auto &new_landmark : msg->landmarks)
38+
for (auto &landmark : msg->landmarks)
4139
{
42-
vortex_msgs::msg::Landmark landmark_with_id = new_landmark;
40+
auto landmark_with_id = landmark;
4341

44-
//Filtrering function that assigns an ID to the landmarkArray, logic not implemented yet
45-
uint32_t id = assignID(landmark_with_id);
42+
// Assign unique ID (logic not implemented yet)
43+
uint32_t id = assignID(landmark_with_id);
4644
landmark_with_id.id = id;
4745

48-
// Check if the ID is already stored, in that case just update position
49-
bool found = false;
50-
for (auto &stored : storedLandmarks_->landmarks)
51-
{
52-
if (stored.id == id)
53-
{
54-
55-
stored.pose = landmark_with_id.pose;
56-
found = true;
57-
RCLCPP_INFO(this->get_logger(),
58-
"Updated landmark #%u (type=%u, subtype=%u)",
59-
id,
60-
landmark_with_id.type,
61-
landmark_with_id.subtype);
62-
break;
63-
}
64-
}
46+
// Check if already stored
47+
auto it = std::find_if(
48+
storedLandmarks_->landmarks.begin(),
49+
storedLandmarks_->landmarks.end(),
50+
[id](const auto &stored) { return stored.id == id; });
51+
52+
if (it != storedLandmarks_->landmarks.end()) {
53+
it->pose = landmark_with_id.pose;
54+
RCLCPP_INFO(this->get_logger(),
55+
"Updated landmark #%u (type=%u, subtype=%u)",
56+
id, landmark_with_id.type, landmark_with_id.subtype);
6557

66-
//If the ID is new
67-
if (!found)
68-
{
58+
59+
60+
} else {
6961
storedLandmarks_->landmarks.push_back(landmark_with_id);
7062
RCLCPP_INFO(this->get_logger(),
7163
"Added new landmark #%u (type=%u, subtype=%u)",
72-
id,
73-
landmark_with_id.type,
74-
landmark_with_id.subtype);
64+
id, landmark_with_id.type, landmark_with_id.subtype);
7565
}
7666
}
7767

68+
7869
RCLCPP_INFO(this->get_logger(),
7970
"Total stored landmarks: %zu",
8071
storedLandmarks_->landmarks.size());
@@ -83,6 +74,7 @@ void LandmarkServerNode::landmarksRecievedCallback(
8374

8475

8576

77+
8678
void LandmarkServerNode::publishStoredLandmarks()
8779
{
8880
if (!storedLandmarks_ || storedLandmarks_->landmarks.empty()) {

mission/landmark_server/src/Landmark_server.hpp

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@
1818
#include <tf2/transform_datatypes.h>
1919
#include <tf2_geometry_msgs/tf2_geometry_msgs.hpp>
2020

21+
#include <mutex>
22+
23+
2124
namespace landmark_server {
2225

2326
/**
@@ -60,7 +63,7 @@ class LandmarkServerNode : public rclcpp::Node {
6063
*
6164
* @param msg The shared pointer to the received landmark array message.
6265
*/
63-
void landmarksRecievedCallback(
66+
void landmarksReceivedCallback(
6467
const vortex_msgs::msg::LandmarkArray::SharedPtr msg);
6568

6669
/**
@@ -174,12 +177,18 @@ class LandmarkServerNode : public rclcpp::Node {
174177
const std::shared_ptr<rclcpp_action::ServerGoalHandle<
175178
vortex_msgs::action::FilteredLandmarks>> goal_handle);
176179

177-
uint32_t assignID(const vortex_msgs::msg::Landmark &landmark);
178180

179181
private:
180182
rclcpp::TimerBase::SharedPtr timer_;
181183

182184
void publishStoredLandmarks();
185+
186+
std::mutex storedLandmarksMutex_;
187+
188+
uint32_t assignID(const vortex_msgs::msg::Landmark &landmark);
189+
190+
191+
183192
};
184193

185194
} // namespace landmark_server

0 commit comments

Comments
 (0)