personalrobotics / ada Goto Github PK
View Code? Open in Web Editor NEWSoftware for ADA, the Assistive Dextrous Arm developed by the Personal Robotics Lab at CMU.
Software for ADA, the Assistive Dextrous Arm developed by the Personal Robotics Lab at CMU.
I see four:
mico-modified-manual.urdf
mico-modified.urdf
mico.urdf
mico-modified-old.urdf
Which of these should I actually be using? Can we delete the others?
trajopt_planner is currently not available on Ada.
The timeout parameter in MoveHand(self f1, f2, f3, timeout) seems to be ignored.
In herbpy
, the code calls:
util.WaitForControllers([ self.controller ], timeout=timeout)
But in adapy
the function just doesn't use the parameter at all, despite being mentioned in the docstring.
Possible solutions:
timeout
parameter - but this would diverge from herbpy and might cause old code to failtimeout
should be ignoredWhen I try to plan ada toward a direction, it always fails although Planning succeeded.
I also asked Jen about this.
traj = robot.arm.PlanToEndEffectorOffset([1,1,0],distance=0.1)
traj.GetNumWaypoints();
We got output: 3.
So the trajectory is good with 3 points.
However, when we tried robot.ExecuteTrajectory(traj), it will fail.
Then we tried to switch the retimer to HauserParabolicSmoother,
from prpy.planning.retimer import HauserParabolicSmoother
robot.retimer=HauserParabolicSmoother()
and it finally worked.
Should we switch ada retimer to HauserParabolicSmoother, like what we did in herb?
The error message:
In [14]: traj = robot.arm.PlanToEndEffectorOffset([1,1,0],distance=0.1, execute=True)
[environment-core.h:116 Environment] setting openrave home directory to /home/shen/.openrave
[odecollision.h:124 ODECollisionChecker] ode will be slow in multi-threaded environments
[environment-core.h:193 Init] using ode collision checker
[environment-core.h:848 SetCollisionChecker] setting ode collision checker
[basemanipulation.cpp:117 main] BaseManipulation: using BiRRT planner
[taskmanipulation.cpp:179 main] using BiRRT planner
[INFO] [prpy.planning.base:base.py:297]:plan: Sequence - Calling planner "VectorFieldPlanner".
[basemanipulation.cpp:117 main] BaseManipulation: using BiRRT planner
[taskmanipulation.cpp:179 main] using BiRRT planner
[basemanipulation.cpp:117 main] BaseManipulation: using BiRRT planner
[taskmanipulation.cpp:179 main] using BiRRT planner
[WARNING] [prpy.planning.vectorfield:vectorfield.py:346]:FollowVectorField: Terminated early: Terminated by callback.
[INFO] [prpy.planning.base:base.py:306]:plan: Sequence - Planning succeeded after 0.239 seconds with "VectorFieldPlanner".
[environment-core.h:221 Destroy] destroy module
[INFO] [prpy.base.robot:robot.py:393]:do_execute: Post-processing path with 3 waypoints.
[environment-core.h:116 Environment] setting openrave home directory to /home/shen/.openrave
[odecollision.h:124 ODECollisionChecker] ode will be slow in multi-threaded environments
[environment-core.h:193 Init] using ode collision checker
[environment-core.h:848 SetCollisionChecker] setting ode collision checker
[basemanipulation.cpp:117 main] BaseManipulation: using BiRRT planner
[taskmanipulation.cpp:179 main] using BiRRT planner
[WARNING] [prpy.base.robot:robot.py:324]:do_postprocess: Post-processing smooth paths is not supported. Using the default post-processing logic; this may significantly change the geometric path.
[basemanipulation.cpp:117 main] BaseManipulation: using BiRRT planner
[taskmanipulation.cpp:179 main] using BiRRT planner
[environment-core.h:221 Destroy] destroy module
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
/home/shen/research/ada/src/ada/adapy/src/adapy/blocks.py in <module>()
----> 1 traj = robot.arm.PlanToEndEffectorOffset([1,1,0],distance=0.1, execute=True)
/home/shen/research/ada/src/prpy/src/prpy/base/manipulator.pyc in wrapper_method(*args, **kwargs)
71 @functools.wraps(delegate_method)
72 def wrapper_method(*args, **kwargs):
---> 73 return self._PlanWrapper(delegate_method, args, kwargs)
74 return wrapper_method
75
/home/shen/research/ada/src/prpy/src/prpy/base/manipulator.pyc in _PlanWrapper(self, planning_method, args, kw_args)
183 # Optionally execute the trajectory.
184 if kw_args.get('execute', False):
--> 185 return self.GetRobot().ExecutePath(traj, **kw_args)
186 else:
187 return traj
/home/shen/research/ada/src/prpy/src/prpy/base/robot.pyc in ExecutePath(self, path, defer, executor, **kwargs)
418 return wrap_future(executor.submit(do_execute))
419 elif defer is False:
--> 420 return do_execute()
421 else:
422 raise ValueError('Received unexpected value "{:s}" for defer.'.format(str(defer)))
/home/shen/research/ada/src/prpy/src/prpy/base/robot.pyc in do_execute()
394
395 with Timer() as timer:
--> 396 traj = self.PostProcessPath(path, defer=False, **kwargs)
397 SetTrajectoryTags(traj, {Tags.POSTPROCESS_TIME: timer.get_duration()}, append=True)
398
/home/shen/research/ada/src/prpy/src/prpy/base/robot.pyc in PostProcessPath(self, path, defer, executor, constrained, smooth, default_timelimit, shortcut_options, smoothing_options, retiming_options, affine_retiming_options, **kwargs)
368 return wrap_future(executor.submit(do_postprocess))
369 elif defer is False:
--> 370 return do_postprocess()
371 else:
372 raise ValueError('Received unexpected value "{:s}" for defer.'.format(defer))
/home/shen/research/ada/src/prpy/src/prpy/base/robot.pyc in do_postprocess()
333 ' trajectory will stop at every waypoint.')
334 traj = self.retimer.RetimeTrajectory(
--> 335 cloned_robot, path, defer=False, **retiming_options)
336 # The trajectory is not constrained, so we can shortcut it
337 # before execution.
/home/shen/research/ada/src/prpy/src/prpy/planning/base.pyc in __call__(self, instance, robot, *args, **kw_args)
151 return wrap_future(executor.submit(call_planner))
152 else:
--> 153 return call_planner()
154
155 def __get__(self, instance, instancetype):
/home/shen/research/ada/src/prpy/src/prpy/planning/base.pyc in call_planner()
131 try:
132 planner_traj = self.func(instance, cloned_robot,
--> 133 *args, **kw_args)
134
135 # Tag the trajectory with the planner and planning method
/home/shen/research/ada/src/prpy/src/prpy/planning/retimer.pyc in RetimeTrajectory(self, robot, path, options, **kw_args)
108 with CollisionOptionsStateSaver(self.env.GetCollisionChecker(),
109 CollisionOptions.ActiveDOFs):
--> 110 status = self.planner.PlanPath(output_traj, releasegil=True)
111
112 if status not in [PlannerStatus.HasSolution,
IndexError: vector::_M_range_check
After updating rviz, I get the following error:
The STL file '(...)ada/ada_description/meshes/Hand_Link_camera.STL' is malformed. According to the binary STL header it should have '35924' triangles, but it has too much data for that to be the case
All other meshes load except for one of the hand meshes
I get this error if I try to plan to the retract
configuration:
[cbirrt.cpp:487 InitPlan] Skipping Goal 0: 1.68754e-13 1.11022e-15 1.5687 3.66431 5.50133 1.48701 6.10652 1.39951
[cbirrt.cpp:488 InitPlan] because it is in collision:
When I run ada simulation in rviz, this error message always comes up and the wrist of ada is missing.
[ERROR] [1445436599.845274902]: The STL file 'file:///home/shen/research/ada/src/ada/ada_description/meshes/Hand_Link_camera.STL' is malformed. According to the binary STL header it should have '35924' triangles, but it has too much data for that to be the case.
[ERROR] [1445436599.845466286]: Failed to load file [file:///home/shen/research/ada/src/ada/ada_description/meshes/Hand_Link_camera.STL]
make changes in setup.py
From:
package_info['package_dir'] = {'adapy':'src'}
To:
package_info['package_dir'] = {'adapy':'src/adapy'}
I'd like to implement a move until force function for Ada. @mkoval, what's the most herbpy-kosher way of getting this into the API?
Robot appears to be significantly slower, maybe because of the new acceleration limits?
We need to decide which Kinova driver to use. Right now we're using libkindrv
but what about Kinova's own driver? It'd be great to make this decision soon and stick to it.
Laura reports that the mesh is just grey for her using her laptop and lab computers. Who can actually see the ada meshes with color?
I needed to add the "or_parabolicsmoother" package manually to the .rosinstall to get the adapy code to run. I suppose this should be updated to include it at some point. Also, Mike mentioned the .rosinstall file should be added to the repo along with the others at some point so that we don't have to copy and paste anymore. We can just use wstool once that happens.
When calling https://github.com/personalrobotics/ada/blob/bugfix/AdaRobotCleanup/adapy/src/adapy/adarobot.py#L118, I get an error:
TrajectoryExecutionFailed: Trajectory execution failed (ABORTED): GOAL_TOLERANCE_VIOLATED
This might be simple for other people, but both Shen and I ran into this issue when trying to get Ada running on a fresh copy of Ubuntu/ROS.
when running catkin_make
you will get an error at around 25% of the build that says "cblas.h" is unable to be located. This terminates the process.
We found there is no apt-get for cblas itself, but it is included in the ATLAS library.
So, to resolve the issue, you can run the command:
apt-get install libatlas-base-dev
Thanks!!
New firmware has new velocity limits that are making the robot move much slower with the older acceleration limits.
There is no easy way to open a console with AdaPy loaded. I suggest writing a console.py
script similar to the famous HerbPy console script.
Also, on a related note, we really should remove test.py
.
Still running into issues when trying to plan something as simple as home configuration on real ADA. Not exactly sure what is motivating the failure, but it looks like the planner succeeds and when it goes to execute, there is a failure.
It is throwing an Attribute Error when it tries to call getDescription for a "JoinTrajectory" object in prpy
I am literally running test.py in default ADA and calling "planToNamedConfiguration('home',execute=True)"
Code is attached below.
robot.arm.PlanToNamedConfiguration('home',execute=True)
[environment-core.h:116 Environment] setting openrave home directory to /home/rscalise/.openrave
[odecollision.h:124 ODECollisionChecker] ode will be slow in multi-threaded environments
[environment-core.h:193 Init] using ode collision checker
[environment-core.h:848 SetCollisionChecker] setting ode collision checker
[qtcoinviewer.cpp:2928 UpdateFromModel] timeout of GetPublishedBodies
[basemanipulation.cpp:117 main] BaseManipulation: using BiRRT planner
[taskmanipulation.cpp:179 main] using BiRRT planner
[basemanipulation.cpp:117 main] BaseManipulation: using BiRRT planner
[taskmanipulation.cpp:179 main] using BiRRT planner
[INFO] [prpy.planning.base:base.py:297]:plan: Sequence - Calling planner "SnapPlanner".
[basemanipulation.cpp:117 main] BaseManipulation: using BiRRT planner
[taskmanipulation.cpp:179 main] using BiRRT planner
[INFO] [prpy.planning.base:base.py:306]:plan: Sequence - Planning succeeded after 0.591 seconds with "SnapPlanner".
[environment-core.h:221 Destroy] destroy module
[INFO] [prpy.base.robot:robot.py:400]:do_execute: Post-processing path with 2 waypoints.
[environment-core.h:116 Environment] setting openrave home directory to /home/rscalise/.openrave
[odecollision.h:124 ODECollisionChecker] ode will be slow in multi-threaded environments
[environment-core.h:193 Init] using ode collision checker
[environment-core.h:848 SetCollisionChecker] setting ode collision checker
[qtcoinviewer.cpp:2928 UpdateFromModel] timeout of GetPublishedBodies
[basemanipulation.cpp:117 main] BaseManipulation: using BiRRT planner
[taskmanipulation.cpp:179 main] using BiRRT planner
[WARNING] [prpy.base.robot:robot.py:331]:do_postprocess: Post-processing smooth paths is not supported. Using the default post-processing logic; this may significantly change the geometric path.
[INFO] [prpy.planning.base:base.py:297]:plan: Sequence - Calling planner "ParabolicSmoother".
[basemanipulation.cpp:117 main] BaseManipulation: using BiRRT planner
[taskmanipulation.cpp:179 main] using BiRRT planner
[parabolicsmoother.cpp:193 PlanPath] env=10, initial path size=1, duration=4.757549, pointtolerance=0.200000, multidof=0
[parabolicsmoother.cpp:387 PlanPath] after shortcutting 0 times: path waypoints=1, traj waypoints=4, traj time=4.757549s
[parabolicsmoother.cpp:395 PlanPath] path optimizing - computation time=0.001000s
[INFO] [prpy.planning.base:base.py:306]:plan: Sequence - Planning succeeded after 0.214 seconds with "ParabolicSmoother".
[environment-core.h:221 Destroy] destroy module
[INFO] [prpy.base.robot:robot.py:410]:do_execute: Post-processing took 0.416 seconds and produced a path with 4 waypoints and a duration of 4.758 seconds.
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
/home/rscalise/storage/adaRun_ws/src/ada/adapy/scripts/test.py in <module>()
----> 1 robot.arm.PlanToNamedConfiguration('home',execute=True)
/home/rscalise/storage/adaRun_ws/src/prpy/src/prpy/base/manipulator.pyc in wrapper_method(*args, **kwargs)
71 @functools.wraps(delegate_method)
72 def wrapper_method(*args, **kwargs):
---> 73 return self._PlanWrapper(delegate_method, args, kwargs)
74 return wrapper_method
75
/home/rscalise/storage/adaRun_ws/src/prpy/src/prpy/base/manipulator.pyc in _PlanWrapper(self, planning_method, args, kw_args)
183 # Optionally execute the trajectory.
184 if kw_args.get('execute', False):
--> 185 return self.GetRobot().ExecutePath(traj, **kw_args)
186 else:
187 return traj
/home/rscalise/storage/adaRun_ws/src/prpy/src/prpy/base/robot.pyc in ExecutePath(self, path, defer, executor, **kwargs)
425 return wrap_future(executor.submit(do_execute))
426 elif defer is False:
--> 427 return do_execute()
428 else:
429 raise ValueError('Received unexpected value "{:s}" for defer.'.format(str(defer)))
/home/rscalise/storage/adaRun_ws/src/prpy/src/prpy/base/robot.pyc in do_execute()
413 with Timer() as timer:
414 exec_traj = self.ExecuteTrajectory(traj, defer=False, **kwargs)
--> 415 SetTrajectoryTags(exec_traj, {Tags.EXECUTION_TIME: timer.get_duration()}, append=True)
416 return exec_traj
417
/home/rscalise/storage/adaRun_ws/src/prpy/src/prpy/util.pyc in SetTrajectoryTags(traj, tags, append)
318
319 if append:
--> 320 all_tags = GetTrajectoryTags(traj)
321 all_tags.update(tags)
322 else:
/home/rscalise/storage/adaRun_ws/src/prpy/src/prpy/util.pyc in GetTrajectoryTags(traj)
292 import json
293
--> 294 description = traj.GetDescription()
295
296 if description == '':
AttributeError: 'JointTrajectory' object has no attribute 'GetDescription'
It fails with this error:
TrajectoryExecutionFailed: Trajectory execution failed (REJECTED): INVALID_JOINTS
We have to manually run:
chmod 777 /dev/mico
Something is wrong with our udev
rules.
@mklingen Would you know how the urdf exrinsics in: https://github.com/personalrobotics/ada/blob/bugfix/AdaRobotCleanup/ada_description/robots/mico.urdf#L328 correspond to those in:
https://github.com/personalrobotics/ada/blob/master/ada_description/ordata/robots/mico-modified.robot.xml#L248
When the 2 fingers are already in DOF values - [0.8,0.8], or close to [0.8,0.8], then if I call hand.MoveHand(0.8,0.8), it will raise an exception - TrajectoryExecutionFailed. Is it normal?
[ERROR] [adapy:adarobot.py:228]:ExecuteTrajectory: Trajectory execution failed.
Traceback (most recent call last):
File "/home/shenli/storage/ada/src/ada/adapy/src/adapy/adarobot.py", line 222, in ExecuteTrajectory
traj_future.result(timeout)
File "/home/shenli/storage/ada/src/ada/adapy/src/adapy/futures.py", line 70, in result
raise self._exception
TrajectoryExecutionFailed: Trajectory execution failed (REJECTED): INVALID_GOAL
With this error message:
terminate called after throwing an instance of 'KinDrv::KinDrvException'
what(): Could not get angular velocities! libusb error.
In https://github.com/personalrobotics/ada/blob/master/adapy/src/adapy/adarobot.py#L42, load_yaml throws exception:
File "/homes/snikolai/catkin_demo/src/prpy/src/prpy/named_config.py", line 99, in add_configuration
% (len(group_indices), len(dof_values)))
Exception: Expected 2 values; got 6.
There are two groups specified in the urdf file:
https://github.com/personalrobotics/ada/blob/master/ada_description/robots/mico-modified-updated.urdf
The ada finger is not the same calibrated as the one in simulation. In simulation, if I do MoveHand(1.35,1.35), the two finger will cross to each other. But in reality, the two fingers barely touch to each other. Is this an issue? Do we change it intentionally to protect the finger or some other considerations?
I wonder if this is incorrect:
self.robot.GetDOFVelocityLimits()
Out[2]:
array([ 0.87266462, 0.87266462, 0.87266462, 2. , 2. , 2. , 0.78539816, 0.78539816])
The spec sheet seems to suggest that the large actuators
have a limit of 9 RPM
which is 0.942 rad/s
. and the small actuators
have a limit of 18 RPM
which is 1.884 rad/s
. The numbers in GetDOFVelocityLimits
seem to be in the right ballpark but I wonder how they were set.
[ERROR] [1428964101.238604162]: Trajectory message contains waypoints that are not strictly increasing in time.
We really need a better solution than the rat's nest of cables we have now would precariously around the robot. What should we do?
Problem: Currently, the udev rule specified in the README only allows USB access to members of the "pr" user group. However, ada computer account prdemo is not part of that user group, so we have to manually adjust permissions on /dev/mico each time we run in order to access the robot hardware.
Solution: Change the udev to give full access to the ada hardware to all users.
cbirrt planner and GeneralIK seem to fail for the ADA robot in ros_indigo
. Cbirrt seems to fail because GeneralIK is failing.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.