Primo tentativo di Override della gestione segnali shutdown

This commit is contained in:
2019-11-04 14:29:47 +01:00
parent 3f34c8fbc8
commit e21d5a13e3
5 changed files with 33 additions and 8 deletions

View File

@@ -3,6 +3,7 @@
#endif // ROBOGLUE_UTILS_H #endif // ROBOGLUE_UTILS_H
#include <signal.h>
#include <iostream> #include <iostream>
#include <stdlib.h> #include <stdlib.h>
#include <ros/ros.h> #include <ros/ros.h>

View File

@@ -16,13 +16,17 @@
#include <roboglue_ros/roboglue_utils.h> /// utility function library #include <roboglue_ros/roboglue_utils.h> /// utility function library
#include <moveit/move_group_interface/move_group_interface.h> #include <moveit/move_group_interface/move_group_interface.h>
//////////////////////////////////////////// ////////////////////////////////////////////
///////// FUNCTION DECLARATIONS /////////// ///////// FUNCTION DECLARATIONS ///////////
////////////////////////////////////////// //////////////////////////////////////////
void testFunction( ros::Publisher* trj_pub); void testFunction( ros::Publisher* trj_pub);
trajectory_msgs::JointTrajectory composeTrjMessage(std::vector<double> jtpos, std::vector<std::string> jnames); trajectory_msgs::JointTrajectory composeTrjMessage(std::vector<double> jtpos, std::vector<std::string> jnames);
void sigintHandler(int sig, internalState* is){
ROS_DEBUG("Signal %d Received", sig);
if (is->isRunning) is->isRunning = false;
//ros::shutdown();
}
/////////////////////////////////////////// ///////////////////////////////////////////
///////// ROS CALLBACKS ////////////////// ///////// ROS CALLBACKS //////////////////
///////////////////////////////////////// /////////////////////////////////////////
@@ -201,8 +205,11 @@ int main(int argc, char **argv) {
/// setup node parameters /// /// setup node parameters ///
ros::init(argc, argv, "roboglue_follower"); ros::init(argc, argv, "roboglue_follower");
//TODO: ros::init(argc, argv, "roboglue_follower", ros::init_options::NoSigintHandler);
ros::NodeHandle nh; ros::NodeHandle nh;
publisherMap publishers; publisherMap publishers;
/// TODO: override default signal handler ///
// signal(SIGINT, boost::bind(sigintHandler, _1, &is));
///read parameters from server /// ///read parameters from server ///
nh.getParam("/roboglue_ros_recorder/parameter_ns", common_par.param_ns); nh.getParam("/roboglue_ros_recorder/parameter_ns", common_par.param_ns);
loadCommonParameters(&nh, &common_par); loadCommonParameters(&nh, &common_par);
@@ -217,7 +224,7 @@ int main(int argc, char **argv) {
/// set spinner rate /// /// set spinner rate ///
ros::Rate loop_rate(common_par.loopRate); ros::Rate loop_rate(common_par.loopRate);
/// set console log level /// /// set console log level ///
ros::console::set_logger_level(ROSCONSOLE_DEFAULT_NAME, ros::console::levels::Info); ros::console::set_logger_level(ROSCONSOLE_DEFAULT_NAME, ros::console::levels::Debug);
ROS_INFO("Follower Node Started"); ROS_INFO("Follower Node Started");
/// subscribe to incoming topics /// /// subscribe to incoming topics ///
@@ -281,10 +288,14 @@ int main(int argc, char **argv) {
} }
ROS_DEBUG_ONCE("Follower Node Looping"); ROS_DEBUG_ONCE("Follower Node Looping");
ros::spinOnce(); ros::spinOnce();
if(ros::isShuttingDown()){
declareShutdown(&publishers, &common_par);
ros::spinOnce();
}
loop_rate.sleep(); loop_rate.sleep();
} }
ros::shutdown();
////////////////////////////////////////////////////// //////////////////////////////////////////////////////
declareShutdown(&publishers, &common_par);
return 0; return 0;
} }
//////////////////////////////////////// ////////////////////////////////////////

View File

@@ -261,9 +261,8 @@ int main(int argc, char **argv) {
nh.getParam("/roboglue_ros_recorder/point_group_mode", robot_data.point_group_mode); nh.getParam("/roboglue_ros_recorder/point_group_mode", robot_data.point_group_mode);
nh.getParam("/roboglue_ros_recorder/planning_mode", robot_data.planning_mode); nh.getParam("/roboglue_ros_recorder/planning_mode", robot_data.planning_mode);
/// set console log level /// /// set console log level ///
ros::console::set_logger_level(ROSCONSOLE_DEFAULT_NAME, ros::console::levels::Warn); ros::console::set_logger_level(ROSCONSOLE_DEFAULT_NAME, ros::console::levels::Debug);
/// set spinner rate /// /// set spinner rate ///
ros::Rate loop_rate(common_par.loopRate); ros::Rate loop_rate(common_par.loopRate);
ROS_INFO("Recorder Node Started"); ROS_INFO("Recorder Node Started");
@@ -323,6 +322,10 @@ int main(int argc, char **argv) {
} }
ROS_DEBUG_ONCE("Recorder Node Looping"); ROS_DEBUG_ONCE("Recorder Node Looping");
ros::spinOnce(); ros::spinOnce();
if(ros::isShuttingDown()){
declareShutdown(&publishers, &common_par);
ros::spinOnce();
}
///////////////////////////////////////// /////////////////////////////////////////
/////////// PLAY FILE /////////////////// /////////// PLAY FILE ///////////////////
///////////////////////////////////////// /////////////////////////////////////////
@@ -430,7 +433,6 @@ int main(int argc, char **argv) {
} }
loop_rate.sleep(); loop_rate.sleep();
} }
declareShutdown(&publishers, &common_par);
return 0; return 0;
} }
//////////////////////////////////////// ////////////////////////////////////////

View File

@@ -177,6 +177,10 @@ int main(int argc, char **argv) {
} }
ROS_DEBUG_ONCE("Relay Node Looping"); ROS_DEBUG_ONCE("Relay Node Looping");
ros::spinOnce(); ros::spinOnce();
if(ros::isShuttingDown()){
declareShutdown(&publishers, &common_par);
ros::spinOnce();
}
loop_rate.sleep(); loop_rate.sleep();
} }
/////////////////////////////////////// ///////////////////////////////////////
@@ -187,6 +191,5 @@ int main(int argc, char **argv) {
} catch (mqtt::exception &e) { } catch (mqtt::exception &e) {
ROS_DEBUG("Error Disconnecting MQTT: [%s]", e.what()); ROS_DEBUG("Error Disconnecting MQTT: [%s]", e.what());
} }
declareShutdown(&publishers, &common_par);
return 0; return 0;
} }

View File

@@ -1,7 +1,10 @@
#include <roboglue_ros/roboglue_utils.h> #include <roboglue_ros/roboglue_utils.h>
/// Utilities funtion used in roboglue ros nodes /// /// Utilities funtion used in roboglue ros nodes ///
///
////////////////////////////////////////////////////
/////////////// NODE MANAGEMENT ///////////////////
//////////////////////////////////////////////////
bool loadCommonParameters(ros::NodeHandle* nh, COMMON_parameters *p) { bool loadCommonParameters(ros::NodeHandle* nh, COMMON_parameters *p) {
nh->getParam(p->param_ns+"INstate", p->ros_topics.stateSub); nh->getParam(p->param_ns+"INstate", p->ros_topics.stateSub);
nh->getParam(p->param_ns+"INcommands", p->ros_topics.commandSub); nh->getParam(p->param_ns+"INcommands", p->ros_topics.commandSub);
@@ -32,6 +35,11 @@ void declareShutdown(publisherMap* publishers, COMMON_parameters* common_par){
publishers->find(common_par->ros_topics.interfacePub)->second->publish(common_par->shutdownMsg); publishers->find(common_par->ros_topics.interfacePub)->second->publish(common_par->shutdownMsg);
} }
////////////////////////////////////////////////////
/////////////// OTHER /////////////////////////////
//////////////////////////////////////////////////
geometry_msgs::TwistStamped jstr2Twist(nlohmann::json cval){ geometry_msgs::TwistStamped jstr2Twist(nlohmann::json cval){
static uint32_t seqId = 0; static uint32_t seqId = 0;
geometry_msgs::TwistStamped tw; geometry_msgs::TwistStamped tw;