Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5

Positioning problem of the ROKAE SR3 robot

#1
Hi!

I have a problem with customizing the robot model in roboDK.
I have a Rokae SR3 robot which is not in your robot library, but its 3d model is provided by the manufacturer.

I created the robot according to the collaborative robot settings in roboDK and in MOVabsJ motion mode (guided only by motor angles) everything works as it should. But when I switch to explicit movement systems - MOVJ or MOVL and turn the three axes of rotation into radians - all axes go astray. When checking the waypoints I found out that the points are assigned and recalculated correctly by the driver (angles are recalculated correctly as well). Apparently I have not configured the robot correctly in roboDK.

The problem is that, unlike most collaborative robots on the market, the frame of this robot at zero position is not vertically (see attachment in the archive) - the third axis is displaced laterally in relation to the others and does not allow you to configure the robot (or I do not understand something in the configuration) in roboDK.

It seems to me that the robot's joint axes are messed up (or something similar is happening) and when moving MOVJ or MOVL of any one joint to a clear angle in reality, the robot clams up and shifts all over, trying to assume a weird position.

In the attachment I leave a custom driver for the robot (in the process of writing), documentation on the robot's circuitry, a STEP model and a roboDK file with the robot created.
If you have a chance - look at the attached files and help me find a solution. Thanks!

UPD.

I'll ask one more question at once - in the examples of work with roboDK there is a DRAG mode button, but I don't have it. Is it some add-on or can it be configured separately?

Files link - Google Drive
#2
UPD 2.
How it looks like - first we get a position from the robot (Fig.1), in roboDK we shift one of the axes by a dozen degrees (Fig.2) and transfer this motion to the robot.

[Image: rjeQv9u.jpeg]

[Image: jncr6oX.jpeg]

After working out the movement, we read the position again and get Fig.3.

[Image: qxqZiIr.jpeg]

This is not a program error, this is the real position of the robot (Fig.4). This behavior occurs exclusively when using MOVJ and MOVL, when passing MOVabsJ and passing 6 angle motors everything works as expected.

[Image: FMU7XfJ.jpeg]
#3
Does our Rokae postprocessor generate programs that work correctly on your robot?

I took a quick look at your driver code.

Are you sure about the following section?
Code:
try:
            if move_type == "MOVabsJ":
                point_move = MoveAbsJCommand(joints, int(ROBOT_SPEED), 10)
            elif move_type == "MOVJ":
                point_move = MoveJCommand(joints, int(ROBOT_SPEED), 10)
            elif move_type == "MOVL":
                point_move = MoveLCommand(joints, int(ROBOT_SPEED), 0)

Judging from the postprocessor output example, it may be necessary to send the position in the format x,y,z,q1,q2,q3,q4.

You can use the Pose_2_ABB function:
https://robodk.com/doc/en/PythonAPI/robo...Pose_2_ABB
#4
(10-24-2024, 10:11 AM)Sergei Wrote: Does our Rokae postprocessor generate programs that work correctly on your robot?

I took a quick look at your driver code.

Are you sure about the following section?
Code:
try:
            if move_type == "MOVabsJ":
                point_move = MoveAbsJCommand(joints, int(ROBOT_SPEED), 10)
            elif move_type == "MOVJ":
                point_move = MoveJCommand(joints, int(ROBOT_SPEED), 10)
            elif move_type == "MOVL":
                point_move = MoveLCommand(joints, int(ROBOT_SPEED), 0)

Judging from the postprocessor output example, it may be necessary to send the position in the format x,y,z,q1,q2,q3,q4.

You can use the Pose_2_ABB function:
https://robodk.com/doc/en/PythonAPI/robo...Pose_2_ABB

Thanks for the reply!

The post-processor is not used at the moment, because now I am debugging movements and do not use the robot's programs, but control it through direct movement on the button in robodk, programs (when using MOVabsJ in the movement) work well on the standard post-processor

About the driver - I'm confident in this section because the “joints” are recalculated in the rework_values function, which converts the first 6 angles to radians, divides the three X Y Z points by 1000 and converts the last 3 rotations to radians too. And then when selecting a motion type, the driver simply takes the desired values from this array (based on the needs of the motion type)

Code:
    def rework_values(val):
        new_value = []
        XYZ_lst = val[6:9]
        ROT_lst = val[-3:]
        ra_lst = val[:6]
        for i in ra_lst:
            new_value.append(math.radians(i))
        for i in XYZ_lst:
            new_value.append(i/1000)
        for i in ROT_lst:
            new_value.append(math.radians(i))
        return new_value

*I know this code isn't particularly good, I'm still in the process of writing the driver

I have a question - do I need to pass x,y,z,rx,ry,rz for MOVL and MOVJ?
#5
Quote:I have a question - do I need to pass x,y,z,rx,ry,rz for MOVL and MOVJ?

I believe so. At least for the MOVL instruction.
You could try x,y,z,rx,ry,rz or x,y,z,q1,q2,q3,q4.
#6
(10-25-2024, 08:18 AM)Sergei Wrote:
Quote:I have a question - do I need to pass x,y,z,rx,ry,rz for MOVL and MOVJ?

I believe so. At least for the MOVL instruction.
You could try x,y,z,rx,ry,rz or x,y,z,q1,q2,q3,q4.

The problem is that the rokae API Does not allow you to pass a point with more than 6 positions. Now I am waiting for a reply from the vendor, but according to their documentation and examples always an array of 6 positions of format x,y,z,rx,ry,rz is passed.
When I try to pass a point in the form x,y,z,q1,q2,q3,q4 I get an error about an incorrect value in the motion function.

Have you encountered rokae robots and can you tell me where to move for the solution?
  




Users browsing this thread:
1 Guest(s)