Skip to content

Robotics-Research-Group-KUL/URDriver

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

40 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

URDriver

orocos components for interfacing with UR robots

Dependencies

Besides ROS and Orocos, the libexplain package is needed:

sudo apt-get install libexplain-dev

usage

set the pc address in the same subnet of the robot and set such IPs in properties

    ros:import("URDriver")
    timefreq=0.008
    
    depl:loadComponent("URDriverRT_receiver", "URDriverRT_receiver")
    URDriverRT_receiver=depl:getPeer("URDriverRT_receiver")
    
    depl:loadComponent("URDriver_program", "URDriver_program")
    URDriver_program=depl:getPeer("URDriver_program")
    
    URDriver_program:setPeriod(timefreq)			 
    URDriver_program:getProperty("robot_address"):set("192.168.1.102")--ip robot
    URDriver_program:getProperty("my_address"):set("192.168.1.101")
    URDriverRT_receiver:getProperty("robot_address"):set("192.168.1.102")
    URDriver_program:getProperty("timeOut"):set(timefreq)

For receiving the data from the robot, it suffices to:

    if not URDriverRT_receiver:configure() then
        print("failed to conf URDriverRT_receiver")
    end
    if not URDriverRT_receiver:start()then
        print("failed to start")
    end

For the component that sends the velocities:

    if not URDriver_program:configure() then
      print("failed to conf URDriver_program")
    end
      print(">> send-program")
    if not URDriver_program:send_program()then
      print("failed to send-program")
    end
      print(">> open-server")
    if not URDriver_program:open_server()then
      print("failed to open-server")
    end
    if not URDriver_program:start()then
      print("failed to start URDriver_program")
    end

Then, when the controller is up, and the velocities are ready in qdes_inport to be commanded, run

    URDriver_program:start_send_velocity()

The command

    URDriver_program:stop_send_velocity()

Stops the robot.

to test velocity control, write some value in the control

    qdd=rtt.Variable("array")
    qdd:fromtab({0.1,0,0,0,0,0})
    qqdport = rttlib.port_clone_conn(URDriver_program:getPort("qdes_inport"))

    qqdport:write(qdd)

it is possible to direcly command joint position

    pi=3.14
    time=10.0
    qdes=rtt.Variable("array")
    qdes:fromtab{pi,pi/2,pi,pi,pi,pi/2}
    URDriver_program:send_joint_objective(qdes,time)

structure

There are 3 components:

  • URDriver_program: send the program, and at the moment commands velocity and joint positions. Functionalies can be expanded should be run at 8ms
  • URDriverRT_receiver: recieve the data every 8ms it uses the file descriptor activity, so it does it should be aperiodic, as it is triggered when new data arrives
  • URDriver_receiver: (component not compiled because largely not finished, not useful for control) recieve the data every 100ms it also uses the file descriptor.

The data structures depends by the firmware (V5.4-5.9, V3.0-3.1 and Pre-3.0 implemented), and affects the receivers, I think that the program should work for several versions (tested on V5.9, 3.1 and 1.8).

Note: for V3.0-3.1 and V1.8, there is a property in the URDriverRT_receiver that must be set depending on the version:

    URDriverRT_receiver:getProperty("version_interface"):set("3.0-3.1")

or

    URDriverRT_receiver:getProperty("version_interface"):set("Pre-3.0")

The classes for reading the data from socket are all c++ (e.g.RTDeserealize.hpp )

There is a virtual class (e.g. RTdata) that is implemented depending by the firmware (RTdataV59, RTdataV31 or RTdataV18). There are several getter functions, that are implemented in the base class, they return -1 if not reimplemented in the child class. The value is returned by reference.

About

orocos components for interfacing with UR robots

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors