Skip to content

Commit 99f95e8

Browse files
committed
added support for detachable joint service
1 parent 64a87d5 commit 99f95e8

3 files changed

Lines changed: 52 additions & 0 deletions

File tree

ros_gz_bridge/src/service_factories/ros_gz_interfaces.cpp

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#include <gz/msgs/world_control.pb.h>
1717
#include <gz/msgs/entity.pb.h>
1818
#include <gz/msgs/entity_factory.pb.h>
19+
#include <gz/msgs/dynamic_detachable_joint.pb.h>
1920
#include <gz/msgs/pose.pb.h>
2021

2122
#include <memory>
@@ -26,6 +27,7 @@
2627
#include "ros_gz_interfaces/srv/delete_entity.hpp"
2728
#include "ros_gz_interfaces/srv/spawn_entity.hpp"
2829
#include "ros_gz_interfaces/srv/set_entity_pose.hpp"
30+
#include "ros_gz_interfaces/srv/attach_detach.hpp"
2931
#include "ros_gz_bridge/convert/ros_gz_interfaces.hpp"
3032

3133
#include "service_factory.hpp"
@@ -91,6 +93,19 @@ get_service_factory__ros_gz_interfaces(
9193
>(ros_type_name, "gz.msgs.Pose", "gz.msgs.Boolean");
9294
}
9395

96+
if (
97+
ros_type_name == "ros_gz_interfaces/srv/AttachDetach" &&
98+
(gz_req_type_name.empty() || gz_req_type_name == "gz.msgs.AttachDetachRequest") &&
99+
(gz_rep_type_name.empty() || gz_rep_type_name == "gz.msgs.AttachDetachResponse"))
100+
{
101+
return std::make_shared<
102+
ServiceFactory<
103+
ros_gz_interfaces::srv::AttachDetach,
104+
gz::msgs::AttachDetachRequest,
105+
gz::msgs::AttachDetachResponse>
106+
>(ros_type_name, "gz.msgs.AttachDetachRequest", "gz.msgs.AttachDetachResponse");
107+
}
108+
94109
return nullptr;
95110
}
96111

@@ -131,6 +146,17 @@ convert_ros_to_gz(
131146
convert_ros_to_gz(ros_req.pose, gz_req);
132147
}
133148

149+
template<>
150+
void
151+
convert_ros_to_gz(
152+
const ros_gz_interfaces::srv::AttachDetach::Request & ros_req,
153+
gz::msgs::AttachDetachRequest & gz_req)
154+
{
155+
gz_req.set_child_model_name(ros_req.child_model_name);
156+
gz_req.set_child_link_name(ros_req.child_link_name);
157+
gz_req.set_command(ros_req.command);
158+
}
159+
134160
template<>
135161
void
136162
convert_gz_to_ros(
@@ -167,6 +193,16 @@ convert_gz_to_ros(
167193
ros_res.success = gz_rep.data();
168194
}
169195

196+
template<>
197+
void
198+
convert_gz_to_ros(
199+
const gz::msgs::AttachDetachResponse & gz_rep,
200+
ros_gz_interfaces::srv::AttachDetach::Response & ros_res)
201+
{
202+
ros_res.success = gz_rep.success();
203+
ros_res.message = gz_rep.message();
204+
}
205+
170206
template<>
171207
bool
172208
send_response_on_error(ros_gz_interfaces::srv::ControlWorld::Response & ros_res)
@@ -206,4 +242,13 @@ send_response_on_error(ros_gz_interfaces::srv::SetEntityPose::Response & ros_res
206242
ros_res.success = false;
207243
return true;
208244
}
245+
246+
template<>
247+
bool
248+
send_response_on_error(ros_gz_interfaces::srv::AttachDetach::Response & ros_res)
249+
{
250+
ros_res.success = false;
251+
ros_res.message = "Gazebo bridge error";
252+
return true;
253+
}
209254
} // namespace ros_gz_bridge

ros_gz_interfaces/CMakeLists.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ set(srv_files
4545
"srv/DeleteEntity.srv"
4646
"srv/SetEntityPose.srv"
4747
"srv/SpawnEntity.srv"
48+
"srv/AttachDetach.srv"
4849
)
4950

5051
rosidl_generate_interfaces(${PROJECT_NAME}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
string child_model_name # Message to create a new entity
2+
string child_link_name
3+
string command
4+
---
5+
bool success # Return true if spawned successfully.
6+
string message

0 commit comments

Comments
 (0)