ROS-I simple_message 源码分析:RobotStatus

RobotStatus类封装了机器人的状态数据,同样继承自SimpleSerialize,与JointFeedback一样,由控制器反馈给ROS,旨在模仿ROS中的industrial_msgs/RobotStatus消息。RobotStatus中的数据成员均为shared_int类型,包括:

  • drives_powered
    驱动器上电状态
  • e_stopped
    急停状态
  • error_code
    由厂商定义的错误码,非0代表错误
  • in_error
    机器人的错误状态
  • in_motion
    机器人是否正在运动
  • mode
    机器人操作模式
  • motion_possible
    机器人是否可以运动
namespace industrial
{
namespace robot_status
{

namespace RobotModes
{
enum RobotMode
{
  UNKNOWN = -1,

  MANUAL = 1, AUTO = 2,
};

}
typedef RobotModes::RobotMode RobotMode;

namespace TriStates
{

enum TriState
{
  TS_UNKNOWN = -1,
  TS_TRUE = 1,   TS_ON = 1,  TS_ENABLED = 1,  TS_HIGH = 1,
  TS_FALSE = 0,   TS_OFF = 0,  TS_DISABLED = 0,  TS_LOW = 0
};

}
typedef TriStates::TriState TriState;


class RobotStatus : public industrial::simple_serialize::SimpleSerialize
{
public:

RobotStatus(void);
~RobotStatus(void);

void init();
void init(TriState drivesPowered, TriState eStopped, industrial::shared_types::shared_int errorCode, TriState inError,
          TriState inMotion, RobotMode mode, TriState motionPossible);

TriState getDrivesPowered()
{
  return TriState(drives_powered_);
}

TriState getEStopped()
{
  return TriState(e_stopped_);
}

industrial::shared_types::shared_int getErrorCode() const
{
  return error_code_;
}

TriState getInError()
{
  return TriState(in_error_);
}

TriState getInMotion()
{
  return TriState(in_motion_);
}

RobotMode getMode()
{
  return RobotMode(mode_);
}

TriState getMotionPossible()
{
  return TriState(motion_possible_);
}

void setDrivesPowered(TriState drivesPowered)
{
  this->drives_powered_ = drivesPowered;
}

void setEStopped(TriState eStopped)
{
  this->e_stopped_ = eStopped;
}

void setErrorCode(industrial::shared_types::shared_int errorCode)
{
  this->error_code_ = errorCode;
}

void setInError(TriState inError)
{
  this->in_error_ = inError;
}

void setInMotion(TriState inMotion)
{
  this->in_motion_ = inMotion;
}

void setMode(RobotMode mode)
{
  this->mode_ = mode;
}

void setMotionPossible(TriState motionPossible)
{
  this->motion_possible_ = motionPossible;
}

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

// Overrides - SimpleSerialize
bool load(industrial::byte_array::ByteArray *buffer);
bool unload(industrial::byte_array::ByteArray *buffer);
unsigned int byteLength()
{
  return 7 * sizeof(industrial::shared_types::shared_int);
}

private:

industrial::shared_types::shared_int mode_;
industrial::shared_types::shared_int e_stopped_;
industrial::shared_types::shared_int drives_powered_;
industrial::shared_types::shared_int motion_possible_;
industrial::shared_types::shared_int in_motion_;
industrial::shared_types::shared_int in_error_;
industrial::shared_types::shared_int error_code_;

};

}
}

除了mode_和error_code_,其它数据成员的取值均为TriState枚举类型,目的在于可以用同一个数表示不同的含义。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • error code(错误代码)=0是操作成功完成。error code(错误代码)=1是功能错误。error c...
    Heikki_阅读 3,452评论 1 9
  • error code(错误代码)=2000是无效的像素格式。error code(错误代码)=2001是指定的驱动...
    Heikki_阅读 1,860评论 0 4
  • “无问西东”的片名,来自清华大学的校歌“立德立言,无问西东”。这部电影的导演李芳芳说:“青春是一种美好,是一种力量...
    莹莹_0823阅读 671评论 0 0
  • 期中考试成绩出来了,几家欢喜几家愁。 进步的同学喜笑颜开,退步的人则垂头丧气。对于考试退步的同学来说,日记...
    玫兰妮阅读 538评论 0 0
  • 最近感触特别多,组织的调整,人员的调配,很多人面临选择和被选择,各种情绪波动往往显得有点苍白。每一场分手和聚首,总...
    沈鱼2009阅读 389评论 0 3