On 12-7-2016 15:58, Patrick Beeson wrote:
> I am working a new project that will be using a Motoman MH180. This uses a
> DX200 controller, but to my knowledge, no one has used a Motoman that size
> of an MH180 with ROS before. So, this is just a high level request for any
> non-documented advice by anyone that has used the Motoman ROS driver before.
I'm not sure which model it is exactly, but the Motoman that Kinema is
using in their promotional videos [1] seems to be a similar one, and I'm
almost sure they are using motoman_driver with it.
Personally I have recent experience with an SIA20 with an FS100.
> Because this robot lives at a "traditional" integrator in Michigan, I can't
> really run the thing before I help those guys create a Ubuntu machine,
> install ROS-I, and get our software built. So reports of any "funnies"
> that people know of when using this controller are welcome, as they won't
> know on first testing on a ROS-based system whether things look right or
> wrong.
It's important to know whether the controller is setup with multiple
motion groups. The ROS side, so not the motoros application, currently
doesn't work reliably / at all with > 1 or < 4 groups. See the issue
tracker [2] for some of these.
Another gotcha is the check the driver does on 'traj_start_state ==
current_state': because it uses relative motion, it's important the two
match. But depending on the pose of the robot, gravity might cause some
of the links (the 4th fi on your MH 180) to drop a little when
disengaging the breaks, leading to perfectly valid trajectories being
rejected. There is a PR [3] to increase the 'pulse threshold' exactly
because of this, but there might be other ways to deal with it that
might be preferable over just relaxing the condition (as it also
increases the possibility to deviate from the trajectory). In the APC
setup the work-around was to manually enable the servos (even in remote
mode).
I'll post some more issues on the tracker soon, which colleagues of mine
discovered while working on the Delft APC system. Most were also
worked-around / resolved. They should really only affect you if the
controller has multiple groups though.
Other than that we've found the driver to have very good performance,
and to be rather stable. Provided you have good quality trajectories
(ie: timing, positions, velocities and accelerations nice and smooth),
the robot will execute them faithfully.
Support from Motoman has also been great.
> Also, we will eventually be contributing the URDF, models, and SRDF back to
> ROS-I. However, we want to get things correct first. Specifically, we are
> finding a few weird things: 1) The zero encoder counts for the robot, which
> is the "Home" position is actually 0,+90,990,0,0,0; 2) The actual joint
> limits achievable by the robot are different from the Spec sheet joint
> angles (mainly for 1 pitch joint); 3) The velocity values are provided on
> the spec sheet, but I don't know how much to trust them given that the
> joint limits weren't correct; 4) Acceleration values are completely unknown
> (and it is unclear how to get these without experiments to find noisy
> estimates).
re: home position: are you worried that the 'zero position' of your urdf
won't correspond to the zero of the robot? What does the robot report
(joint angles) when it's at its zero? In any case: make the urdf for the
as-specced zero position. If the robot really reports non-zero angles
for it's home/zero, the ROS side should reflect that.
re: limits different from spec sheet: it would be preferable to create a
urdf based on the limits in the spec sheet. Then either use
config/joint_limits.yaml in your moveit config to override those, or
make a site-local change to the source of the package and use that in an
overlay.
The joint_limits.yaml approach might not be enough though, as not all
code-paths (in MoveIt) actually seem to use those values (but I can't
recall where I encountered/read that).
re: velocities: we typically stay with what the spec sheet says, as we
have no other information. I'd do that in this case as well. If your
specific robot can't actually reach those, the trajectory execution
monitor will quickly start interfering (aborting execution), which will
be a hint that something is up.
re: accelerations: that is a 'cross-vendor' problem. Afaik, none of the
moveit configs we have in ros-i contain those numbers, or at least not
the actual values. If you don't know, either leave them out
('has_acceleration_limits: false'), or guestimate some values (the
MoveIt Setup Assistant used to configure 1/5th max joint velocity for
this, fi). This is only a problem for the MoveIt configuration though.
Gijs
[1]
http://www.kinemasystems.com
[2]
https://github.com/ros-industrial/motoman/issues
[3]
https://github.com/ros-industrial/motoman/pull/69