太空工程师吧 关注:36,748贴子:508,613
  • 11回复贴,共1

求助,有没有办法能够直接命令转子旋转到固定的角度

只看楼主收藏回复

想搞一个可动护甲的飞船,但是转子只能调最大角和最小角,转子一多起来不能固定角度逻辑就很复杂了。哪怕让我能直接命令它转到最大角和最小角也行啊,只靠反转没法判断它当前的角度不好做后续动作啊。
有没有什么办法或者脚本能够控制?


IP属地:广西1楼2023-09-13 14:39回复
    之前写过一个太阳能自动跟踪,用到了两个转子,PD控制,设定角度自动转到对应角度,下班回去我找找代码。


    IP属地:河南3楼2023-09-13 15:25
    收起回复
      可以用定时块,设置最大角和最小角就是你要的角,点下就实现了。另外再一个定时块把最大角最小角放最大,点下就恢复。
      昨天刚试出来。用来做伸缩炮塔的。


      IP属地:浙江来自Android客户端4楼2023-09-14 09:13
      回复
        public Program()
        {
        Runtime.UpdateFrequency = UpdateFrequency.Update1;
        }
        public void Save()
        {
        }
        public static double AngleToRad(double angle)
        {
        return angle*180/Math.PI;
        }
        double last_error=0;
        //设定角度
        public double TurnTo(double set_rad,double get_rad)
        {
        const double P=0.02f;
        const double D=0.5f;
        double this_error=0;
        double output=0;
        if(set_rad>360)set_rad=360;if(set_rad<0)set_rad=0;
        Echo("设定角"+set_rad);
        this_error=set_rad-get_rad;
        output=P*this_error+D*(this_error-last_error);
        last_error=this_error;
        return output;
        }
        public void Main(string argument, UpdateType updateSource)
        {
        IMyTextPanel power_lcd=GridTerminalSystem.GetBlockWithName("LCD") as IMyTextPanel;
        //获取所有转子
        List<IMyMotorStator>rotors=new List<IMyMotorStator>();
        GridTerminalSystem.GetBlocksOfType<IMyMotorStator>(rotors);
        IMyMotorStator rotor=rotors[0];
        double new_angle=90;
        rotor.TargetVelocityRad=(float)TurnTo(new_angle,AngleToRad(rotor.Angle));
        power_lcd.ShowPublicTextOnScreen();
        //输出字符
        power_lcd.WritePublicText("\n\r"+AngleToRad(rotor.Angle).ToString(),true);
        power_lcd.WritePublicText("\n\r"+rotor.Angle.ToString(),true);
        }


        IP属地:河南5楼2023-09-14 10:24
        收起回复