45#include <ros/service.h>
46#include <controller_manager_msgs/SwitchController.h>
47#include <control_msgs/QueryCalibrationState.h>
48#include <rm_msgs/StatusChange.h>
49#include <std_srvs/Empty.h>
50#include <std_srvs/SetBool.h>
51#include <std_srvs/Trigger.h>
55template <
class ServiceType>
62 if (!nh.param(
"service_name",
service_name_, service_name) && service_name.empty())
64 ROS_ERROR(
"Service name no defined (namespace: %s)", nh.getNamespace().c_str());
74 ServiceCallerBase(XmlRpc::XmlRpcValue& controllers, ros::NodeHandle& nh,
const std::string& service_name =
"")
77 if (controllers.hasMember(
"service_name"))
78 service_name_ =
static_cast<std::string
>(controllers[
"service_name"]);
81 service_name_ = service_name;
82 if (service_name.empty())
84 ROS_ERROR(
"Service name no defined (namespace: %s)", nh.getNamespace().c_str());
107 std::unique_lock<std::mutex> guard(mutex_, std::try_to_lock);
108 return !guard.owns_lock();
114 std::lock_guard<std::mutex> guard(mutex_);
115 if (!client_.call(service_))
117 ROS_INFO_ONCE(
"Failed to call service %s on %s. Retrying now ...",
typeid(ServiceType).name(),
118 service_name_.c_str());
119 if (fail_limit_ != 0)
122 if (fail_count_ >= fail_limit_)
124 ROS_ERROR_ONCE(
"Failed to call service %s on %s",
typeid(ServiceType).name(), service_name_.c_str());
134 std::thread* thread_{};
143 :
ServiceCallerBase<std_srvs::SetBool>(nh,
"/superpower_track_vision/change_color")
145 service_.request.data =
false;
150 service_.request.data = !service_.request.data;
172 :
ServiceCallerBase<controller_manager_msgs::SwitchController>(nh,
"/controller_manager/switch_controller")
174 service_.request.strictness = service_.request.BEST_EFFORT;
175 service_.request.start_asap =
true;
179 service_.request.start_controllers = controllers;
183 service_.request.stop_controllers = controllers;
189 return service_.response.ok;
212 return service_.response.is_calibrated;
222 service_.request.target = rm_msgs::StatusChangeRequest::ARMOR;
223 service_.request.exposure = rm_msgs::StatusChangeRequest::EXPOSURE_LEVEL_0;
224 service_.request.armor_target = rm_msgs::StatusChangeRequest::ARMOR_ALL;
231 service_.request.target = rm_msgs::StatusChangeRequest::ARMOR;
232 service_.request.exposure = rm_msgs::StatusChangeRequest::EXPOSURE_LEVEL_0;
233 service_.request.armor_target = rm_msgs::StatusChangeRequest::ARMOR_ALL;
241 service_.request.color =
242 robot_color_ ==
"blue" ? rm_msgs::StatusChangeRequest::RED : rm_msgs::StatusChangeRequest::BLUE;
243 ROS_INFO_STREAM(
"Set enemy color: " << (service_.request.color == service_.request.RED ?
"red" :
"blue"));
248 ROS_INFO_STREAM(
"Set enemy color failed: referee offline");
252 service_.request.color = color;
256 service_.request.color = service_.request.color == rm_msgs::StatusChangeRequest::RED;
260 service_.request.target = service_.request.target == rm_msgs::StatusChangeRequest::ARMOR;
264 service_.request.target = target;
268 service_.request.armor_target = service_.request.armor_target == rm_msgs::StatusChangeRequest::ARMOR_ALL;
272 service_.request.armor_target = armor_target;
276 service_.request.exposure = service_.request.exposure == rm_msgs::StatusChangeRequest::EXPOSURE_LEVEL_4 ?
277 rm_msgs::StatusChangeRequest::EXPOSURE_LEVEL_0 :
278 service_.request.exposure + 1;
282 return service_.request.color;
286 return service_.request.target;
290 return service_.request.armor_target;
294 return service_.request.exposure;
300 return service_.response.switch_is_success;
Definition service_caller.h:140
void changeColor()
Definition service_caller.h:148
ColorChangeServiceCaller(ros::NodeHandle &nh)
Definition service_caller.h:142
Definition service_caller.h:194
QueryCalibrationServiceCaller(ros::NodeHandle &nh, std::string &service_name)
Definition service_caller.h:200
QueryCalibrationServiceCaller(XmlRpc::XmlRpcValue &controllers, ros::NodeHandle &nh)
Definition service_caller.h:204
bool isCalibrated()
Definition service_caller.h:208
QueryCalibrationServiceCaller(ros::NodeHandle &nh)
Definition service_caller.h:196
Definition service_caller.h:57
std::mutex mutex_
Definition service_caller.h:135
int fail_limit_
Definition service_caller.h:136
bool isCalling()
Definition service_caller.h:105
ros::ServiceClient client_
Definition service_caller.h:132
ServiceCallerBase(ros::NodeHandle &nh, std::string &service_name)
Definition service_caller.h:69
ServiceCallerBase(XmlRpc::XmlRpcValue &controllers, ros::NodeHandle &nh, const std::string &service_name="")
Definition service_caller.h:74
std::string service_name_
Definition service_caller.h:131
int fail_count_
Definition service_caller.h:136
ServiceType & getService()
Definition service_caller.h:101
ServiceCallerBase(ros::NodeHandle &nh, const std::string &service_name="")
Definition service_caller.h:59
~ServiceCallerBase()
Definition service_caller.h:90
ServiceType service_
Definition service_caller.h:133
void callService()
Definition service_caller.h:94
void callingThread()
Definition service_caller.h:112
Definition service_caller.h:169
void startControllers(const std::vector< std::string > &controllers)
Definition service_caller.h:177
void stopControllers(const std::vector< std::string > &controllers)
Definition service_caller.h:181
bool getOk()
Definition service_caller.h:185
SwitchControllersServiceCaller(ros::NodeHandle &nh)
Definition service_caller.h:171
Definition service_caller.h:217
int getArmorTarget()
Definition service_caller.h:288
void setColor(uint8_t color)
Definition service_caller.h:250
void switchTargetType()
Definition service_caller.h:258
SwitchDetectionCaller(ros::NodeHandle &nh, std::string service_name)
Definition service_caller.h:228
void setTargetType(uint8_t target)
Definition service_caller.h:262
void setArmorTargetType(uint8_t armor_target)
Definition service_caller.h:270
int getTarget()
Definition service_caller.h:284
void switchArmorTargetType()
Definition service_caller.h:266
int getColor()
Definition service_caller.h:280
void switchEnemyColor()
Definition service_caller.h:254
uint8_t getExposureLevel()
Definition service_caller.h:292
bool getIsSwitch()
Definition service_caller.h:296
SwitchDetectionCaller(ros::NodeHandle &nh)
Definition service_caller.h:219
void setEnemyColor(const int &robot_id_, const std::string &robot_color_)
Definition service_caller.h:237
void switchExposureLevel()
Definition service_caller.h:274
Definition service_caller.h:156
void reset()
Definition service_caller.h:163
TrackerResetServiceCaller(ros::NodeHandle &nh)
Definition service_caller.h:158
Definition calibration_queue.h:44