Added left and right arm controls

Temp


Working


Updates


Playback working


Fix
This commit is contained in:
David Walsh
2019-05-08 12:39:47 -04:00
parent ec08e572fb
commit 93f5a7f324
2 changed files with 437 additions and 303 deletions

View File

@@ -16,69 +16,169 @@
// Subscribers
////////////////////////////////////////////////////////////////
// Operation Mode
var modeStatus = new ROSLIB.Topic({
class ArmControls
{
constructor(namespace) {
this.namespace = namespace;
// Franka Status
this.frankaStatusTopic = new ROSLIB.Topic({
ros : ros,
name : '/'+this.namespace+'/franka_state_controller/franka_states',
messageType : 'franka_msgs/FrankaState',
throttle_rate : 500 // 2Hz
});
this.frankaStatusTopic.subscribe(this.frankaStatus.bind(this));
// Mode Status
this.modeStatusTopic = new ROSLIB.Topic({
ros : ros,
name : '/'+this.namespace+'/aescape/mode/status',
messageType : 'std_msgs/String',
throttle_rate : 500 // 2Hz
});
this.modeStatusTopic.subscribe(this.modeStatus.bind(this));
// Safety Status
this.safetyStatusTopic = new ROSLIB.Topic({
ros : ros,
name : '/'+this.namespace+'/aescape/mode/safety_status',
messageType : 'std_msgs/String',
throttle_rate : 500 // 2Hz
});
this.safetyStatusTopic.subscribe(this.safetyStatus.bind(this));
}
// FrankaState
frankaStatus(message) {
document.getElementById(this.namespace+"_frankaModeOther").className = "label label-default"
document.getElementById(this.namespace+"_frankaModeIdle").className = "label label-default"
document.getElementById(this.namespace+"_frankaModeMove").className = "label label-default"
document.getElementById(this.namespace+"_frankaModeGuiding").className = "label label-default"
document.getElementById(this.namespace+"_frankaModeReflex").className = "label label-default"
document.getElementById(this.namespace+"_frankaModeUserStopped").className = "label label-default"
document.getElementById(this.namespace+"_frankaModeErrorRecovery").className = "label label-default"
document.getElementById(this.namespace+"_fixFrankaButton").className = "btn btn-primary"
if (message.robot_mode == 0)
{
document.getElementById(this.namespace+"_frankaModeOther").className = "label label-warning"
document.getElementById(this.namespace+"_fixFrankaButton").className = "btn btn-danger"
}
else if (message.robot_mode == 1)
{
document.getElementById(this.namespace+"_frankaModeIdle").className = "label label-warning"
document.getElementById(this.namespace+"_fixFrankaButton").className = "btn btn-danger"
}
else if (message.robot_mode == 2)
{
document.getElementById(this.namespace+"_frankaModeMove").className = "label label-warning"
document.getElementById(this.namespace+"_fixFrankaButton").className = "btn btn-success"
}
else if (message.robot_mode == 3)
{
document.getElementById(this.namespace+"_frankaModeGuiding").className = "label label-warning"
document.getElementById(this.namespace+"_fixFrankaButton").className = "btn btn-default"
}
else if (message.robot_mode == 4)
{
document.getElementById(this.namespace+"_frankaModeReflex").className = "label label-warning"
document.getElementById(this.namespace+"_fixFrankaButton").className = "btn btn-danger"
}
else if (message.robot_mode == 5)
{
document.getElementById(this.namespace+"_frankaModeUserStopped").className = "label label-warning"
document.getElementById(this.namespace+"_fixFrankaButton").className = "btn btn-default"
}
else if (message.robot_mode == 6)
{
document.getElementById(this.namespace+"_frankaModeErrorRecovery").className = "label label-warning"
document.getElementById(this.namespace+"_fixFrankaButton").className = "btn btn-default"
}
}
// Operation Mode
modeStatus(message) {
document.getElementById(this.namespace+"_stoppedModeButton").className = "btn btn-secondary"
document.getElementById(this.namespace+"_standbyModeButton").className = "btn btn-primary"
document.getElementById(this.namespace+"_readyModeButton").className = "btn btn-primary"
document.getElementById(this.namespace+"_teachingModeButton").className = "btn btn-primary"
document.getElementById(this.namespace+"_executionModeButton").className = "btn btn-primary"
if (this.namespace == "left")
{
document.getElementById("recordingStartButton").disabled = true
document.getElementById("executionStartButton").disabled = true
}
if (message.data == "stopped")
{
document.getElementById(this.namespace+"_stoppedModeButton").className = "btn btn-warning"
}
else if (message.data == "standby")
{
document.getElementById(this.namespace+"_standbyModeButton").className = "btn btn-primary btn-success"
}
else if (message.data == "teach")
{
document.getElementById(this.namespace+"_teachingModeButton").className = "btn btn-primary btn-success"
}
else if (message.data == "execution")
{
document.getElementById(this.namespace+"_executionModeButton").className = "btn btn-primary btn-success"
}
else if (message.data == "ready")
{
document.getElementById(this.namespace+"_readyModeButton").className = "btn btn-primary btn-success"
if (this.namespace == "left")
{
document.getElementById("recordingStartButton").disabled = false
document.getElementById("executionStartButton").disabled = false
}
}
}
safetyStatus(message) {
document.getElementById(this.namespace+"_safetyRunning").className = 'label label-default';
document.getElementById(this.namespace+"_safetyStopped").className = 'label label-default';
if (message.data == "stopped")
{
document.getElementById(this.namespace+"_safetyStopped").className = 'label label-danger';
}
else if (message.data == "running")
{
document.getElementById(this.namespace+"_safetyRunning").className = 'label label-success';
}
};
}
var leftArmControls = new ArmControls('left');
var rightArmControls = new ArmControls('right');
// Robotiq Data
var robotiqDataTopic = new ROSLIB.Topic({
ros : ros,
name : '/aescape/mode/status',
messageType : 'std_msgs/String',
name : '/left/robotiq_ft_wrench',
messageType : 'geometry_msgs/WrenchStamped',
throttle_rate : 500 // 2Hz
});
modeStatus.subscribe(function(message) {
document.getElementById("stoppedModeButton").className = "btn btn-secondary"
document.getElementById("standbyModeButton").className = "btn btn-primary"
document.getElementById("readyModeButton").className = "btn btn-primary"
document.getElementById("teachingModeButton").className = "btn btn-primary"
document.getElementById("executionModeButton").className = "btn btn-primary"
document.getElementById("recordingStartButton").disabled = true
document.getElementById("executionStartButton").disabled = true
robotiqDataTopic.subscribe(function(message) {
var force = message.wrench.force
document.getElementById("robotiqX").innerHTML = force.x.toFixed(1)
document.getElementById("robotiqY").innerHTML = force.y.toFixed(1)
document.getElementById("robotiqZ").innerHTML = force.z.toFixed(1)
if (message.data == "stopped")
if ((Math.abs(force.x) > 0.5) || (Math.abs(force.y) > 0.5) || (Math.abs(force.z) > 0.5))
{
document.getElementById("stoppedModeButton").className = "btn btn-warning"
}
else if (message.data == "standby")
{
document.getElementById("standbyModeButton").className = "btn btn-primary btn-success"
}
else if (message.data == "teach")
{
document.getElementById("teachingModeButton").className = "btn btn-primary btn-success"
}
else if (message.data == "execution")
{
document.getElementById("executionModeButton").className = "btn btn-primary btn-success"
}
else if (message.data == "ready")
{
document.getElementById("readyModeButton").className = "btn btn-primary btn-success"
document.getElementById("recordingStartButton").disabled = false
document.getElementById("executionStartButton").disabled = false
}
});
// Safety Status
var safetyStatusTopic = new ROSLIB.Topic({
ros : ros,
name : '/aescape/mode/safety_status',
messageType : 'std_msgs/String',
throttle_rate : 500 // 2Hz
});
safetyStatusTopic.subscribe(function(message) {
document.getElementById("safetyRunning").className = 'label label-default';
document.getElementById("safetyStopped").className = 'label label-default';
if (message.data == "stopped")
{
document.getElementById("safetyStopped").className = 'label label-danger';
}
else if (message.data == "running")
{
document.getElementById("safetyRunning").className = 'label label-success';
document.getElementById("calibrateButton").className = "btn btn-danger"
} else {
document.getElementById("calibrateButton").className = "btn btn-default"
}
});
@@ -135,85 +235,6 @@ bagPlayingTopic.subscribe(function(message) {
document.getElementById("lastbagText").innerHTML = message.data
});
// FrankaState
var frankaStatus = new ROSLIB.Topic({
ros : ros,
name : '/franka_state_controller/franka_states',
messageType : 'franka_msgs/FrankaState',
throttle_rate : 500 // 2Hz
});
frankaStatus.subscribe(function(message) {
document.getElementById("frankaModeOther").className = "label label-default"
document.getElementById("frankaModeIdle").className = "label label-default"
document.getElementById("frankaModeMove").className = "label label-default"
document.getElementById("frankaModeGuiding").className = "label label-default"
document.getElementById("frankaModeReflex").className = "label label-default"
document.getElementById("frankaModeUserStopped").className = "label label-default"
document.getElementById("frankaModeErrorRecovery").className = "label label-default"
document.getElementById("fixFrankaButton").className = "btn btn-primary"
if (message.robot_mode == 0)
{
document.getElementById("frankaModeOther").className = "label label-warning"
document.getElementById("fixFrankaButton").className = "btn btn-danger"
}
else if (message.robot_mode == 1)
{
document.getElementById("frankaModeIdle").className = "label label-warning"
document.getElementById("fixFrankaButton").className = "btn btn-danger"
}
else if (message.robot_mode == 2)
{
document.getElementById("frankaModeMove").className = "label label-warning"
document.getElementById("fixFrankaButton").className = "btn btn-success"
}
else if (message.robot_mode == 3)
{
document.getElementById("frankaModeGuiding").className = "label label-warning"
document.getElementById("fixFrankaButton").className = "btn btn-default"
}
else if (message.robot_mode == 4)
{
document.getElementById("frankaModeReflex").className = "label label-warning"
document.getElementById("fixFrankaButton").className = "btn btn-danger"
}
else if (message.robot_mode == 5)
{
document.getElementById("frankaModeUserStopped").className = "label label-warning"
document.getElementById("fixFrankaButton").className = "btn btn-default"
}
else if (message.robot_mode == 6)
{
document.getElementById("frankaModeErrorRecovery").className = "label label-warning"
document.getElementById("fixFrankaButton").className = "btn btn-default"
}
});
// Robotiq Data
var robotiqDataTopic = new ROSLIB.Topic({
ros : ros,
name : '/robotiq_ft_wrench',
messageType : 'geometry_msgs/WrenchStamped',
throttle_rate : 500 // 2Hz
});
robotiqDataTopic.subscribe(function(message) {
var force = message.wrench.force
document.getElementById("robotiqX").innerHTML = force.x.toFixed(1)
document.getElementById("robotiqY").innerHTML = force.y.toFixed(1)
document.getElementById("robotiqZ").innerHTML = force.z.toFixed(1)
if ((Math.abs(force.x) > 0.5) || (Math.abs(force.y) > 0.5) || (Math.abs(force.z) > 0.5))
{
document.getElementById("calibrateButton").className = "btn btn-danger"
} else {
document.getElementById("calibrateButton").className = "btn btn-default"
}
});
////////////////////////////////////////////////////////////////
// Services
////////////////////////////////////////////////////////////////