JAKA SDKで取得可能なロボットステータス

JAKAロボット 二次開発用のSDKについて

JAKA製のロボットコントローラーと通信可能な二次開発用SDKがホームページで公開されています。こちらからダウンロードできます。(24年8月時点で最新はV2.1.11)

C++用としては、ヘッダーファイルとしてJAKAZURobot.h, jktypes.h, jkerr.h
静的リンクファイルとしてjakaAPI.lib
動的リンクファイルとしてjakaAPI.dllを提供しています。

取得できるステータス情報は、jktypes.h内に記述のRobotStatus構造体から把握できます。
ロボットステータスは、errno_t JAKAZuRobot::get_robot_state(RobotState *state)で取得できます。
ステータスの値はlog_in関数実施後に400ms周期で更新されます。

ロボットステータス構造体

 typedef struct
{
	int errcode;					//エラー状況
	int inpos;						//インポジション判定
	int powered_on;					//電源状態
	int enabled;					//イネーブル状態
	double rapidrate;               //速度状態
	int protective_stop;			//保護停止信号
    int emergency_stop;             //非常停止信号
	int dout[256];					//DigitalOutput信号
	int din[256];					//DigitalInput信号
	double ain[256];				//AnalogInput信号
	double aout[256];				//AnalogOutput信号	
	int tio_dout[16];				//ツール用DO信号
	int tio_din[16];				//ツール用DI信号
	double tio_ain[16];				//ツール用AI信号
	int tio_key[3];                 //ツールボタン状態
	Io_group extio;                 //外部機器用IO  *下記Io_group参照
	Io_group modbus_slave;			//Modbus入出力信号  *下記Io_group参照
	Io_group profinet_slave;		//Profinet入出力信号 *下記Io_group参照
	Io_group eip_slave;             //Ethernet/IP入出力信号  *下記_Io_group参照
	unsigned int current_tool_id;					//現在のツール座標系ID
	double cartesiantran_position[6];				//デカルト座標系
	double joint_position[6];						//ジョイント角度
	unsigned int on_soft_limit;						//ソフトリミット状態
	unsigned int current_user_id;					//現在のユーザー座標系ID
	int drag_status;								//ドラッグ状態
	RobotMonitorData robot_monitor_data;            
            //ロボットモニターデータ  *下記RobotMonitorData参照
	TorqSensorMonitorData torq_sensor_monitor_data; 
            //トルクセンサモニターデータ  *下記TorqSensorMonitorData参照
	int is_socket_connect;							//通信接続状態
} RobotStatus;
typedef struct
{
	int din[256];				  //DigitalInput信号
	int dout[256];				  //DigitalOutput信号
	float ain[256];				  //AnalogInput信号
	float aout[256];			  //AnalogOutput信号
} Io_group;

typedef struct
{
	double scbMajorVersion;				  //SCBメジャーバージョン情報
	double scbMinorVersion;				  //SCBマイナーバージョン情報
	double cabTemperature;				  //コントローラー温度
	double robotAveragePower;			  //ロボット電源電圧
	double robotAverageCurrent;			  //ロボット電源電流
	JointMonitorData jointMonitorData[6]; //ジョイント6軸モニター情報
} RobotMonitorData;

typedef struct
{
	char ip[20];		 //力覚センサーのIPアドレス
	int port;			 //力覚センサーのポート名
	PayLoad payLoad;	 //ロボットの末端負荷情報
	int status;			 //センサー状態
	int errcode;		 //エラー状態
	double actTorque[6]; //力覚センサーの実接触力値(補正あり)
	double torque[6];	 //力覚センサーの生値
	double realTorque[6];//力覚センサーの実接触力値(補正なし)
} TorqSensorMonitorData;

typedef struct
{
	double instCurrent;		//モーター電流値
	double instVoltage;		//モーター電圧
	double instTemperature; //モーター温度
	double instVel;			//モーター加速度
	double instTorq;		//モータートルク
} JointMonitorData;

JAKAのSDKの特徴としては、取得できるステータスや使用できる関数が他社よりも少なく、複雑な制御を行う装置として使用するには物足りなく感じます。
またステータスの更新が400ms周期というのも、複雑な制御の場合はサイクルタイムにも影響してきます。
一方で、標準のロボット制御アプリと通信用のポートがわけてあることで、同時に実行が可能であり部分的な制御という使い方は有効化と思います。

また中国語のダウンロードサイトでは、Ver2.1.12のバージョンが展開されていますが、400msことのステータス更新はなくなり、都度関数で必要なステータスを受信する仕様に変更されています。取得できるステータスは少なくなっています。
get_robot_status関数にバグがあるため、弊社では現在使用していません。