How can I set an initial position and control a cable robot in simscape multibody?
44 views (last 30 days)
Show older comments
I am trying to model a cable robot with four cables in simscape to find the forces on the four, outer supports. I am doing this by rotating the motors and spool (revolute joint and spool).
Whenever I run it, the platform in the centre flies of to the side and bounces around before failing. the error says that "The kinematic constraints can not be maintained...". a screenshot of the brocken system is shown in the second image below.
I initially based this model on the cable robot example in matlab, which directly moved the platform, which moved the cables and the motors. This error occured after I tried the inverse of moving the motors first based on the position angle-position profile recorded from the previous method. If I base the rotation on torque and set that to 0 then the plate starts in a random position and swings throught the base and back before flying in random directions. this leads me to believe that my model has some fundamental flaw.
If anyone has any advice on how to use pulley systems and spools, how to set the initial position of the platform based on the motors revolute joints or why this is happening I would be so grateful.
Equally if anyone has any knowlege of the kinematics and/or control of a cable robots that they could share, that would be amazing.I am also happy to add any clarification to this question if that can help. Thank you!
Model View:
Brocken Running View:
0 Comments
Answers (1)
Aditya
on 25 Jun 2024
Modeling a cable robot in Simscape can be challenging due to the complex interactions between the cables, pulleys, and the platform. The issues you're facing, such as the platform flying off and the kinematic constraints not being maintained, often stem from incorrect initial conditions, improper constraints, or issues with the solver settings. Here are some steps and tips to help you troubleshoot and improve your cable robot model:
Steps to Troubleshoot and Improve Your Model
1. Initial Conditions and Constraints:
- Initial Position : Ensure that the initial positions of the platform and the cables are set correctly. The platform should start in a stable position with all cables properly tensioned.
- Revolute Joints : Set the initial angle of the revolute joints such that the cables are tensioned and the platform is in the desired initial position. You can use the `Initial Condition` setting in the revolute joint blocks.
2. Pulley and Spool Systems:
- Pulley Blocks: Use the `Pulley` blocks correctly to model the cable routing. Ensure that the pulleys are placed at the correct locations and connected properly to the cables and the platform.
- Spool Dynamics: Model the spools accurately by setting the correct radius and inertia. Ensure that the spools are connected to the motors via revolute joints.
3. Solver Settings:
- Solver Configuration: Use a solver configuration that is suitable for the dynamics of your system. For cable robots, a variable-step solver like `ode45` or `ode15s` is often more stable.
- Tolerances: Adjust the solver tolerances to ensure numerical stability. Start with relatively loose tolerances and tighten them as needed.
4. Validation of Subsystems:
- Subsystem Testing: Validate each subsystem (e.g., pulley system, spool dynamics, cable tension) individually before integrating them into the full model. This helps to isolate and fix issues in smaller parts of the model.
5. Control and Kinematics:
- Control Strategy: Implement a control strategy to maintain the desired position of the platform. This could be a feedback control system that adjusts the motor torques or angles based on the platform position.
- Kinematic Constraints: Ensure that the kinematic constraints are correctly defined and maintained throughout the simulation. Use `Constraint` blocks if necessary to enforce these constraints.
Example setup:
% Define initial conditions for the platform and motors
initialPlatformPosition = [0, 0, 0]; % Replace with your desired initial position
initialMotorAngles = [0, 0, 0, 0]; % Replace with the initial angles that tension the cables
% Set initial conditions in the model
set_param('your_model_name/Platform', 'InitialPosition', mat2str(initialPlatformPosition));
set_param('your_model_name/Motor1/RevoluteJoint', 'InitialAngle', num2str(initialMotorAngles(1)));
set_param('your_model_name/Motor2/RevoluteJoint', 'InitialAngle', num2str(initialMotorAngles(2)));
set_param('your_model_name/Motor3/RevoluteJoint', 'InitialAngle', num2str(initialMotorAngles(3)));
set_param('your_model_name/Motor4/RevoluteJoint', 'InitialAngle', num2str(initialMotorAngles(4)));
% Configure solver settings
set_param('your_model_name', 'Solver', 'ode45');
set_param('your_model_name', 'RelTol', '1e-3');
set_param('your_model_name', 'AbsTol', '1e-6');
% Run the simulation
sim('your_model_name');
0 Comments
See Also
Categories
Find more on Simulation and Analysis in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!