Space Engineers

Space Engineers

MArmOS (Mechanical Arm Operating System) v3.1
Timotei~  [developer] Sep 23, 2016 @ 7:57am
MArmOS help
If MArmOS if not working properly for you, please tell me here.
The best way to help me help you, is to add screenshots of your contraptions and the code you are using whit it.
Last edited by Timotei~; Oct 6, 2016 @ 8:25pm
< >
Showing 46-60 of 637 comments
Timotei~  [developer] Oct 6, 2016 @ 8:18pm 
Hi @SpetS! Glad to see you:steamhappy:. I like your creations.
Actualy, I didn't think about rebindability when I did the mouse controls. I might try to do something about that enventually. In the mean time, if the idea is to manualy control a rotor. Digi's mod by itself could do it.
Also, about your piston problem. Could you send me some screenshots and your code? I can't realy help without these.
Finally, I was going to bed so expect my next message to be tomorow. Good night!:steambored:
Last edited by Timotei~; Oct 6, 2016 @ 8:25pm
SpetS Oct 6, 2016 @ 9:11pm 
I think I got it. I added some lines for the additional piston.
This is Awesome! :steamhappy: Thanks!
jarhead Oct 14, 2016 @ 5:55am 
I am building a ship that will have 2 arms (1 on each side) and each will have more than 1 tool attached (use of a rotor to swap tools). Most of the arm is large ship locks while the "hand" is small ship (to save space). I am using only vanilla parts. What I am needing is help with coding for the arm as I want to use advanced rotors for all joints and have a total of 4 pistons. The arm is bullt as follows:
Ship side to shoulder:
rotor 1, conveyor tube (turn), rotor 2, conveyor tube (turn)
Upper arm:
piston 1, piston 2, conveyor tube (turn)
Elbow:
rotor 3, conveyor tube (turn)
Lower arm:
piston 3, piston 4
Wrist:
rotor 4, conveyor tube (turn), rotor 5, conveyor tube (turn)
Hand
rotor 6 (used to convert to small ship for "hand")
Hand will have 1 landing gear (with 2 lights), 1 grinder, 1 welder, and 1 connector
(each item will face different direction to allow 90 degree turn to next item)
I am needing to get it done so I can have 1 cockpit named "Arm A Control" and with main cockpit active in ship (different cockpit) this one cockpit will only control "Arm A" (each part will have "Arm-A-" at the beginning of the part name). Given that the arm is on the side (or top) of the ship I need to be able to use the quick keys to control the arm.
Example:
menu 1
press "1" once to rotate shoulder + (press again to stop)
press "2" once to rotate shoulder - (press again to stop)
"3" bend shoulder +
"4" bend shoulder -
"5" bend elbow +
"6" bend elbow -
"7" bend wrist +
"8" bend wrist -
"9" reset to 0 for lockdown
menu 2
"1" rotate wrist +
"2" rotate wrist -
"3" next tool (rotate tools 90 degree +)
"4" previous tool (rotate tools 90 degree -)
"5" tool #1 on/off, switch lock
"6" tool #2 on/off, switch lock
"7" tool #3 on/off, switch lock
"8" tool #4 on/off, switch lock
"9" tool #5 on/off, switch lock

If possible I would like to have it so I can use the buttons as described by just having them run the pb using arguments (example: "Arm-A-Shoulder rotate+", "Arm-A-Shoulder rotate-", "Arm-B-Shoulder rotate+", or "Arm-B-Shoulder rotate-"). The arm would be built so it sticks stright out from the ship (no matter if top, bottom, or side) so that +/- 90 on shoulder bend is along body of ship. Under the 1st rotor is a connector with merge block to make the arm removable (pb can be mounted to the arm directly).

I am not very good with coding but I can build the arm if that would help to get the code made for it. Thanks for your time (and great work so far).
Timotei~  [developer] Oct 14, 2016 @ 9:30am 
Hello @jarhead

By reading your arm's description, I can give you its code expression.
It could look like this:


MyArm = new Arm2Joints(
"Z"
, new Joint( "Motor1", 1, 0 )
, MyArm = new Arm3Joints(
"Y"
, new Joint( "Motor2", 1, 2.5F )
, new SolidPart( 6*2.5F, 0, 0 )
+new PistonPart( "Piston1", "X", false )
+new PistonPart( "Piston2", "X", false )
, new Joint( "Motor3", -1, 0 )
, new SolidPart( 5*2.5F, 0, 0 )
+new PistonPart( "Piston3", "X", false )
+new PistonPart( "Piston4", "X", false )
, new Joint( "Motor4", 1, 0 )
)+new SolidPart( 3*2.5F, 0, 0 )
, new Joint( "Motor5", -1, 0 )
);

MyArgumentInput = new ArgumentInput( );
MyInputModule = new InputModule( 0.12F, 0.03F );



But, looking at the control scheme you want to use make me wonder why you actually want to use MArmOS. Its core feature is to bind the control of the arm into a 3 axis frame so there is no need to actually give commands to the joints themselves.
You could instead use hotbars actions to give inputs to your arm.
Something like:

key 1: Move 0 0 0
key 2: Move 1 0 0
key 3: Move -1 0 0
key 4: Move 0 1 0
key 5 Move 0 -1 0
key 6 Move 0 0 1
key 7: Move 0 0 -1

This would allow to move your arm in all directions without having to worry about joints.

