Turtlebot gmapping demo crashes with low-end CPUs [closed]

asked 2014-01-08 07:11:02 -0500

nsprague gravatar image

updated 2014-01-21 04:18:49 -0500

Update:

It turns out that the problem has something to do with the instruction set available on the CPU. The exact same setup (booting from the same iso) works fine on a Core i7-3820, but dies on a Celeron 847. I suspect that the issue is similar to the Fuerte bug described here: https://github.com/ros-perception/perception_pcl/issues/10 . If anyone can suggest a workaround (that doesn't involve recompiling PCL across an entire teaching lab worth of machines), I would appreciate it.

Running the move_base node in gdb gives:

Program received signal SIGILL, Illegal instruction.
0x00007ffff35c9d3f in std::vector<double, std::allocator<double> >::_M_insert_aux(__gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > >, double const&) () from /usr/lib/libpcl_common.so.1.7

And valgrind shows the following:

vex amd64->IR: unhandled instruction bytes: 0xC5 0xFB 0x10 0x2 0xC5 0xFB 0x11 0x0
==16678== valgrind: Unrecognised instruction at address 0x944fd3f.
==16678==    at 0x944FD3F: std::vector<double, std::allocator<double> >::_M_insert_aux(__gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > >, double const&) (in /usr/lib/libpcl_common.so.1.7.0)
==16678==    by 0x1927C2AD: std::vector<double, std::allocator<double> >::push_back(double const&) (in /opt/ros/hydro/lib/libtrajectory_planner_ros.so)
==16678==    by 0x1928B2B2: base_local_planner::TrajectoryPlannerROS::loadYVels(ros::NodeHandle) (in /opt/ros/hydro/lib/libtrajectory_planner_ros.so)
==16678==    by 0x19289D89: base_local_planner::TrajectoryPlannerROS::initialize(std::string, tf::TransformListener*, costmap_2d::Costmap2DROS*) (in /opt/ros/hydro/lib/libtrajectory_planner_ros.so)
==16678==    by 0x4F567DA: move_base::MoveBase::MoveBase(tf::TransformListener&) (in /opt/ros/hydro/lib/libmove_base.so)
==16678==    by 0x40780B: main (in /opt/ros/hydro/lib/move_base/move_base)
==16678== Your program just tried to execute an instruction that Valgrind
==16678== did not recognise.  There are two possible reasons for this.
==16678== 1. Your program has a bug and erroneously jumped to a non-code
==16678==    location.  If you are running Memcheck and you just saw a
==16678==    warning about a bad jump, it's probably your program's fault.
==16678== 2. The instruction is legitimate but Valgrind doesn't handle it,
==16678==    i.e. it's Valgrind's fault.  If you think this is the case or
==16678==    you are not sure, please let us know and we'll try to fix it.
==16678== Either way, Valgrind will now raise a SIGILL signal which will
==16678== probably kill your program.
==16678== 
==16678== Process terminating with default action of signal 4 (SIGILL)
==16678==  Illegal opcode at address 0x944FD3F
==16678==    at 0x944FD3F: std::vector<double, std::allocator<double> >::_M_insert_aux(__gnu_cxx::__normal_iterator<double*, std::vector<double, std::allocator<double> > >, double const&) (in /usr/lib/libpcl_common.so.1.7.0)
==16678==    by 0x1927C2AD: std::vector<double, std::allocator<double> >::push_back(double const&) (in /opt/ros/hydro/lib/libtrajectory_planner_ros.so)
==16678==    by 0x1928B2B2: base_local_planner::TrajectoryPlannerROS::loadYVels(ros::NodeHandle) (in /opt/ros/hydro/lib/libtrajectory_planner_ros.so)
==16678==    by 0x19289D89: base_local_planner::TrajectoryPlannerROS::initialize(std::string, tf::TransformListener*, costmap_2d::Costmap2DROS*) (in /opt/ros/hydro/lib/libtrajectory_planner_ros.so)
==16678==    by 0x4F567DA: move_base::MoveBase::MoveBase(tf::TransformListener&) (in /opt/ros/hydro/lib/libmove_base.so)
==16678==    by 0x40780B: main (in /opt/ros ...
(more)
edit retag flag offensive reopen merge delete

Closed for the following reason question is not relevant or outdated by tfoote
close date 2015-03-09 17:13:48.003672