Hello Simon,
"As I understand, the link coordinate system is the 'master' body system
(Body2)."
This is not correct. Your link coordinate system is defined here,
rotation_link->Initialize(rotating_body, fixed_body, ChFrame{});
ChFrame{} initialize a reference frame coincide with the global reference
frame. Because your Body2 (fixed_body) has the same orientation as the GRF,
and it is fixed, it just so happens that your link coordinate system is the
same as the 'master' body system.
You can check the orientation of the link coordinate system using this:
auto quat = rotation_link->GetLinkAbsoluteCoords().rot
Thank you,
Luning
On Tuesday, March 7, 2023 at 9:45:38 AM UTC-6 Simon wrote:
Hi,
as per the documentation
<https://api.projectchrono.org/classchrono_1_1_ch_link_motor_rotation_speed.html>,
ChLinkMotorRotationSpeed's member functions Get_react_force() and
Get_react_torque() return the respective values in link coordinates.
As I understand, the link coordinate system is the 'master' body system
(Body2).
In the example below a body rotates around the absolute z axis using
ChLinkMotorRotationSpeed (the 'master' body is fixed here). As expected,
the link reaction force consists of a the constant body weight in z
direction and the rotating centrifugal load in the x-y plane. However, the
reaction torque (due to gravity) is constant despite the link's rotation.
Shouldn't the torque vector also rotate or do I misunderstand something?
Thanks in advance!
Simon
*Code: *
ChSystemNSC system{};
auto fixed_body{chrono_types::make_shared<ChBody>()};
fixed_body->SetBodyFixed(true);
auto rotating_body{chrono_types::make_shared<ChBody>()};
rotating_body->SetPos({1.0, 0.0, 0.0});
auto rotation_link{chrono_types::make_shared<ChLinkMotorRotationSpeed>()};
rotation_link->Initialize(rotating_body, fixed_body, ChFrame{});
rotation_link->SetSpeedFunction(chrono_types::make_shared<ChFunction_Const>(1.0));
system.Add(fixed_body);
system.Add(rotating_body);
system.Add(rotation_link);
system.Set_G_acc({0.0, 0.0, 10.0});
for (double time{}; time < 1.0; time += 0.01)
{
system.DoFrameDynamics(time);
std::cout << std::fixed << std::setprecision(3) << "Time: " <<
system.GetChTime()
<< " *** Force: " << rotation_link->Get_react_force()
<< " *** Moment: " << rotation_link->Get_react_torque() <<
"\n";
}
*Output: ...*
Time: 0.810 *** Force: 0.697 0.717 10.000 *** Moment: 0.000 -10.000
-0.000
Time: 0.820 *** Force: 0.690 0.724 10.000 *** Moment: 0.000 -10.000
-0.000
Time: 0.830 *** Force: 0.682 0.731 10.000 *** Moment: 0.000 -10.000
-0.000
Time: 0.840 *** Force: 0.675 0.738 10.000 *** Moment: 0.000 -10.000
-0.000
Time: 0.850 *** Force: 0.667 0.745 10.000 *** Moment: 0.000 -10.000
-0.000
Time: 0.860 *** Force: 0.660 0.751 10.000 *** Moment: 0.000 -10.000
-0.000
Time: 0.870 *** Force: 0.652 0.758 10.000 *** Moment: 0.000 -10.000
-0.000
Time: 0.880 *** Force: 0.645 0.764 10.000 *** Moment: 0.000 -10.000
-0.000
Time: 0.890 *** Force: 0.637 0.771 10.000 *** Moment: 0.000 -10.000
-0.000
Time: 0.900 *** Force: 0.629 0.777 10.000 *** Moment: 0.000 -10.000
-0.000
Time: 0.910 *** Force: 0.622 0.783 10.000 *** Moment: 0.000 -10.000
-0.000
Time: 0.920 *** Force: 0.614 0.790 10.000 *** Moment: 0.000 -10.000
-0.000
Time: 0.930 *** Force: 0.606 0.796 10.000 *** Moment: 0.000 -10.000
-0.000
Time: 0.940 *** Force: 0.598 0.802 10.000 *** Moment: 0.000 -10.000
-0.000
Time: 0.950 *** Force: 0.590 0.808 10.000 *** Moment: 0.000 -10.000
-0.000
Time: 0.960 *** Force: 0.582 0.813 10.000 *** Moment: 0.000 -10.000
-0.000
Time: 0.970 *** Force: 0.574 0.819 10.000 *** Moment: 0.000 -10.000
-0.000
Time: 0.980 *** Force: 0.565 0.825 10.000 *** Moment: 0.000 -10.000
-0.000
Time: 0.990 *** Force: 0.557 0.831 10.000 *** Moment: 0.000 -10.000
-0.000
--
You received this message because you are subscribed to the Google Groups
"ProjectChrono" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/projectchrono/bf6c7e92-b3c2-49a0-9ebf-e561927fb072n%40googlegroups.com.