在之前的ROS-Industrial 之 industrial_robot_client 分析理解(1)中分析过client包提供的共用的函数,还有将机器人的状态信息与关节信息转换到ROS进行发布的两个类,这里着重理解读取机器人状态信息的接口。
ROBOT_STATE_INTERFACE
先来看一下机器人状态信息接口的整个类结构:
#ifndef ROBOT_STATE_INTERFACE_H
#define ROBOT_STATE_INTERFACE_H
#include <vector>
#include <string>
#include "simple_message/smpl_msg_connection.h"
#include "simple_message/message_manager.h"
#include "simple_message/message_handler.h"
#include "simple_message/socket/tcp_client.h"
#include "industrial_robot_client/joint_relay_handler.h"
#include "industrial_robot_client/robot_status_relay_handler.h"
namespace industrial_robot_client
{
namespace robot_state_interface
{
using industrial::smpl_msg_connection::SmplMsgConnection;
using industrial::message_manager::MessageManager;
using industrial::message_handler::MessageHandler;
using industrial::tcp_client::TcpClient;
using industrial_robot_client::joint_relay_handler::JointRelayHandler;
using industrial_robot_client::robot_status_relay_handler::RobotStatusRelayHandler;
namespace StandardSocketPorts = industrial::simple_socket::StandardSocketPorts;
//从机器人控制中读取机器人状态数据并将信息发布到与之匹配的ROS话题中的通用模版
class RobotStateInterface
{
public:
RobotStateInterface();
//用缺省的方法初始化机器人的通讯连接
//default_ip: 用于对机器人进行连接的缺省IP地址[OPTIONAL]
//default_port:用于机器人连接的缺省端口号[OPTIONAL]
bool init(std::string default_ip = "", int default_port = StandardSocketPorts::STATE);
//初始化通讯连接句柄
bool init(SmplMsgConnection* connection);
//初始化通讯连接句柄与关节名称
bool init(SmplMsgConnection* connection, std::vector<std::string>& joint_names);
//开始处理信息并发布到指定话题
void run();
//获取当前通讯句柄(通讯实例)
SmplMsgConnection* get_connection()
{ return this->connection_; }
//获取活动消息管理器对象
MessageManager* get_manager()
{ return &this->manager_; }
//获取关节名称
std::vector<std::string> get_joint_names()
{