Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032 #include "fs100/industrial_robot_client/robot_state_interface.h"
00033 #include "industrial_utils/param_utils.h"
00034
00035 using industrial::smpl_msg_connection::SmplMsgConnection;
00036 using industrial_utils::param::getJointNames;
00037
00038 namespace industrial_robot_client
00039 {
00040 namespace robot_state_interface
00041 {
00042
00043 RobotStateInterface::RobotStateInterface()
00044 {
00045 this->connection_ = NULL;
00046 this->add_handler(&default_joint_handler_);
00047 this->add_handler(&default_joint_feedback_handler_);
00048 this->add_handler(&default_robot_status_handler_);
00049 }
00050
00051 bool RobotStateInterface::init(std::string default_ip, int default_port)
00052 {
00053 std::string ip;
00054 int port;
00055
00056
00057 ros::param::param<std::string>("robot_ip_address", ip, default_ip);
00058 ros::param::param<int>("~port", port, default_port);
00059
00060
00061 if (ip.empty())
00062 {
00063 ROS_ERROR("No valid robot IP address found. Please set ROS 'robot_ip_address' param");
00064 return false;
00065 }
00066 if (port <= 0)
00067 {
00068 ROS_ERROR("No valid robot IP port found. Please set ROS '~port' param");
00069 return false;
00070 }
00071
00072 char* ip_addr = strdup(ip.c_str());
00073 ROS_INFO("Robot state connecting to IP address: '%s:%d'", ip_addr, port);
00074 default_tcp_connection_.init(ip_addr, port);
00075 free(ip_addr);
00076
00077 return init(&default_tcp_connection_);
00078 }
00079
00080 bool RobotStateInterface::init(SmplMsgConnection* connection)
00081 {
00082 std::vector<std::string> joint_names;
00083 if (!getJointNames("controller_joint_names", "robot_description", joint_names))
00084 ROS_WARN("Unable to read 'controller_joint_names' param. Using standard 6-DOF joint names.");
00085
00086 return init(connection, joint_names);
00087 }
00088
00089 bool RobotStateInterface::init(SmplMsgConnection* connection, std::vector<std::string>& joint_names)
00090 {
00091 this->joint_names_ = joint_names;
00092 this->connection_ = connection;
00093 connection_->makeConnect();
00094
00095
00096 if (!manager_.init(connection_))
00097 return false;
00098
00099
00100 if (!default_joint_handler_.init(connection_, joint_names_))
00101 return false;
00102 this->add_handler(&default_joint_handler_);
00103
00104 if (!default_joint_feedback_handler_.init(connection_, joint_names_))
00105 return false;
00106 this->add_handler(&default_joint_feedback_handler_);
00107
00108 if (!default_robot_status_handler_.init(connection_))
00109 return false;
00110 this->add_handler(&default_robot_status_handler_);
00111
00112 return true;
00113 }
00114
00115 void RobotStateInterface::run()
00116 {
00117 manager_.spin();
00118 }
00119
00120 }
00121 }