NEVER do this:
feritoID != "none"
This will always be true, because Strings are immutable in Java, so even if the text of the Strings is the same, these are two different instances and therefor, your != will always be true. Always check Strings for equality by using equals(). But that aside, i obviously wasn't clear enough on how translate() works.
translate() translates RELATIVE to the current position, i.e. if you want the object to travel 0.1 units in x-direction, you simply do translate(0.1,0,0). In your code, you are translating by the current position+, i.e. if your current position is (10,0,0) and you add 0.1 to x, you'll translate by (10.1,0,0). That explains the jumps your are experiencing.
And collision detection can only work if applied...it's not implicit when doing a translation.
In your case, this will somehow look like this (the 5f and 10f are wild guessing from me here):
if ((obj_up) && (!feritoID.equals("none"))){
Object3D oggetto=theWorld.getObjectByName(feritoID);
SimpleVector trsl= new SimpleVector(5f,0f,0f);
trsl=oggetto.checkForCollisionSpherical(trls, 10f);
oggetto.translate(trsl);
}
Have a look at the documentation and/or the manual for the different collision detection methods jPCT offers and see what's best suited for your application. Make sure that your Object3Ds are having the appropriate collision modes set.
And last but not least: Don't do this in timer(). It's a bad habbit i had in the past and it sadly made it into the bounce sources and earlier fps-sources. Have a look at the refactored source of fps or the new car-example to see how to do it in a better way.