Normalize Normalize ! The chaos is the only confusing part !

GroG's picture

Sometimes we need to figure out unecessary complexities, so that we can make things more accessable.

I'm talking about Arduino Board Type.  Something you'd think is very straight forward, yet .. its not.  Not because it can't be, but I think because few have taken the time to make sense of it.

"Board Type" is a general term, but there are potentially 2 things which depend on it.


Tracking service problem on Linux installation

burtbick's picture

I had buried this at the end of my replay on my other thread, so I'm expanding on it here and giving it it's own Subject.  One of the issues is no longer present in the latest build so that was fixed, but I still have the Tracking service crashing and am looking for the cause and a solution.

I am running MRL on Linux Mint 18.  This is on my notebook and that installation of Mint is using the OpenJDK and NOT Oracle's Java.

Newbie questions (and answered myself)

burtbick's picture

First I want to say that MRL looks teriffic and I have seen a lot of good things being done with it.  I've finally started building a robot based on InMoov, basically using InMoov design for the head to start but looking to incorporate my own designs for the rest of the body.

I've been trying to get MRL up and talking to Ardunio, but I have a couple of questions.

 

First I'm running on Linux, and not Windows.  I have MRL latest .1758 installed and all addons installed as well.

Newbie questions

burtbick's picture

First I want to say that MRL looks teriffic and I have seen a lot of good things being done with it.  I've finally started building a robot based on InMoov, basically using InMoov design for the head to start but looking to incorporate my own designs for the rest of the body.

I've been trying to get MRL up and talking to Ardunio, but I have a couple of questions.

 

First I'm running on Linux, and not Windows.  I have MRL latest .1758 installed and all addons installed as well.

master

IntegratedMovement Service

javadoc

IntegratedMovement is a service that use inverse kinematic computation to control the position of a robot arms. So instead of moving each joints separatly, you give a position in a 3d space and the arm will take to position it need to reach that position.

Setup: 

Using InMoov service

The integratedMovement service have been add to the inMoov service and will load default setting.

the command to start the service is 

InMoov.startIntegratedMovement()

If the range of your servo do not correspond to the default setting, you can adjust the limits using

InMoov.IntegratedMovement.setMinMaxAngle(partName, minAngle, maxAngle)... partName is the same name as the servo that move a part. 

 

Using IntegratedMovement as standalone service

The IntegratedMovement can be use for any robot. You will need to define the DH parameters for each joints before you can use it. 

The first thing you must do is to declare a new DHRobotArm with setNewDHRobotArm(armName). This will create a new thread class that will command the arm or the robot.

Then you must setup the DHLinks for each joints of the arm. The DHLinks will define how a joints moves relatively to the previous joints. The DH parameters are explained in this video

https://www.youtube.com/watch?v=rA9tm0gTln8

If you want the same coordinated for all of your arms, they must start all your arms with a common link originated at the same point

To set the DHLinks, you must use one of those methods

  • setDHLink(armName, linkName, d, theta, r, alpha)
  • setDHLink(armName, servo, d, theta, r, alpha)

    • d, theta, r and alpha are the DH parameters (see the video)
    • the first version use a string as linkName. It will make a static link that don't rotate, but still take in account for the inverse kinetic algorythm
    • the second version initialize the link with information found in the servo class, like the min/max limits. It will also establish communication between the DHRobotArm and the Servo so when the servo moves the DHRobotArm get updated about the movement.

Finally, you start the DHRobotArm thread with startEngine(armName)

 

You can also setup physicals objects that will be taken in account by the inverse kinetic engine to avoid collision between the defined objects.

To add an virtual object in the environnement of your robot, you must use

  • addObject(OriginX, OriginY, OriginZ, EndX, EndY, EndZ, objectName, radius, jmeRender)

    • Object are all considered as a cylinder, so you must define a Origin and a End point relative to your first DHLink origin and a radius. Units must be the same as use for defining the DH parameters
    • jmeRender is a boolean (True/False) that will make the object appear (render) into the JmeApp if you are using it
    • the objects set are static and cannot be moved

To set your DHLink as objects you must use

  • addObject(objectName, radius, jmeRender)

    • Object name must be the same name as the DHLink it's link to
    • jmeRender is a boolean (True/False) that will make the object appear (render) into the JmeApp if you are using it
    • the inverse kinetic engine will update the position of the object, so you dont have to give an Origin and End point

the method objectAddIgnored(objectName1, objectName2) will make the inverse kinetic engine ignore collision between the two object defined. This may be necessary if two objects are too close that the engine detect them as colliding.

The kinect can be use to 'see'  the objects in front of the robot. You can start the kinect with startOpenNI(). the kinect is not reading the environment in real time yet, you must ask it to take a snapshot with processKinectData()

 

example: 

[[/service/IntegratedMovement.InMoov.py]]

ESP-Wroom-32 Web Server meets some Nema17 stepper's

Gareth's picture

This is a walkthrough on how to control Nema17 Stepper motors using an ESP32 Webserver.

In the example above I am using the local ESP32 webserver to control InMoov's neck screw via a Nema17 stepper motor and 3D printed Gearbox.

Controlling Stepper motors via a Wifi enabled webserver opens up an easy way to control remote devices. The information here shows how this can be done easily and at low cost.

Requirements :-


Add win32com Library

Bretzel_59's picture

Hello,

 

I'm trying to use the windows TTS in MRL but I don't know if it is possible to add the win32com library.

I've downloaded this file : http://www.java2s.com/Code/Jar/c/Downloadcommwin32all201jar.htm and put in libraries\jar folder but it didn't work.

under python 2.7 with pywin32, it's quite easy to use windows TTS :

 

import win32com.client


BUFFER OVERRUN - cause script stuck

moz4r's picture

Hello all !

I experiment some problems. I try to isolate them one by one.
With combinaison of some ingredients like input poling + servo moveto I get script stuck or servo delays. Sometime arduino down

http://a141.idata.over-blog.com/300x293/3/57/87/39/potion-magique.jpg

leap motion

pedro's picture

Hello!!

 

ive been a bit out of picture but now im back!!! 

Im at the moment trying to use leap motion to control the myrobotlab! does anyone have a clue on how to do it? i know have been done in the past!

 

Even if it doesnt work anymore with the changes on MRL what is the best way to implement information from an outside source (leap) into maybe the python interface? Could someone throw me a hint <) thanks alot

 

Pedro