I hope it helped.
jarhead Oct 14, 2016 @ 11:12am 
My reason for asking is because I never know what direction I am going to need to tool to point nor what possition I am going to need the arm (I am going to be using it as a small ship docking guide, external maint system, and remote resupply arm [airborn refueling]).
SeniorCaution Nov 5, 2016 @ 6:33am 
you dont have all mods listed because you didnt list the one for the conveyor hinge
Timotei~  [developer] Nov 5, 2016 @ 6:47pm 
@Eskimo Gaming Conveyor hinges is not in the needed mod list because the script doesn't need it to work. One could as well use vanilla rotors to build arms.
FixyNeko Nov 6, 2016 @ 8:23am 
I'm trying to do a simple Arm3Joint, but it accelerate very quickly, and don't stop at desired coordinates, both with digi's mod and Move x y z in a panel. Strange thing is, hed position is correctly computed, since it can output the right position on a text panel while I move the rotors manually. the script sets the angular velocity of rotors at max speed too, doesn't seems right

Arm config:
MinArm = new Arm3Joints(
"Y",
new Joint("R2",-1,0),
new SolidPart(0,0,5*2.5F),
new Joint("R3",1,0),
new SolidPart(5*2.5F,0,0)+new PistonPart("P21","X",true),
new Joint("R4",-1,0)
);
Main:
Vector3 Speed1 = MyInputModule.Update( MinArm );

OutputScreen.Update( MinArm );

var Remain = MinArm.Move( Speed1 );
if (Remain.Length() > Speed1.Length()/4)
MinArm.Move( new Vector3() );
Timotei~  [developer] Nov 6, 2016 @ 10:41am 
@FixyNeko The Arm3Joints has a bug that make it spin violently if it is not setup in a specific configuration. This problem won't happen in the next patch. I'll try to release it this week if I can. Until then, you could wait for the patch or try to reverse your arm and see what happen. Thanks for your pacience.
BluSteel22 Nov 7, 2016 @ 8:27am 
Hey i got my Robo arm to work but i had to go back in the developer version of SE and I love this Scipt/mod Thank you so much Timotei~ for making it
Wingman Nov 20, 2016 @ 7:32am 
Hello Timotei, me again. Somehow there seems to be an issue with copy and paste (especially if you create a blueprint). I got a crane working, copied it and mounted it on another structure. That worked well. After I copied the same crane to the blue prints library and pasted it again it would not do anything anymore. I checked the properties, timer, grid type, saftey overrides, etc. but cannot find any problem. Maybe you do allready now this issue and now a workaround?
Timotei~  [developer] Nov 20, 2016 @ 12:18pm 
Hello @Wingman.
Did you paste multiple cranes on the same grid? If so, you need to cange the rotor's and piston's names so that there is no name conflicts.
This could also be a ownership problem.
jackik Nov 24, 2016 @ 7:50am 
I just got "Program(118,10): Error: Argument 4: cannot convert from 'bool' to 'Program.Joint'". BTW wasn't there once a line given where the problem occured? doesn't seem like it does now.
Timotei~  [developer] Nov 24, 2016 @ 8:10am 
Isn't 118,10 the line and the character where the error happened? Also, "cannot convert from 'bool' to 'Program.Joint" mean you've put a boolean value instead of a Joint. The only case I see that happening is: you've put a sharing flag on a ArmPart() that is lacking a second Joint.

I believe your code may look like this:
new ArmPart(
"Y"
, Motor1
, something
, true
)

If you did'n put the second Joint of the ArmPart, you don't need the sharing flag.
Your code should look like this:

new ArmPart(
"Y"
, Motor1
, something
)

Tell me if that helped
KJIAD Dec 2, 2016 @ 2:21pm 
Been trying this out for a while, but I'm having trouble mostly with the block counting in the SolidPart's. Determining rotor angle/offset, axis isn't always 100% clear either.

Is there any relation to the game's 'grid pivot' or the rotor's starting angle when setting up a definition?

I made something similar to your platform welder, not perfect, but enough to test with I hope...

  • Ignore the plain rotor (it is locked and set to the lowest height/displacement), consider it a single block.
  • Missing a hinge, but I think it will still work, but with less freedom of movement.

Image

public void ArmConfiguration(){ // You can define your Parts here var Motor1 = new Joint( "Motor1", 1, 0); var Motor2 = new Joint( "Motor2", 1, 0); var Motor3 = new Joint( "Motor3", -1, 0, "Y"); var Piston1 = new PistonPart("Piston1", "X"); var Piston2 = new PistonPart("Piston2", "-Z"); var MyArm = new ArmPart( "Z", Motor1, new SolidPart(1*BG,0,1*BG) +new ArmPart( "Y", Motor2, new SolidPart(3*BG,0,0)+Piston1+new SolidPart(-1*BG,0,-3*BG)+Piston2, Motor3, true ) )+Motor3+new SolidPart(-2*BG,0,0); MyArmControler = new ArmControler( MyArm ); MyArmControler.KeyboardInput = true; // MyArmControler.Yaw = Motor4; // MyArmControler.Pitch = Motor6; MyArmControler.Smoot = 10; MyArmControler.Speed = 5; // MyArmControler.RelativeX = true; // MyArmControler.RelativeY = true; // MyArmControler.RelativeZ = true; }
< >
Showing 46-60 of 637 comments
Per page: 1530 50