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 "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 namespace StandardSocketPorts = industrial::simple_socket::StandardSocketPorts;
00038
00039 namespace industrial_robot_client
00040 {
00041 namespace robot_state_interface
00042 {
00043
00044 RobotStateInterface::RobotStateInterface()
00045 {
00046 this->connection_ = NULL;
00047 this->add_handler(&default_joint_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 {
00085 ROS_ERROR("Failed to initialize joint_names. Aborting");
00086 return false;
00087 }
00088
00089 return init(connection, joint_names);
00090 }
00091
00092 bool RobotStateInterface::init(SmplMsgConnection* connection, std::vector<std::string>& joint_names)
00093 {
00094 this->joint_names_ = joint_names;
00095 this->connection_ = connection;
00096 connection_->makeConnect();
00097
00098
00099 if (!manager_.init(connection_))
00100 return false;
00101
00102
00103 if (!default_joint_handler_.init(connection_, joint_names_))
00104 return false;
00105 this->add_handler(&default_joint_handler_);
00106
00107 if (!default_robot_status_handler_.init(connection_))
00108 return false;
00109 this->add_handler(&default_robot_status_handler_);
00110
00111 return true;
00112 }
00113
00114 void RobotStateInterface::run()
00115 {
00116 manager_.spin();
00117 }
00118
00119 }
00120 }