Asked — Edited
Resolved Resolved by DJ Sures!

3Ds Max

Hey there, I just got my ez-robot developers kit today and would to like starting on my project which involves building a robot in a 3d application, printing it and transferring the robots movement out for the 3d application directly!

So my question would be if there is anyone out here in the forum who ever did this, or someone having used max script and could help me to send rotation values in the right form out of 3ds max to the ARC s http server!

It would be supercool if there is someone knowing how to do this, I am kind of lost when it comes to scripting!

XXXSwann


ARC Pro

Upgrade to ARC Pro

Unlock the true power of automation and robotics by becoming a proud subscriber of Synthiam ARC Pro.

#1  

Here is a thread that discussed something similar that you may want to check out: https://synthiam.com/Community/Questions/8309

PRO
Synthiam
#2  

Have you used google to find tutorials on how to use 3d studio max? It might also be useful to see if there are night courses offered at your local college or university. Generally, people will use the Auto Position control in ARC to make robot animations.

If i were to take this path, i would start by learning how to use 3d studio max.

In the meantime, the Auto Position will be much easier for you - as 3d studio max will take weeks of effort. The good news about 3d studio max, is that all the ez-robot STL files can be imported into it. And you can make your robot model. I did that in blender with a Six - it took about 1 week to build the robot model, although i couldn't get the animations correct. I had a hard time understanding how to assign joints and relations between the parts. I find 3d modeling for animation pretty difficult.

#3  

Hey guys, Thank you so much for the quick reply, this is very supportive!

The post that WBS00001 pointed out seems to be more like something where the workflow goes from positioning the robot to recording, while what I would want to do is the opposite thing!

I would have a 3D model where you could use all the 3ds max animation tools like IK, different curves or keyframe methods and would transfer those on my real life model!

I already know 3ds max to the core so this is not my issue! I just dont know how to make a script that would send the data to the custom http server or to a COM port to talk to the EZ-B!

I researched a lot already, and also found a member here in the community accomplishing this task...any info on how this was done would be super helpfull!

:)

#4  

Hey, actually it would also help just to let me know how to send EZ-Script commands directly through a web or HTTP interface, so I can have another app driving the servos of my robot!

In the help section of the ARC it says, the url can be formatted as: http://<ip address>/Exec?password=<password>&script=<uri encoded script>. An example that will return two servo positions with a comma seperating the values is http://192.168.0.1/Exec?password=admin&script=Print("GetServo(D5), GetServo(D6)").

But since I have no clue on scripting I would need some help how this is accomplished....am I asking this question right?

PRO
Synthiam
#5  

GetServo would return the position of the servo, that's the opposite of what you wish to accomplish, i believe.

This is what you want...


 http://192.168.0.1/Exec?password=admin&amp;script=Servo(D6, 20)

That will move the servo of D6 to position 20.

#6  

OK, I guess this will sort of answer my question...now I will need to check if this works with max script right? I am so bad at scripting, but I will try to figure this out tonight and see how far it will take me! :D

PRO
Synthiam
#7  

:) haha, scripting can be a pain for sure to learn!

Here's what you need to know... The command that i sent above will move the servo into position 20, however that means 20 degrees. The servo positions are in degrees, so that hopefully will help as well.

I did find this with a google search... it's a way to send http data via Max Script. Now, you will want to send the data throughout the animation, so i'm not sure how to do that - given that i have never seen 3d max before ether :P

Here's the script that i found online


---------------------------------------------------------------------------------------------------------
/*
# This script will ping scriptspot and get the
# raw data from the server.
*/

/* Http socket open */
rollout httpSock &quot;httpSock&quot; width:0 height:0
(
activeXControl port &quot;Microsoft.XMLHTTP&quot; setupEvents:false releaseOnClose:false
);
createDialog httpSock pos:[-100,-100];
destroyDialog httpSock;

/* HTTP socket connect */
httpSock.port.open &quot;GET&quot; &quot;http://192.168.0.1/Exec?password=admin&amp;script=Servo(D6, 20)&quot; false;

httpSock.port.setrequestheader &quot;If-Modified-Since&quot; &quot;Sat, 1 Jan 1900 00:00:00 GMT&quot;;
httpSock.port.send();

/* HTTP socket return */
print (httpSock.port.responsetext); // &lt;- don't care about this
---------------------------------------------------------------------------------------------------------

And here's teh post that it came from http://www.scriptspot.com/3ds-max/tutorials/how-to-create-a-self-updating-max-script-or-macro-script

So what you really care about is the top portion. I added a comment to the last command which isn't useful to what you're doing. There is no need to print the result

Also, keep in mind that i noticed the ip address is 192.168.0.1. That may be misunderstood, but it is the ip address of the ARC Computer, not the EZ-B.

If you wish to send data to the EZ-B directly, and by pass ARC, then i can help you with that as well. It isn't an HTTP command, but it can be done with TCP. Not sure what 3d Max has for a TCP client.

#8  

Thank you so much for the help! I tried the script and it works perfect. What would be the benefit of sending it directly to the EZ-B?

