4am-robotics / cob_control

The cob_control stack includes packages that are used to do low level control tasks with Care-O-bot hardware over ROS.
www.care-o-bot.org
Apache License 2.0
35 stars 64 forks source link

[cob_omni_drive_controller] Insights and findings from steer behavior tests #143

Open fmessmer opened 7 years ago

fmessmer commented 7 years ago

This is a detailed summary of the investigations performed last week - on cob4-8 hardware: (For previous investigations in simulation see here)

Main objectives:

Current controller implementation/configuration results in e.g. the following step response showing

robot_step_linear_0 5_post_angular

Note that currently both drive and steer joints are commanded in VelocityMode using the Mass-Spring-Damper-Control algorithm with fixed parameters (from yaml).

The reaction of the steer joints is of particular interest: robot_step_linear_post_rotation_steer_target It can be seen that the steer joints require about ~1.0 sec for reaching the target steer position (i.e. target veloctiy == 0.0 again) with a significant velocity ramp on initial stimulus and overshoot/oscilation (steer_target_velocity[1]).

The initial ramp is due to cut-off limitation of steer drive acceleration. There also is a joint-specific cut-off limitation of the steer drive velocity. This might lead to non-coordinated movement of the wheels. Which might lead to wear on the base frame.

With #91 and #140, experiments were performed in order to optimize controller behavior by modifying/tuning control parameters: First the controller-internal acceleration/velocity limitation has been disabled. This leads to a quicker reaction after receiving an input stimulus: robot_step_1 0_linear_x_post_linear_y_no_limit_twist_controller Still there is significant overshoot and settle time is still about 1.0 sec.

Note there still is an acceleration/velocity limitation within the Elmo controller itself which can be seen in the following plot (graphs with dots depict joint_states). It can be seen that target velocities are un-limited (in left plot) while measured joint_states shows a limitation. robot_velocity_command_limited_joint_states

Experimental modifications (i.e. without proper system identification and control engineering expertise) of mass, spring and damping parameters did not lead to a significantly better behavior (oscillation/escalation of steer joints). robot_spring_35

Another interesting effect of the velocity-controlled steer joints is depicted in the following plot: robot_step_0 5_b_caster_rotation_joint_velocity_long It clearly shows a steer-position-dependend, 360°-periodic velocity noise (joint velocity command vs. joint velocity) in the magnitude of about +/-0.5 rad/sec.

As steer joints are not designed/proportioned/configured for velocity control, position mode for the steer joint has been tested as well. Position mode shows much better accuracy and reactivity as well as less noise in the sensor data. This is well worth further investigation...

Available new features of ros_control (from Jade onwords, because API-changing) allow the implementation of multiple/mixed interfaces within a single controller. Thus a controller is proposed in #140 for Kinetic using position-controlled steer joints and velocity-controlled drive joints. More on this in a separate issue #144

@ipa-mdl @ipa-fmw @ipa-mig @ipa-bnm @ipa-flg @ipa-tif @ipa-nhg @fmessmer FYI Please leave comments/suggestions/questions :wink:

timhappy commented 7 years ago

Great summary Felix! The Noise in the last picture is unclear to me, we can go hunting it togther but I'm sure Elmo isn't sendig this noise. Otherwise a control would not be possible. The graph looks like a wrong sampling e.g. from a buffer.

As already stated out a speparation of controlers is needed. The mass-spring-damper-system is a plant for an open position control loop. That is not needed anymore because the elmo has a good tuned closed position loop. After erasing this from the wheel multi controller there should be left "only" the solving of the inverse kinematic problem, at least in my understanding. There should no control loop be inside to avoid frequenzy dependant phaseshifts that lead to instability. CPCs approach included the position loop because its mistly based on velocities - as far as I remember. Couldn't a general solver for parallel kinematics help us?