ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question
0

dynamixel wheel mode

asked 2015-06-16 08:50:10 -0500

rmoncrief gravatar image

updated 2015-06-16 15:32:53 -0500

130s gravatar image

I am trying to put my dynamixel mx-64 servo motor into wheel mode like it says in step 1 of this tutorial http://wiki.ros.org/dynamixel_control... can anyone explain to me how to put the motor into wheel mode on ubuntu?

edit retag flag offensive close merge delete

Comments

Did u managed to apply torque control?

zweistein gravatar image zweistein  ( 2016-02-11 03:00:41 -0500 )edit

2 Answers

Sort by ยป oldest newest most voted
1

answered 2016-01-19 04:00:14 -0500

roxane gravatar image

Hi,

I had the same problem, and I realised that putting the dynamixel in wheel mode is the same as setting CW angle and CCW angle to 0:

 rosrun dynamixel_driver set_servo_config.py 1 --cw-angle-limit=0 --ccw-angle-limit=0

"1" states for your motor ID. If you get the following message, then your motor is set to wheel mode:

Configuring Dynamixel motor with ID 1
Setting CW angle limit to 0
Setting CCW angle limit to 0
done

However, I found that there are some issues in this mode for AX-12A: for the range of angle values that are not available in standard mode, the velocity and load values are all wrong. Here are some values I get:

current load:  0.03515625
current vel =  0.79042471074
current load:  0.03515625
current vel =  0.79042471074
current load:  0.10546875
current vel =  0.37196456976
current load:  0.10546875
current vel =  0.37196456976
current load:  0.10546875
current vel =  0.37196456976
current load:  0.16796875
current vel =  0.0
current load:  0.16796875
current vel =  0.0
current load:  0.82421875
current vel =  -27.7229843399
current load:  0.82421875
current vel =  -27.7229843399
current load:  0.82421875
current vel =  -27.7229843399
current load:  0.50390625
current vel =  -7.96236657142
current load:  0.50390625
current vel =  -7.96236657142
current load:  0.50390625
current vel =  -7.96236657142
current load:  0.16796875
current vel =  0.0
current load:  0.16796875
current vel =  0.0
current load:  0.14453125
current vel =  0.13948671366
current load:  0.14453125
current vel =  0.13948671366
current load:  0.14453125
current vel =  0.13948671366
current load:  0.05078125
current vel =  0.6974335683
current load:  0.05078125
current vel =  0.6974335683

The range [0.03 0.05] for the load and [0.69 0.79] for the velocity are correct, but then they take unexpected values, such as 0.82 for the load and -27 for the velocity. Did anyone encountered such issue? I think the problem might be in the joint_position_controller.py file in the dynamixel_controller package, when state is defined with the function filter:

def process_motor_states(self, state_list):
        if self.running:
            state = filter(lambda state: state.id == self.motor_id, state_list.motor_states)
            if state:
                state = state[0]
                self.joint_state.motor_temps = [state.temperature]
                self.joint_state.goal_pos = self.raw_to_rad(state.goal, self.initial_position_raw, self.flipped, self.RADIANS_PER_ENCODER_TICK)
                self.joint_state.current_pos = self.raw_to_rad(state.position, self.initial_position_raw, self.flipped, self.RADIANS_PER_ENCODER_TICK)
                self.joint_state.error = state.error * self.RADIANS_PER_ENCODER_TICK
                self.joint_state.velocity = state.speed * self.VELOCITY_PER_TICK
                self.joint_state.load = state.load
                self.joint_state.is_moving = state.moving
                self.joint_state.header.stamp = rospy.Time.from_sec(state.timestamp)

                self.joint_state_pub.publish(self.joint_state)

I just cannot find any description of this filter function to look into it.

If anyone has an answer for this, it would be very helpful.

edit flag offensive delete link more

Comments

I have the motors mounted in a robot arm, how can I check the initial values of CW angle and CCW angle, so I can set them to (0,0) and then back to the original setup?

zweistein gravatar image zweistein  ( 2016-02-11 03:04:00 -0500 )edit
0

answered 2015-06-16 15:02:32 -0500

130s gravatar image

updated 2015-06-16 15:33:29 -0500

I hope I'm wrong but the operating mode might be hardcoded per the product model and there might not be a way to change them programatically. For example:

DXL_MODEL_TO_PARAMS = \
{
    113: { 'name':               'DX-113',
           'encoder_resolution': 1024,
           'range_degrees':      300.0,
           'torque_per_volt':    1.0 / 12.0,                       #  1.0 NM @ 12V
           'velocity_per_volt':  (54 * RPM_TO_RADSEC) / 12.0,      #  54 RPM @ 12V
           'rpm_per_tick':       0.111,
           'features':           []
         },
:
     12: { 'name':               'AX-12',
           'encoder_resolution': 1024,
           'range_degrees':      300.0,
           'torque_per_volt':    1.5 / 12.0,                       #  1.5 NM @ 12V
           'velocity_per_volt':  (59 * RPM_TO_RADSEC) / 12.0,      #  59 RPM @ 12V
           'rpm_per_tick':       0.111,
           'features':           []
         },
:
    320: { 'name':               'MX-106',
           'encoder_resolution': 4096,
           'range_degrees':      360.0,
           'torque_per_volt':    8.4 / 12.0,                       #  8.4 NM @ 12V
           'velocity_per_volt':  (45 * RPM_TO_RADSEC) / 12.0,      #  45 RPM @ 12.0V
           'rpm_per_tick':       0.114,
           'features':           [DXL_CURRENT_L, DXL_TORQUE_CONTROL_MODE, DXL_GOAL_ACCELERATION]
         },
}

You could submit a feature request on the issue tracker but since the development is stale, sending a pull request might be the best idea.

edit flag offensive delete link more

Question Tools

Stats

Asked: 2015-06-16 08:46:36 -0500

Seen: 2,365 times

Last updated: Jun 16 '15