My plan is to make a 3d model of my robot in 3ds max and export the animation to the real robot controlled by the EZ-B...

I found some stuff on max script and DotNet too, but since I have no idea about how this works I am not sure if it is helpfull!

http://techarttiki.blogspot.de/2009/12/maxscript-dotnet-sockets-with-python.html

http://forums.cgsociety.org/archive/index.php?t-1015202.html

PRO
Synthiam
#9  

The benefit to talking directly to the ezb bypasses the software etc but doesn't sound like what you need.

I'm not sure yet how we can make the movements recorded in ARC just yet.

#10  

So what I would like to do is to build a rig in 3ds max that will control the robot model and by directly sending all the changes out of 3ds max to the servos you would instantly get a result in real time!

After the animation is done it could be exported in a proper file format to be imported into the Auto Position in ARC and the different animations created could be used for Actions which then would work inside of the ARC!

Autodesk offers a free three years student licence to anyone wanting to learn the application, which makes it sort of interesting for the community too! :)

#11  

To do this, I would suspect that you would have to

Use a 3DS api to output the data from 3DS to a custom developed app which uses the ezb sdk to then move the robot via the ezb. From there, you would transform these commands to ARC compatible commands to populate the auto movement control.

Nobody has developed this but you can add plugins to ARC.

Universal bot may be the better tool to use instead of the sdk, but IDK.

If you dont write code, IDK for sure how you would accomplish this. It looks like DJ is providing help to you on that front.

#12  

The code the DJ Sures found works fine so far, but as I am so bad at scripting I would need help on how incorporate a changing value into this line of code!

So if I had a changing rotation value which might also be something like 20.123 how would I make this an even number and fuse it into the fixed number within this line of code!

httpSock.port.open"GET""http://192.168.0.1/Execpassword=admin&script=Servo(D6, 20)" false;

So the angle of the servo should be replaced by a variable!

This might be a very NOOB question, but any help on this would be appreciated!

;)

PRO
Synthiam
#13  

Hmm, well the decimal number is okay to pass to ARC. ARC.servo position will take decimal values.

As for the the variable... What do variables look like it 3dmax? Do they start with a $dollarsign and look like that?

#14  

No they dont...here is something about assigning variables in maxscript, does that help?

http://docs.autodesk.com/3DSMAX/14/ENU/MAXScript%20Help%202012/index.html?url=files/GUID-308EA213-59FA-4F1B-AF40-FC7E658F5DD-150.htm,topicNumber=d28e63734

#15  

Got it working...

a = "http://192.168.178.94/Exec?password=admin&script=Servo(D0, " b = $.rotation.z_rotation as string c = ")" d = a+b+c

/* Http socket open */ rollout httpSock "httpSock" width:0 height:0 ( activeXControl port "Microsoft.XMLHTTP" setupEvents:false releaseOnClose:false ); createDialog httpSock pos:[-100,-100]; destroyDialog httpSock;

/* HTTP socket connect */ httpSock.port.open "GET" d false;

httpSock.port.setrequestheader "If-Modified-Since" "Sat, 1 Jan 1900 00:00:00 GMT"; httpSock.port.send();

/* HTTP socket return */ print (httpSock.port.responsetext);

#16  

Hey guys....just got a reminder to check this as resolved which I will do now, thanks for helping me out on this on DJ Sures! I am still working on this, had some problems with local rotation values, I will post my script that I am working with right now which updates the rotation of two servos linked to an IK chain in 3dsmax real time! Next step will be to 3d print my robot and rig it in 3dsmax for the animation, once this is done it could be fun to see how to save those animations in ARC!

But that would be another thing, so this question seems to be solved... :)

#17  

unregisterRedrawViewsCallback servo_r

/* Http socket open*/ rollout httpSock "httpSock" width:0 height:0 ( activeXControl port "Microsoft.XMLHTTP" setupEvents:false releaseOnClose:false ); createDialog httpSock pos:[-100,-100]; destroyDialog httpSock;

/* Get the rotation from the objects and send them*/ fn servo_r = ( /first servo/ a = "http://192.168.178.94/Exec?password=admin&script=Servo(D0, " b = $D0.rotation.z_rotation as integer c = ")" d = a+b as string +c

/* HTTP socket connect */ httpSock.port.open "GET" d false; httpSock.port.send();

/second servo/ e = "http://192.168.178.94/Exec?password=admin&script=Servo(D1, " f = $ExposeTransform001.localEulerZ as integer g = ")" h = e + f as string + g

/* HTTP socket connect */ httpSock.port.open "GET" h false; httpSock.port.send();

print (b)
print (f)

)

registerRedrawViewsCallback servo_r

#18  

The $ExposeTransform001.localEulerZ is used to get local rotation values from the joints of the IK chain.... I am really bad at coding, so if anyone knows how to clean this up at bit, I would appreciate any help! If anyone is interested in the 3dsmax scene or would also like to do something similar, just let me know!

Oh and the smiley faces are brackets! :D

#19  

Ok....I try once more to flag this as resolved! :)