Prima implementazione dell'homing, i giunti vanno tutti a 0
This commit is contained in:
@@ -97,7 +97,7 @@ typedef struct {
|
|||||||
robot_model::RobotModelConstPtr kine_model;
|
robot_model::RobotModelConstPtr kine_model;
|
||||||
robot_state::RobotStatePtr kine_state;
|
robot_state::RobotStatePtr kine_state;
|
||||||
std::vector<std::string> joint_names;
|
std::vector<std::string> joint_names;
|
||||||
std::map<double> joint_homes;
|
std::map<std::string, double> joint_homes;
|
||||||
} robotData;
|
} robotData;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
@@ -112,4 +112,5 @@ geometry_msgs::TwistStamped lockTwistPose(geometry_msgs::TwistStamped, geometry_
|
|||||||
geometry_msgs::PoseStamped twist2Pose(geometry_msgs::TwistStamped);
|
geometry_msgs::PoseStamped twist2Pose(geometry_msgs::TwistStamped);
|
||||||
double e3dist(geometry_msgs::Twist, geometry_msgs::Twist);
|
double e3dist(geometry_msgs::Twist, geometry_msgs::Twist);
|
||||||
double rad2deg(double ang);
|
double rad2deg(double ang);
|
||||||
|
double deg2rad(double ang);
|
||||||
bool checkJointJump(moveit_msgs::RobotTrajectoryPtr, double);
|
bool checkJointJump(moveit_msgs::RobotTrajectoryPtr, double);
|
||||||
|
|||||||
@@ -22,12 +22,12 @@
|
|||||||
//////////////////////////////////////////
|
//////////////////////////////////////////
|
||||||
void testFunction( ros::Publisher* trj_pub);
|
void testFunction( ros::Publisher* trj_pub);
|
||||||
trajectory_msgs::JointTrajectory composeTrjMessage(std::vector<double> jtpos);
|
trajectory_msgs::JointTrajectory composeTrjMessage(std::vector<double> jtpos);
|
||||||
bool resetModelJointsHome(geometry_msgs::Pose, bool);
|
void resetModelJointsHome(robotData*);
|
||||||
|
|
||||||
///////////////////////////////////////////
|
///////////////////////////////////////////
|
||||||
///////// ROS CALLBACKS //////////////////
|
///////// ROS CALLBACKS //////////////////
|
||||||
/////////////////////////////////////////
|
/////////////////////////////////////////
|
||||||
void commandCallback(const std_msgs::String::ConstPtr& msg, internalState* is, positionData* pos) {
|
void commandCallback(const std_msgs::String::ConstPtr& msg, internalState* is, publisherMap* pubs, positionData* pos, robotData* rdata) {
|
||||||
ROS_DEBUG("Received command: [%s]", msg->data.c_str());
|
ROS_DEBUG("Received command: [%s]", msg->data.c_str());
|
||||||
try {
|
try {
|
||||||
nlohmann::json c = nlohmann::json::parse(msg->data.c_str());
|
nlohmann::json c = nlohmann::json::parse(msg->data.c_str());
|
||||||
@@ -47,9 +47,22 @@ void commandCallback(const std_msgs::String::ConstPtr& msg, internalState* is, p
|
|||||||
}
|
}
|
||||||
else ROS_ERROR("Invalid acton");
|
else ROS_ERROR("Invalid acton");
|
||||||
} else if (!command.compare("RECORD") || !command.compare("PLAY") || !command.compare("OPEN")) {
|
} else if (!command.compare("RECORD") || !command.compare("PLAY") || !command.compare("OPEN")) {
|
||||||
return;
|
|
||||||
} else if (!command.compare("HOME")) {
|
} else if (!command.compare("HOME")) {
|
||||||
// Chiamata alla funzione di reset dei giunti nel modello
|
// Chiamata alla funzione di reset dei giunti nel modello
|
||||||
|
resetModelJointsHome(rdata);
|
||||||
|
if (!params["execute"].get<bool>()){
|
||||||
|
ROS_DEBUG("Autosetting joints to Home Position");
|
||||||
|
ROS_WARN("Remote execution of homing not SAFE yet!!");
|
||||||
|
std::vector<double> jPos;
|
||||||
|
rdata->kine_state->copyJointGroupPositions(rdata->joint_modelGroup, jPos);
|
||||||
|
for (std::size_t i = 0; i < rdata->joint_names.size(); ++i) {
|
||||||
|
ROS_DEBUG_COND(true,"Joint %s: %f", rdata->joint_names[i].c_str(), rad2deg(jPos[i]));
|
||||||
|
}
|
||||||
|
pubs->at("trj_pub")->publish(composeTrjMessage(jPos));
|
||||||
|
} else {
|
||||||
|
ROS_WARN("Joint model state set to Home, robot still in last position!!");
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
ROS_WARN("Unknown command: %s", command.c_str());
|
ROS_WARN("Unknown command: %s", command.c_str());
|
||||||
}
|
}
|
||||||
@@ -199,7 +212,7 @@ int main(int argc, char **argv) {
|
|||||||
/// set spinner rate ///
|
/// set spinner rate ///
|
||||||
ros::Rate loop_rate(loopRate);
|
ros::Rate loop_rate(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");
|
||||||
|
|
||||||
/// advertise publish topics ///
|
/// advertise publish topics ///
|
||||||
@@ -216,7 +229,7 @@ int main(int argc, char **argv) {
|
|||||||
publishers["trj_pub"] = &trj_pub;
|
publishers["trj_pub"] = &trj_pub;
|
||||||
/// subscribe to incoming topics ///
|
/// subscribe to incoming topics ///
|
||||||
ros::Subscriber command_sub = nh.subscribe<std_msgs::String>(ros_topics.commandSub, static_cast<uint32_t>(msgBufferSize),
|
ros::Subscriber command_sub = nh.subscribe<std_msgs::String>(ros_topics.commandSub, static_cast<uint32_t>(msgBufferSize),
|
||||||
boost::bind(commandCallback, _1, &is, &pos_data));
|
boost::bind(commandCallback, _1, &is, &publishers, &pos_data, &robot_data));
|
||||||
ros::Subscriber coordinate_sub = nh.subscribe<std_msgs::String>(ros_topics.coordSub, static_cast<uint32_t>(msgBufferSize),
|
ros::Subscriber coordinate_sub = nh.subscribe<std_msgs::String>(ros_topics.coordSub, static_cast<uint32_t>(msgBufferSize),
|
||||||
boost::bind(coordinateCallback, _1, &publishers, &pos_data));
|
boost::bind(coordinateCallback, _1, &publishers, &pos_data));
|
||||||
ros::Subscriber state_sub = nh.subscribe<std_msgs::String>(ros_topics.stateSub, static_cast<uint32_t>(msgBufferSize),
|
ros::Subscriber state_sub = nh.subscribe<std_msgs::String>(ros_topics.stateSub, static_cast<uint32_t>(msgBufferSize),
|
||||||
@@ -249,16 +262,17 @@ int main(int argc, char **argv) {
|
|||||||
///////////// END MAIN /////////////////
|
///////////// END MAIN /////////////////
|
||||||
////////////////////////////////////////
|
////////////////////////////////////////
|
||||||
|
|
||||||
// TODO: aggiungere la possibilità di resettare i giunti nella configurazione home a comando da interfaccia
|
void resetModelJointsHome(robotData* rdata) {
|
||||||
bool resetModelJointsHome(geometry_msgs::Pose home_pos, bool execute=false) {
|
|
||||||
ROS_DEBUG("Setting joint position to home");
|
ROS_DEBUG("Setting joint position to home");
|
||||||
if (execute){
|
std::map<std::string, double> jhome = rdata->joint_homes;
|
||||||
return false;
|
for (auto joint : jhome) {
|
||||||
} else {
|
std::string jname = joint.first;
|
||||||
return false;
|
const double jval = deg2rad(joint.second);
|
||||||
|
rdata->kine_state->setJointPositions(jname, &jval);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//TODO: rendere dinamici i nomi dei giunti caricati in robot_data
|
||||||
trajectory_msgs::JointTrajectory composeTrjMessage(std::vector<double> jtpos){
|
trajectory_msgs::JointTrajectory composeTrjMessage(std::vector<double> jtpos){
|
||||||
static trajectory_msgs::JointTrajectory trj;
|
static trajectory_msgs::JointTrajectory trj;
|
||||||
static double ang=0.0;
|
static double ang=0.0;
|
||||||
|
|||||||
@@ -262,7 +262,7 @@ int main(int argc, char **argv) {
|
|||||||
nh.getParam(param_ns+"move_group_name", robot_data.move_group_name);
|
nh.getParam(param_ns+"move_group_name", robot_data.move_group_name);
|
||||||
|
|
||||||
/// set console log level ///
|
/// set console log level ///
|
||||||
ros::console::set_logger_level(ROSCONSOLE_DEFAULT_NAME, ros::console::levels::Debug);
|
ros::console::set_logger_level(ROSCONSOLE_DEFAULT_NAME, ros::console::levels::Warn);
|
||||||
/// set spinner rate ///
|
/// set spinner rate ///
|
||||||
ros::Rate loop_rate(loopRate);
|
ros::Rate loop_rate(loopRate);
|
||||||
|
|
||||||
|
|||||||
@@ -108,7 +108,7 @@ int main(int argc, char **argv) {
|
|||||||
/// set spinner rate ///
|
/// set spinner rate ///
|
||||||
ros::Rate loop_rate(loopRate);
|
ros::Rate loop_rate(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::Warn);
|
||||||
ROS_INFO("Relay Node Started");
|
ROS_INFO("Relay Node Started");
|
||||||
/// initialize MQTT client ///
|
/// initialize MQTT client ///
|
||||||
mqtt::async_client client(mqtt_topics.mqttHost,"");
|
mqtt::async_client client(mqtt_topics.mqttHost,"");
|
||||||
|
|||||||
@@ -82,6 +82,10 @@ double rad2deg(double ang){
|
|||||||
return ang*180/M_PI;
|
return ang*180/M_PI;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
double deg2rad(double ang){
|
||||||
|
return ang*M_PI/180;
|
||||||
|
}
|
||||||
|
|
||||||
bool checkJointJump(moveit_msgs::RobotTrajectoryPtr traj, double thresh){
|
bool checkJointJump(moveit_msgs::RobotTrajectoryPtr traj, double thresh){
|
||||||
// identify max joint jump for each joint
|
// identify max joint jump for each joint
|
||||||
typedef struct{
|
typedef struct{
|
||||||
|
|||||||
Reference in New Issue
Block a user