Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
labrobotica
drivers
dynamixel_motor_cont
Commits
2e269b80
Commit
2e269b80
authored
Jan 24, 2022
by
Ferran Martínez Felipe
Browse files
Added support to MX28 v2 and MX540
parent
bd3a882c
Changes
4
Hide whitespace changes
Inline
Side-by-side
include/dynamixel_motor.h
View file @
2e269b80
...
...
@@ -129,48 +129,48 @@ class CDynamixelMotor
* \brief
*
*/
unsigned
int
from_angles
(
double
angle
);
double
to_angles
(
unsigned
int
counts
);
/**
* \brief
*
*/
unsigned
int
from_speeds
(
double
speed
);
double
to_speeds
(
unsigned
int
counts
);
/**
* \brief
* \brief
*
*/
double
to_angles
(
unsigned
int
counts
);
void
reset_motor
(
void
);
/**
* \brief
* \brief
*
*/
double
to_speeds
(
unsigned
int
counts
);
void
get_model
(
void
);
/**
* \brief
*
*/
void
re
set_motor
(
void
);
void
re
ad_register
(
TDynReg
reg
,
unsigned
int
&
value
);
/**
* \brief
*
*/
void
get_model
(
void
);
void
write_register
(
TDynReg
reg
,
unsigned
int
value
);
public:
/**
* \brief
*
*/
void
set_control_mode
(
control_mode
mode
);
/**
* \brief
* \brief
*
*/
void
read_register
(
TDynReg
reg
,
unsigned
int
&
valu
e
);
unsigned
int
from_angles
(
double
angl
e
);
/**
* \brief
* \brief
*
*/
void
write_register
(
TDynReg
reg
,
unsigned
int
value
);
public:
unsigned
int
from_speeds
(
double
speed
);
/**
* \brief
*
...
...
@@ -181,7 +181,7 @@ class CDynamixelMotor
*
*/
void
get_servo_info
(
TDynamixel_info
&
info
);
/* configuration functions */
/* configuration functions */
/**
* \brief
*
...
...
include/dynamixel_registers.h
View file @
2e269b80
#ifndef _DYNAMIXEL_REGISTERS_H
#define _DYNAMIXEL_REGISTERS_H
#define NUM_REG 6
2
#define NUM_REG 6
3
typedef
struct
{
unsigned
short
int
address
;
...
...
@@ -14,6 +14,7 @@ extern TDynReg mx_1_0_reg[NUM_REG];
extern
TDynReg
mx_106_1_0_reg
[
NUM_REG
];
extern
TDynReg
xl_reg
[
NUM_REG
];
extern
TDynReg
xm_reg
[
NUM_REG
];
extern
TDynReg
mx_28_2_0_reg
[
NUM_REG
];
typedef
enum
{
// [Access] [Description]
...
...
@@ -44,6 +45,7 @@ typedef enum {
velocity_limit
,
// (RW)
multi_turn_off
,
// (RW) Multi turn offset position
resolution_div
,
// (RW) Resolution divider
acceleration_limit
,
// (RW)
// Status
alarm_led
,
// (RW) LED for Alarm
alarm_shtdwn
,
// (RW) Shutdown for Alarm
...
...
src/dynamixel_motor.cpp
View file @
2e269b80
...
...
@@ -237,6 +237,18 @@ void CDynamixelMotor::get_model(void)
this
->
info
.
multi_turn
=
true
;
this
->
info
.
ext_memory_map
=
false
;
break
;
case
0x001E
:
this
->
info
.
model
=
"MX-28 v2"
;
this
->
info
.
max_angle
=
360.0
;
this
->
info
.
center_angle
=
180.0
;
this
->
info
.
max_speed
=
330
;
this
->
info
.
max_current
=
0.0
;
this
->
info
.
encoder_resolution
=
4095
;
this
->
info
.
gear_ratio
=
193
;
this
->
registers
=
mx_28_2_0_reg
;
this
->
info
.
pid_control
=
true
;
this
->
info
.
multi_turn
=
true
;
this
->
info
.
ext_memory_map
=
false
;
break
;
case
0x0136
:
this
->
info
.
model
=
"MX-64"
;
this
->
info
.
max_angle
=
360.0
;
this
->
info
.
center_angle
=
180.0
;
...
...
@@ -285,6 +297,17 @@ void CDynamixelMotor::get_model(void)
this
->
info
.
multi_turn
=
true
;
this
->
info
.
ext_memory_map
=
true
;
break
;
case
0x460
:
this
->
info
.
model
=
"XM540-W270"
;
this
->
info
.
max_angle
=
350.0
;
this
->
info
.
center_angle
=
180.0
;
this
->
info
.
max_speed
=
1023
*
0.229
;
this
->
info
.
max_current
=
0.0
;
this
->
info
.
encoder_resolution
=
4095
;
this
->
info
.
gear_ratio
=
272.5
;
this
->
registers
=
xm_reg
;
this
->
info
.
pid_control
=
true
;
this
->
info
.
multi_turn
=
true
;
break
;
default:
this
->
info
.
model
=
"unknown"
;
break
;
}
...
...
src/dynamixel_registers.cpp
View file @
2e269b80
...
...
@@ -27,6 +27,7 @@ TDynReg ax_reg[NUM_REG]={// Info
{
0xFFFF
,
0
,
false
},
{
0xFFFF
,
0
,
false
},
{
0xFFFF
,
0
,
false
},
{
0x0028
,
4
,
false
},
// Status
{
0x0011
,
1
,
true
},
{
0x0012
,
1
,
true
},
...
...
@@ -96,6 +97,7 @@ TDynReg mx_1_0_reg[NUM_REG]={// Info
{
0x0020
,
2
,
false
},
{
0x0014
,
2
,
true
},
{
0x0016
,
1
,
true
},
{
0x0028
,
4
,
false
},
// Status
{
0x0011
,
1
,
true
},
{
0x0012
,
1
,
true
},
...
...
@@ -165,6 +167,7 @@ TDynReg mx_106_1_0_reg[NUM_REG]={// Info
{
0xFFFF
,
0
,
false
},
{
0x0014
,
2
,
true
},
{
0x0016
,
1
,
true
},
{
0x0028
,
4
,
false
},
// Status
{
0x0011
,
1
,
true
},
{
0x0012
,
1
,
true
},
...
...
@@ -234,6 +237,7 @@ TDynReg xl_reg[NUM_REG]={// Info
{
0xFFFF
,
0
,
false
},
{
0xFFFF
,
0
,
false
},
{
0xFFFF
,
0
,
false
},
{
0x0028
,
4
,
false
},
// Status
{
0x0012
,
1
,
true
},
{
0x0012
,
1
,
true
},
...
...
@@ -297,12 +301,13 @@ TDynReg xm_reg[NUM_REG]={// Info
{
0x0022
,
2
,
true
},
{
0x0020
,
2
,
true
},
{
0x0024
,
2
,
true
},
{
0x
FFFF
,
0
,
false
},
{
0x
0024
,
2
,
false
},
{
0x0026
,
2
,
true
},
{
0xFFFF
,
0
,
false
},
{
0x002C
,
4
,
true
},
{
0xFFFF
,
0
,
false
},
{
0xFFFF
,
0
,
false
},
{
0x0028
,
4
,
false
},
// Status
{
0x003F
,
1
,
true
},
{
0x003F
,
1
,
true
},
...
...
@@ -345,3 +350,72 @@ TDynReg xm_reg[NUM_REG]={// Info
{
0x0088
,
5
,
false
},
{
0x008C
,
4
,
false
}};
TDynReg
mx_28_2_0_reg
[
NUM_REG
]
=
{
// Info
{
0x0000
,
2
,
true
},
{
0x0002
,
4
,
true
},
{
0x0006
,
1
,
true
},
{
0x0007
,
1
,
true
},
{
0x0008
,
1
,
true
},
{
0x0009
,
1
,
true
},
{
0x000C
,
1
,
true
},
{
0x000D
,
1
,
true
},
{
0x0044
,
1
,
false
},
// Configuration
{
0x000A
,
1
,
true
},
{
0x000B
,
1
,
true
},
{
0x0014
,
4
,
true
},
{
0x0018
,
4
,
true
},
{
0x0034
,
4
,
true
},
{
0x0030
,
4
,
true
},
{
0x001F
,
1
,
true
},
{
0x0022
,
2
,
true
},
{
0x0020
,
2
,
true
},
{
0x0024
,
2
,
true
},
{
0x0024
,
2
,
true
},
{
0x0026
,
2
,
false
},
{
0xFFFF
,
0
,
false
},
{
0x002C
,
4
,
true
},
{
0xFFFF
,
0
,
false
},
{
0xFFFF
,
0
,
false
},
{
0x0028
,
4
,
true
},
// Status
{
0x003F
,
1
,
true
},
{
0x003F
,
1
,
true
},
{
0x0041
,
1
,
false
},
{
0x0062
,
1
,
false
},
{
0x007A
,
1
,
false
},
{
0x007B
,
1
,
false
},
{
0xFFFF
,
0
,
false
},
{
0x0045
,
1
,
false
},
{
0x0046
,
1
,
false
},
// Control
{
0x0040
,
1
,
false
},
{
0x004C
,
2
,
false
},
{
0x004E
,
2
,
false
},
{
0x0054
,
2
,
false
},
{
0x0052
,
2
,
false
},
{
0x0050
,
2
,
false
},
{
0x0058
,
2
,
false
},
{
0x005A
,
2
,
false
},
{
0xFFFF
,
0
,
false
},
{
0xFFFF
,
0
,
false
},
{
0xFFFF
,
0
,
false
},
{
0xFFFF
,
0
,
false
},
{
0xFFFF
,
0
,
false
},
// Set point
{
0x0074
,
4
,
false
},
{
0x0068
,
4
,
false
},
{
0x0064
,
2
,
false
},
{
0x0066
,
2
,
false
},
{
0x006C
,
4
,
false
},
{
0x0070
,
4
,
false
},
// Feedback
{
0x0084
,
4
,
false
},
{
0x0080
,
4
,
false
},
{
0x007E
,
2
,
false
},
{
0x0090
,
2
,
false
},
{
0x0092
,
1
,
false
},
{
0x007C
,
2
,
false
},
{
0x0078
,
2
,
false
},
{
0x0088
,
5
,
false
},
{
0x008C
,
4
,
false
}};
\ No newline at end of file
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment