move_group on intel edison
Hello all,
I'm running the following distro on the intel edison:
Linux up1 3.10.17-yocto-standard-r2 #7 SMP PREEMPT Thu Feb 26 09:57:06 UTC 2015 i686 GNU/Linux
I compiled ros indigo from source as follows:
http://wiki.ros.org/indigo/Installation/Debian
And added the moveit packages as per the "Adding released packages" section. I commented the rviz launch out of demo.launch in our moveit_config and it runs without issue on my desktop. With the exact same code checkout on the edison, I get the following error:
[move_group-5] process has died [pid 2648, exit code -11, cmd /opt/ros/indigo/lib/moveit_ros_move_group/move_group --debug __name:=move_group __log:=/home/edison/.ros/log/8b397c3a-50de-11e5-b896-fcc2de337ed5/move_group-5.log].
According to the MoveItErrorCodes documentation, -11 corresponds to STARTSTATEVIOLATESPATHCONSTRAINTS, but I don't know why I would get that error on the edison, but not on my desktop. The only difference is that I compiled ros from source for the edison. I know the edison doesn't officially support moveit yet, but does anyone know if there is a specific reason why moveit can't work on it besides overall slow speed? Any ideas what specifically triggers that error? I dug into the logs and there wasn't any additional information. Turning on the debug flag in the launch file triggers another error:
gdb -x /home/edison/uproot/catkin_ws/src/up1_moveit_config/launch/gdb_settings.gdb --ex run --args /opt/ros/indigo/lib/moveit_ros_move_group/move_group --debug __name:=move_group __log:=/home/edison/.ros/log/3fee3b24-50e0-11e5-a834-fcc2de337ed5/move_group-5.log
Please make sure that all the executables in this command exist and have
executable permission. This is often caused by a bad launch-prefix.
Any help would be greatly appreciated.
Thanks! -Nate
*** edit ***
Turns out gdb wasn't installed on the edison by default. Launching demo.launch with debugging enabled causes a seg fault, here is the backtrace:
#0 0xb69f41d1 in free () from /lib/i386-linux-gnu/libc.so.6
#1 0xb7a11c35 in std::_Rb_tree<moveit::core::LinkModel const*, std::pair<moveit::core::LinkModel const* const, Eigen::Transform<double, 3, 2, 0> >, std::_Select1st<std::pair<moveit::core::LinkModel const* const, Eigen::Transform<double, 3, 2, 0> > >, std::less<moveit::core::LinkModel const*>, Eigen::aligned_allocator<std::pair<moveit::core::LinkModel const* const, Eigen::Transform<double, 3, 2, 0> > > >::_M_erase(std::_Rb_tree_node<std::pair<moveit::core::LinkModel const* const, Eigen::Transform<double, 3, 2, 0> > >*) () from /opt/ros/indigo/lib/libmoveit_robot_model.so
#2 0xb7a351cc in moveit::core::RobotModel::buildJointInfo() () from /opt/ros/indigo/lib/libmoveit_robot_model.so
#3 0xb7a35a5c in moveit::core::RobotModel::buildModel(urdf::ModelInterface const&, srdf::Model const&) () from /opt/ros/indigo/lib/libmoveit_robot_model.so
#4 0xb7a36028 in moveit::core::RobotModel::RobotModel(boost::shared_ptr<urdf::ModelInterface const> const&, boost::shared_ptr<srdf::Model const> const&) ()
from /opt/ros/indigo/lib/libmoveit_robot_model.so
#5 0xb7f582e8 in robot_model_loader::RobotModelLoader::configure(robot_model_loader::RobotModelLoader::Options const&) () from /opt/ros/indigo/lib/libmoveit_robot_model_loader.so
#6 0xb7f59347 in robot_model_loader::RobotModelLoader::RobotModelLoader(std::string const&, bool) () from /opt/ros/indigo/lib/libmoveit_robot_model_loader.so
#7 0xb7d06f68 in planning_scene_monitor::PlanningSceneMonitor::PlanningSceneMonitor(std::string const&, boost::shared_ptr<tf::Transformer> const&, std::string const&) ()
from /opt/ros/indigo/lib/libmoveit_planning_scene_monitor.so
#8 0x0805b31b in main ()
It looks like our problem is with the Eigen::Transform function. Now I see at the top of the moveit instructions that there is an incompatability with Eigen on 32 bit Ubuntu (the intel edison is 32 bit):
http://moveit.ros.org/install/
Also dug up a similar github issue, and there is a comment that moveit no longer officially supports 32 bit archetectures:
https://github.com/ros-planning/moveit_setup_assistant/issues/40
Does anyone know the full extent of that incompatibility?
Asked by nate_droid on 2015-09-01 14:43:42 UTC
Answers
What you see is the exit code of the move_group process. It has nothing to do with error codes inMoveItErrorCodes
. See also this answer. A exit code of -11 essentially means that the process segfaulted. Now why it does that on Intel Edison is a interesting question.
Your second problem looks like some malformed launch-prefix line. Not completely sure, but it looks like you're trying to execute (-x) a "gdb_settings.gdb" file. which looks wrong. Have you tried using
launch-prefix="gdb -ex run --args"
as suggested on How to Roslaunch Nodes in Valgrind or GDB?
/edit: For Eigen to work correctly on 32 bit systems, allocators that properly align data always have to be used. Consistently adding that throughout all code can be a pretty big task (and in some cases is not trivial). See the Explanation of the assertion on unaligned arrays page. The easy thing you can try is switching off vectorization as explained on the bottom of the page.
Asked by Stefan Kohlbrecher on 2015-09-02 01:54:21 UTC
Comments
Pro Tip: make sure gdb is installed. Whoops. Turns out it wasn't on the edison by default. Thanks for the suggestions, I'm still debugging.
Asked by nate_droid on 2015-09-02 18:24:52 UTC
Oops ;) Edited with suggestion for switching off vectorization.
Asked by Stefan Kohlbrecher on 2015-09-03 03:46:16 UTC
Comments