|
16 | 16 | #include <gz/msgs/world_control.pb.h> |
17 | 17 | #include <gz/msgs/entity.pb.h> |
18 | 18 | #include <gz/msgs/entity_factory.pb.h> |
| 19 | +#include <gz/msgs/dynamic_detachable_joint.pb.h> |
19 | 20 | #include <gz/msgs/pose.pb.h> |
20 | 21 |
|
21 | 22 | #include <memory> |
|
26 | 27 | #include "ros_gz_interfaces/srv/delete_entity.hpp" |
27 | 28 | #include "ros_gz_interfaces/srv/spawn_entity.hpp" |
28 | 29 | #include "ros_gz_interfaces/srv/set_entity_pose.hpp" |
| 30 | +#include "ros_gz_interfaces/srv/attach_detach.hpp" |
29 | 31 | #include "ros_gz_bridge/convert/ros_gz_interfaces.hpp" |
30 | 32 |
|
31 | 33 | #include "service_factory.hpp" |
@@ -91,6 +93,19 @@ get_service_factory__ros_gz_interfaces( |
91 | 93 | >(ros_type_name, "gz.msgs.Pose", "gz.msgs.Boolean"); |
92 | 94 | } |
93 | 95 |
|
| 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 | + |
94 | 109 | return nullptr; |
95 | 110 | } |
96 | 111 |
|
@@ -131,6 +146,17 @@ convert_ros_to_gz( |
131 | 146 | convert_ros_to_gz(ros_req.pose, gz_req); |
132 | 147 | } |
133 | 148 |
|
| 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 | + |
134 | 160 | template<> |
135 | 161 | void |
136 | 162 | convert_gz_to_ros( |
@@ -167,6 +193,16 @@ convert_gz_to_ros( |
167 | 193 | ros_res.success = gz_rep.data(); |
168 | 194 | } |
169 | 195 |
|
| 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 | + |
170 | 206 | template<> |
171 | 207 | bool |
172 | 208 | 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 |
206 | 242 | ros_res.success = false; |
207 | 243 | return true; |
208 | 244 | } |
| 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 | +} |
209 | 254 | } // namespace ros_gz_bridge |
0 commit comments