diff --git a/src/dynamixel_motor.cpp b/src/dynamixel_motor.cpp index 05a9da30c8eea3a2d9756db96a85d529ae290fea..da30e7f95c7395f1b535ce6d7d738162a009e4a8 100644 --- a/src/dynamixel_motor.cpp +++ b/src/dynamixel_motor.cpp @@ -1233,7 +1233,9 @@ double CDynamixelMotor::get_current_speed(void) { try{ this->dynamixel_dev->read_word_register(this->registers[current_speed],&data); - c_speed = this->to_speeds(data); + c_speed = this->to_speeds(data&0x03FF); + if(data&0x0400) + c_speed*=-1.0; }catch(CDynamixelAlarmException &e){ /* handle dynamixel exception */ if(e.get_alarm()&this->alarms) @@ -1312,10 +1314,8 @@ double CDynamixelMotor::get_current_effort(void) try{ this->dynamixel_dev->read_byte_register(this->registers[current_load],&data); c_effort = (double)((data&0x3FF)*100.0/1023); - if (this->get_current_speed() < 0) - { + if(data&0x0400) c_effort *= -1.0; - } }catch(CDynamixelAlarmException &e){ /* handle dynamixel exception */ if(e.get_alarm()&this->alarms) diff --git a/src/dynamixel_motor_group.cpp b/src/dynamixel_motor_group.cpp index 0e86391e1aa4d376d4ad011973c3c50d51d97888..0e48af04f65daca15748f568362d00b1b1f8b610 100644 --- a/src/dynamixel_motor_group.cpp +++ b/src/dynamixel_motor_group.cpp @@ -1211,7 +1211,9 @@ void CDynamixelMotorGroup::get_current_speed(std::vector<double> &speeds) { try{ this->dynamixel_dev[i]->read_word_register(this->registers[i][current_speed],&data); - speeds[i] = this->to_speeds(i, data); + speeds[i] = this->to_speeds(i, data&0x03FF); + if(data&0x0400) + speeds[i]*=-1.0; }catch(CDynamixelAlarmException &e){ /* handle dynamixel exception */ if(e.get_alarm()&this->alarms[i]) @@ -1225,7 +1227,6 @@ void CDynamixelMotorGroup::get_current_speed(std::vector<double> &speeds) void CDynamixelMotorGroup::get_current_effort(std::vector<double> &efforts) { unsigned short int c_effort; - unsigned short int c_speed; efforts.resize(this->servo_id.size()); @@ -1240,12 +1241,9 @@ void CDynamixelMotorGroup::get_current_effort(std::vector<double> &efforts) { try{ this->dynamixel_dev[i]->read_word_register(this->registers[i][current_load],&c_effort); - this->dynamixel_dev[i]->read_word_register(this->registers[i][current_speed],&c_speed); efforts[i] = (double)((c_effort&0x3FF)*100.0/1023); - if (this->to_speeds(i, c_speed) < 0) - { + if (c_effort&0x0400) efforts[i] *= -1.0; - } }catch(CDynamixelAlarmException &e){ /* handle dynamixel exception */ if(e.get_alarm()&this->alarms[i])