I recently decided to upgrade my project created on Electric on Ubuntu 10.04 to Fuerte and 12.04 for various reasons. Everything worked fine with the old setup, and many things would be broken in the upgrade. I managed to fix most of them, however there are several which I just cannot figure out and have been unable to find clear explanations about online. I've tried to make the descriptions brief so this post doesn't become monstrous, but please ask questions if you have them and I'll try to stay on top of this post. Also, I can't get the hang of formatting for these posts, so I put the lines as numbered lists, the numbers don't actually mean anything.
Thanks!
Problem A) It looks like it can't find liblog4c.so file, or that I need to manually add it. However any attempt to do so in the CMakeLists.txt file for the package just turns up more errors.
- [ 80%] Building CXX object src/utils/CMakeFiles/getFirmwareVersion.dir/getFirmwareVersion.o
- Linking CXX executable ../../../bin/getFirmwareVersion
- /usr/bin/ld: CMakeFiles/getFirmwareVersion.dir/getFirmwareVersion.o: undefined reference to symbol 'typeinfo for log4cxx::helpers::ObjectPtrBase'
- /usr/bin/ld: note: 'typeinfo for log4cxx::helpers::ObjectPtrBase' is defined in DSO /usr/lib/liblog4cxx.so.10 so try adding it to the linker command line
- /usr/lib/liblog4cxx.so.10: could not read symbols: Invalid operation
- collect2: ld returned 1 exit status
Problem B) I'm very confused as to why the uvc_camera package suddenly needs a .cfg file, as it wasn't an issue before.
- CMake Error at /opt/ros/fuerte/stacks/dynamic_reconfigure/cmake/cfgbuild.cmake:82 (message):
Dynamic reconfigure has been invoked but could not find a .cfg to build.
Please add one to your package/cfg directory. Aborting. - Call Stack (most recent call first):
/opt/ros/fuerte/stacks/dynamic_reconfigure/cmake/cfgbuild.cmake:87 (gencfg_cpp)
CMakeLists.txt:25 (include)
Problem C) There are many more errors similar to the ones below that I left out to make this post shorter. From what it looks like, tf got a few major changes, do I just have to go through manually and change everything to the new tf functions and objects?
- /myRos/laser_pipeline/laser_geometry/src/laser_geometry.cpp: In member function 'void laser_geometry::LaserProjection::transformLaserScanToPointCloud_(const string&, sensor_msgs::PointCloud&, const LaserScan&, tf::Transformer&, double, int)':
- /myRos/laser_pipeline/laser_geometry/src/laser_geometry.cpp:251:86: error: no matching function for call to 'btVector3::setInterpolate3(tf::Vector3&, tf::Vector3&, btScalar&)'
- /myRos/laser_pipeline/laser_geometry/src/laser_geometry.cpp:251:86: note: candidate is:
- /opt/ros/fuerte/stacks/bullet/include/LinearMath/btVector3.h:236:25: note: void btVector3::setInterpolate3(const btVector3&, const btVector3&, btScalar)
- /opt/ros/fuerte/stacks/bullet/include/LinearMath/btVector3.h:236:25: note: no known conversion for argument 1 from 'tf::Vector3' to 'const btVector3&'
- /myRos/laser_pipeline/laser_geometry/src/laser_geometry.cpp:256:48: error: no matching function for call to 'tf::Matrix3x3::getRotation(btQuaternion&)'
- /myRos/laser_pipeline/laser_geometry/src/laser_geometry.cpp:256:48: note: candidate is:
- /opt/ros/fuerte/stacks/geometry/tf/include/tf/LinearMath/Matrix3x3.h:270:7: note: void tf::Matrix3x3::getRotation(tf::Quaternion&) const
- /opt/ros/fuerte/stacks/geometry/tf/include/tf/LinearMath/Matrix3x3.h:270:7: note: no known conversion for argument 1 from 'btQuaternion' to 'tf::Quaternion&'
- /myRos/laser_pipeline/laser_geometry/src/laser_geometry.cpp:257:46: error: no matching function for call to 'tf::Matrix3x3::getRotation(btQuaternion&)'
- /myRos/laser_pipeline/laser_geometry/src/laser_geometry.cpp:257:46: note: candidate is:
- /opt/ros/fuerte/stacks/geometry/tf/include/tf/LinearMath/Matrix3x3.h:270:7: note: void tf::Matrix3x3::getRotation(tf::Quaternion&) const
- /opt/ros/fuerte/stacks/geometry/tf/include/tf/LinearMath/Matrix3x3.h:270:7: note: no known conversion for argument 1 from 'btQuaternion' to 'tf::Quaternion&'
Problem D) It looks like this might be the same issue as above, that tf changed and now I need to change some of my packages to match.
- /myRos/navigation/robot_pose_ekf/src/odom_estimation_node.cpp: In member function 'void estimation::OdomEstimationNode::imuCallback(const ImuConstPtr&)':
- /myRos/navigation/robot_pose_ekf/src/odom_estimation_node.cpp:254:52: error: invalid initialization of reference of type 'tf::Quaternion&' from expression of type 'btQuaternion'
- /opt/ros/fuerte/stacks/geometry/tf/include/tf/transform_datatypes.h:105:20: error: in passing argument 2 of 'void tf::quaternionMsgToTF(const Quaternion&, tf::Quaternion&)'
Problem E) There are a few more lines of the same "is not a member of" or "was not declared in this scope" messages. This one seems like it can't find the boost libraries, however a few other packages I have use the Boost libraries and they build fine, I;m not why sure the upgrade would only break this package but not the others.
- /myRos/openni_ros/depth_image_proc/src/nodelets/convert_metric.cpp:17:3: error: 'mutex' in namespace 'boost' does not name a type
- /myRos/openni_ros/depth_image_proc/src/nodelets/convert_metric.cpp: In member function 'virtual void depth_image_proc::ConvertMetricNodelet::onInit()':
- /myRos/openni_ros/depth_image_proc/src/nodelets/convert_metric.cpp:35:3: error: 'lock_guard' is not a member of 'boost'
- /myRos/openni_ros/depth_image_proc/src/nodelets/convert_metric.cpp:35:21: error: 'mutex' is not a member of 'boost'
- /myRos/openni_ros/depth_image_proc/src/nodelets/convert_metric.cpp:35:40: error: 'connect_mutex_' was not declared in this scope
- /myRos/openni_ros/depth_image_proc/src/nodelets/convert_metric.cpp:35:54: error: 'lock' was not declared in this scope
Originally posted by jker on ROS Answers with karma: 115 on 2012-08-23
Post score: 0