  LSMM

Members

8

• Days Won

1

LSMM had the most liked content!

1 Neutral

• Rank
Member

Robot Information

• Company Name
Université de Liège

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

1. Achieving Interas movement fluidity in the Intera SDK.

Hello CSIC, We are using the "Joint control modes", mainly the "joint position control" (using the set_joint_positions() method of the Limb() class) and the "joint trajectory control" (using the set_joint_trajectory() method of the Limb() class). Basically, when we have a cartesian pose, we convert it to a set of joint angles using the ik_request() method of the Limb(). Then we send this joint angle command using the set_joint_positions() method. We send these joint commands at a rate of 100Hz, and we try to adapt the joint velocity using the set_joint_position_speed() method of Limb(). For now it seems to work. Using the Joint trajectory control, since you need to provide the velocity and acceleration of the joints for every command you send, we had to compute the velocity and acceleration of the robot ourselves (in our case, with our own model of the robot because we wanted to do it anyway). The joint names, angles, velocities and acceleration are then sent at a rate of 500Hz and the trajectory is quite smooth (we tried 100Hz and 800Hz too). In our case we are trying to make the Sawyer follow a trajectory. I guess if you want a "point-to-point" motion, you could also use theses methods (joint commands directly) to achieve your motion. Best regards,
2. Hi Jorgegalds_DON, Although a bit late, here is a python script that allow you to move the robot +-x, +-y or +-z (so cartesian coordinate) using the keyboard. You just did that to get familiar with thnode_sawyer.pye Intera SDK, so it might have some bugs but it worked up to now. It is basicaly adapting the two example and fusing them into one node. Hope this can help, Best
3. Hi Don, Aurora and Fuglum, Would it be possible to know how you are controlling the valves using the intera SDK? python? want are the class and commands you are using? Is it using the DigitalIO class? and using the set_output(self, value, timeout=2.0) method? Thanks
4. Hi Jose_UTEC, I think you do not need to fix the control rate on a particular topic or parameter. If you supply the robot with references at a rate of 5 - 800 Hz, the robot will take it. In your code, you just have to set your command, for example using set_joint_trajectory(), make your code "sleep" for a given time, using for example the rospy.Rate() class with sleep() method, then increment and go to next instruction. See the example below (same as in other thread) import rospy import intera_interface limb = intera_interface.Limb('right') limb.move_to_neutral() # control rate, data sent every 0.002 s, meaning controlling at 500 Hz. Can be from 5 Hz to 800 Hz (I think) rate = 500 # Hz control_rate = rospy.Rate(rate) # controlled joints names=['right_j6','right_j5'] i = 0 # initializing time step # looping over your arrays of 60 values for pose, vel and acc for each joint while i < len(traj_j6): pose = [traj_j6[i], traj_j5[i]] velocity = [vel_j6[i], vel_j5[i]] acceleration = [acc_j6[i], acc_j5[i]] # sending targeted pose, vel and acceleration for current time step limb.set_joint_trajectory(names, pose, velocity, acceleration) # incrementing time step i += 1 # make a short break to make sure commands are sent every 0.002 s (500 Hz) control_rate.sleep() print "Trajectory done..." When I then look at the joint_command topic after that, I see that commands are indeed sent every 0.002 s (roughly). However, when setting the control rate at 800 Hz (0.00125 sec) with this method, the actual rate at which joint_command messages are sent can sometimes be slightly less precise: delay between each command is slightly off (0.002 sec or 0.001 sec instead of the 0.00125s). If someone has another more reliable method, I would be interested to know it. Looking at some other people's codes, like in this thread, it seems they are doing something similar:
5. Hi Jose_UTEC, I think that with the joint trajectory control you should send one set of (position, velocity, acceleration) at the time. In your case you want to control "right_j6" and "right_j5". Lets say the trajectory right_j6 has to follow is an array traj_j6 = the huge array you gave for j6 angles (around 60 values according to what i can see in your post). Let's say you want your joint to be at one of this angle values every 0.1 sec (10 Hz), so with 60 values you are going to last 6 sec. If you call vel_j6 = the huge array you gave for j6 velocities and acc_j6 = the huge array you gave for j6 accelerations (and same for j5 with traj_j5, vel_j5 and acc_j5), then you should have a code like: import rospy import intera_interface limb = intera_interface.Limb('right') limb.move_to_neutral() # control rate, data sent every 0.1 s rate = 10 # Hz control_rate = rospy.Rate(rate) # controlled joints names=['right_j6','right_j5'] i = 0 # initializing time step # looping over your arrays of 60 values for pose, vel and acc for each joint while i < len(traj_j6): pose = [traj_j6[i], traj_j5[i]] velocity = [vel_j6[i], vel_j5[i]] acceleration = [acc_j6[i], acc_j5[i]] # sending targeted pose, vel and acceleration for current time step limb.set_joint_trajectory(names, pose, velocity, acceleration) # incrementing time step i += 1 # wait around 0.1 s before looping to next time step control_rate.sleep() print "Trajectory done..." Might not be the perfect way to do it but it worked for me. If any one has any better suggestions, I would be happy to see how it can be improved... hope that it is what you tried to do and that this can help, Good luck
6. Hello Yichao, I would need this parameters in order to make a model of Sawyer. For research purposes, I am trying to build a home made feedforward controler for the robot which takes into account flexibility in joints. For now, once I compute the inverse dynamics with my home made code (using torque control or position control for trajectory tracking), the robot doesn't move as expected and has some large overshoot in some of its joints. I would like to see if by modelling correctly the joint stiffness and (viscous) friction, I can manage to control the robot better. I hope I made my self understandable?
7. Hello! I am currently trying to make a model of Sawyer including some dynamic parameters. As it is possible to find for Baxter (in http://sdk.rethinkrobotics.com/wiki/Hardware_Specifications), I am looking for the joint stiffness and damping parameters of the joints of Sawyer (with flexure springs). Is there a similar page for the Sawyer (could not manage to find it....) or did someone did some measurements and could share its results? Thanks in advance,
8. Hello, I recently started working on Sawyer and I am also trying to use my own dynamic model to control the arm using the joint torque control. @ErnestoDid you manage to solve this "moving up" motion while zero torques are applied? I tried to apply an opposite torque to counter this "upward" motion, but the amount of torque that I am applying is defined very approximately (try/error), since I do not know where the problem is coming from.... Regarding the dynamic model of Sawyer, I tested out some path tracking using either a joint position control or a joint torque control. With the joint position control everything works. With the joint torque control, it seems that some torques that i've computed do not manage to move the arm as I want it. In order to have a better estimation of the torque that I have to apply, I am now trying to improve my model by considering the stiffness and viscous friction in the joints. However, I could not find dynamical parameter of the springs (of the series elastic actuators) in the "Download" section of this Forum. Are these springs parameters available? could it be possible to have them for each joint? Thanks,