美文网首页
ROS-I simple_message 源码分析:JointF

ROS-I simple_message 源码分析:JointF

作者: play_robot | 来源:发表于2019-03-20 15:00 被阅读0次

JointFeedback类几乎是JointTrajPtFull的马甲,不同之处在于数据成员中少了一个sequence_。从名字可以看出来,这个消息的发送方应当是机器人控制器,这个类代表每个机器人关节的状态,包括位置、速度、时间等。机器人控制器具体如何定义这些数据是依赖于具体实现的,此处并不做严格定义。

namespace industrial
{
namespace joint_feedback
{

namespace ValidFieldTypes
{
enum ValidFieldType
{
  TIME = 0x01, POSITION = 0x02, VELOCITY = 0x04, ACCELERATION = 0x08
};
}
typedef ValidFieldTypes::ValidFieldType ValidFieldType;


class JointFeedback : public industrial::simple_serialize::SimpleSerialize
{
public:

  JointFeedback(void);
  ~JointFeedback(void);
  void init();
  void init(industrial::shared_types::shared_int robot_id,
            industrial::shared_types::shared_int valid_fields,
            industrial::shared_types::shared_real time,
            industrial::joint_data::JointData & positions,
            industrial::joint_data::JointData & velocities,
            industrial::joint_data::JointData & accelerations);

  void setRobotID(industrial::shared_types::shared_int robot_id)
  {
    this->robot_id_ = robot_id;
  }

  industrial::shared_types::shared_int getRobotID()
  {
    return this->robot_id_;
  }

  void setTime(industrial::shared_types::shared_real time)
  {
    this->time_ = time;
    this->valid_fields_ |= ValidFieldTypes::TIME;  // set the bit
  }

  bool getTime(industrial::shared_types::shared_real & time)
  {
    time = this->time_;
    return is_valid(ValidFieldTypes::TIME);
  }

  void clearTime()
  {
    this->time_ = 0;
    this->valid_fields_ &= ~ValidFieldTypes::TIME;  // clear the bit
  }

  void setPositions(industrial::joint_data::JointData &positions)
  {
    this->positions_.copyFrom(positions);
    this->valid_fields_ |= ValidFieldTypes::POSITION;  // set the bit
  }

  bool getPositions(industrial::joint_data::JointData &dest)
  {
    dest.copyFrom(this->positions_);
    return is_valid(ValidFieldTypes::POSITION);
  }

  void clearPositions()
  {
    this->positions_.init();
    this->valid_fields_ &= ~ValidFieldTypes::POSITION;  // clear the bit
  }

  void setVelocities(industrial::joint_data::JointData &velocities)
  {
    this->velocities_.copyFrom(velocities);
    this->valid_fields_ |= ValidFieldTypes::VELOCITY;  // set the bit
  }

  bool getVelocities(industrial::joint_data::JointData &dest)
  {
    dest.copyFrom(this->velocities_);
    return is_valid(ValidFieldTypes::VELOCITY);
  }

  void clearVelocities()
  {
    this->velocities_.init();
    this->valid_fields_ &= ~ValidFieldTypes::VELOCITY;  // clear the bit
  }
  
  void setAccelerations(industrial::joint_data::JointData &accelerations)
  {
    this->accelerations_.copyFrom(accelerations);
    this->valid_fields_ |= ValidFieldTypes::ACCELERATION;  // set the bit
  }

  bool getAccelerations(industrial::joint_data::JointData &dest)
  {
    dest.copyFrom(this->accelerations_);
    return is_valid(ValidFieldTypes::ACCELERATION);
  }

  void clearAccelerations()
  {
    this->accelerations_.init();
    this->valid_fields_ &= ~ValidFieldTypes::ACCELERATION;  // clear the bit
  }

  void copyFrom(JointFeedback &src);
  bool operator==(JointFeedback &rhs);

  bool is_valid(ValidFieldType field)
  {
    return valid_fields_ & field;
  }

  // Overrides - SimpleSerialize
  bool load(industrial::byte_array::ByteArray *buffer);
  bool unload(industrial::byte_array::ByteArray *buffer);
  unsigned int byteLength()
  {
    return 2*sizeof(industrial::shared_types::shared_int) + sizeof(industrial::shared_types::shared_real)
        + 3*this->positions_.byteLength();
  }

private:

  industrial::shared_types::shared_int robot_id_;
  industrial::shared_types::shared_int valid_fields_;
  industrial::shared_types::shared_real time_;
  industrial::joint_data::JointData positions_;
  industrial::joint_data::JointData velocities_;
  industrial::joint_data::JointData accelerations_;

};

}
}

相关文章

网友评论

      本文标题:ROS-I simple_message 源码分析:JointF

      本文链接:https://www.haomeiwen.com/subject/xfnzmqtx.html