ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question

Constantin S's profile - activity

2018-03-16 09:14:07 -0500 received badge  Great Question (source)
2016-10-17 15:34:28 -0500 received badge  Famous Question (source)
2016-05-01 07:23:44 -0500 received badge  Popular Question (source)
2016-04-29 15:57:08 -0500 asked a question Source for RVIZ_Plugin_Tutorials

Title says it all, I've been googling and have been unable t find the actual source code. Where's the documentation for this?

With a catkin example CMakeLists.txt file if possible.

2016-03-25 13:51:41 -0500 commented question VM RVIZ inits but crashes shortly after start

Same problem as well. Ubuntu host with nvidia drivers. Ubuntu 14.04 64 bit guest on Virtual box 5.0.16 and guest additions 5.0.17. How long is VBox going to be blamed for this? We're going on 6 years.

2016-02-13 14:29:13 -0500 received badge  Good Question (source)
2015-06-29 19:47:52 -0500 marked best answer tf_prefix in fake_localization and move_base

I've been examining a strange issue with multiple robots in stage and move_base. Move_base and costmap2D use tf::resolve with tf_prefix to resolve global frames. However fake_localization does not - this leads to the message:

Waiting on transform from robot_0/base_link to robot_0/map to become available before running costmap, tf error:

A few people have had trouble with this. I have examined fake_localization and I believe the following lines (as done in costmap_2d_ros.cpp) need to be added:

// get our tf prefix
ros::NodeHandle prefix_nh;
std::string tf_prefix = tf::getPrefixParam(prefix_nh);
global_frame_id_ = tf::resolve(tf_prefix, global_frame_id_);
base_frame_id_ = tf::resolve(tf_prefix, base_frame_id_);
odom_frame_id_ = tf::resolve(tf_prefix, odom_frame_id_);

Furthermore I had another problem in move_base. tf_prefix is resolved too many times in the Costmap2D and NavFN. Here is the exact situation in navfn_ros.cpp::makePlan()

ros::NodeHandle n;
costmap_2d::Costmap2D* costmap = costmap_ros_->getCostmap();
std::string global_frame = costmap_ros_->getGlobalFrameID();

//until tf can handle transforming things that are way in the past... we'll require the goal to be in our global frame
if(tf::resolve(tf_prefix_, goal.header.frame_id) != tf::resolve(tf_prefix_, global_frame)){
  ROS_ERROR("The goal pose passed to this planner must be in the %s frame.  It is instead in the %s frame.", tf::resolve(tf_prefix_, global_frame).c_str(), tf::resolve(tf_prefix_, goal.header.frame_id).c_str());
  return false;
}

if(tf::resolve(tf_prefix_, start.header.frame_id) != tf::resolve(tf_prefix_, global_frame)){
  ROS_ERROR("The start pose passed to this planner must be in the %s frame.  It is instead in the %s frame.", tf::resolve(tf_prefix_, global_frame).c_str(), tf::resolve(tf_prefix_, start.header.frame_id).c_str());
  return false;
}

What happens is that global_frame has already been resolved (removed preceding slash) inside the Costmap2D class. Now we resolve again, and since the slash is gone it appends the prefix. Thus we get /robot_0/robot_0/map I do not have a solution for this as I expect that this might be done on purpose?

Are there any thoughts on the problems presented here and a possible solution to the over resolving? Thanks!


Here's an example launch file for one robot of a multi robot stage sim. Note that under fake_localization I can adjust the global_frame_id via parameter. However, this is a hacky fix.

<launch>
  <!-- BEGIN ROBOT 0 -->
  <group ns="robot_0">
    <param name="tf_prefix" value="robot_0"></param>

    <arg default="$(find some_path)/launch/move_base_config/cost_map.yaml" name="map_file">
    <node args="$(arg map_file)" name="map_server" pkg="map_server" type="map_server">
        <param name="frame_id" value="map"></param>
    </node>

    <node name="fake_localization" output="screen" pkg="fake_localization" respawn="false" type="fake_localization">
        Uncomment here for success - without making above changes
      <!--param name="global_frame_id" value="/robot_0/map"/-->
       <param name="global_frame_id" value="map"></param> Need this to be in a relative frame
    </node>

    <node name="move_base_node" output="screen" pkg="move_base" respawn="false" type="move_base">
      <param name="controller_frequency" value="10.0"></param>
      <param name="recovery_behavior_enabled" value="true"></param>
      <param name="oscillation_timeout" value="5.0"></param>
      <param name="oscillation_distance" value="1.0"></param>
      <rosparam command="load" file="$(find some_path)/launch/move_base_config/costmap_common_params.yaml" ns="global_costmap">
      <rosparam command ...
(more)
2015-06-09 18:46:44 -0500 received badge  Nice Question (source)
2014-10-23 16:29:27 -0500 received badge  Taxonomist
2014-07-25 15:59:15 -0500 received badge  Famous Question (source)
2014-05-02 09:07:31 -0500 received badge  Famous Question (source)
2014-04-20 12:43:03 -0500 marked best answer Physics_ODE Install

Hello all, I have recently discovered that ROS has a patched ode engine. Installing electric ROS full, revealed the patched opende engine (with the parrallel_step) library. First I wanted to thank the programmers for this awesome patch.

I am interested in using this package outside of ROS, and it seems that the libraries are very similar if not the same as the ode packages. Also from the documentation page, I garner that the library can be used apart from ROS. My goal is to use this ode engine with OpenRAVE in the OpenRAVE environment (I know there is a way to use OpenRAVE in ROS, but I am still learning about that.) So my question:

I have linked the includes, and the ode-config bin to my /usr. (I also rebuilt the library because the ode-config bin gave out wrong --cflags and --libs). Does anyone know if this is enough? Does anyone have experience with what I am attempting? Thank you so much!

Constantin

2014-04-20 12:26:48 -0500 marked best answer URDF and URI's

Hello all, I am having some trouble loading a model supplied by a colleague in rviz. For my own interests, I wish to be able to load a urdf which is not part of a ros package. Thus, everywhere where it was written:

 <mesh filename="package://derp/meshes/zmp.stl" />

I replaced with:

 <mesh filename="file://home/constantin/workspace/OpenRAVE/data/cRoNA/meshes/zmp.stl" />

and then afterwards

 <mesh filename="file:///home/constantin/workspace/OpenRAVE/data/cRoNA/meshes/zmp.stl" />

Well both of those didn't work, I still got the following errors:

[ERROR] [1323810997.737214696]: Error retrieving file [/home/constantin/workspace/OpenRAVE/data/cRoNA/meshes/zmp.stl]: <url> malformed
[ERROR] [1323810997.737386409]: Could not load model 
     '/home/constantin/workspace/OpenRAVE/data/cRoNA/meshes/zmp.stl' for link 'zmp': OGRE 
     EXCEPTION(6:FileNotFoundException): Cannot locate resource  
     /home/constantin/workspace/OpenRAVE/data/cRoNA/meshes/zmp.stl in resource group 
     Autodetect or any other group. in ResourceGroupManager::openResource at /tmp/buildd/ros-
     electric-visualization-common-1.6.2/debian/ros-electric-visualization-
     common/opt/ros/electric/stacks/visualization_common/ogre/build/ogre_src_v1-7-
     3/OgreMain/src/OgreResourceGroupManager.cpp (line 753)

Could anyone give me some tips on what I am doing wrong? A link to expanded documentation would be great as well, the Resource Retriever page is quite empty. Thank you so much!

2014-04-20 12:26:26 -0500 marked best answer roslaunch changes my PYTHONPATH

Hello all, I am running a python script from a callback. When I run my test code from my shell, I have my environment variables (from my bashrc), more specifically my PYTHONPATH. However, when I do a roslaunch, PYTHONPATH is only pointing to the ros python modules. Could anyone offer any suggestions? Do I need to use the <env> tags in the launch file? Is roslaunch overwriting environment variables or is it running in a different shell? Thank you

Constantin

Edit: I am getting this runtime error as well. If you notice, there is a missing symbol _Py_ZeroStruct. I have seen similar error messages and they've always been related to me not linking a library correctly. In this case it seems the python library may not be linking correctly. In my example program, I simply use:

 -lpython2.6 
In the CMakeList.txt, I use:
 target_link_libraries(ExtractionController python2.6) 
I have a feeling, ROS is forcing a bad link somewhere though. Has anyone experienced this? Thank you. Here is a print out of the runtime error:
Traceback (most recent call last):
  File "/usr/lib/python2.6/dist-packages/numpy/__init__.py", line 130, in <module>
    import add_newdocs
  File "/usr/lib/python2.6/dist-packages/numpy/add_newdocs.py", line 9, in <module>
    from lib import add_newdoc
  File "/usr/lib/python2.6/dist-packages/numpy/lib/__init__.py", line 4, in <module>
    from type_check import *
  File "/usr/lib/python2.6/dist-packages/numpy/lib/type_check.py", line 8, in <module>
    import numpy.core.numeric as _nx
  File "/usr/lib/python2.6/dist-packages/numpy/core/__init__.py", line 5, in <module>
    import multiarray
ImportError: /usr/lib/python2.6/dist-packages/numpy/core/multiarray.so: undefined symbol: _Py_ZeroStruct
Traceback (most recent call last):
  File "/home/constantin/workspace/OpenRAVE/src/grasp_behavior_2.py", line 3, in <module>
    from openravepy import *
  File "/home/constantin/workspace/rospackages/openrave/lib/python2.6/site-packages/openravepy/__init__.py", line 35, in <module>
    openravepy_currentversion = loadlatest()
  File "/home/constantin/workspace/rospackages/openrave/lib/python2.6/site-packages/openravepy/__init__.py", line 16, in loadlatest
    return _loadversion('_openravepy_')
  File "/home/constantin/workspace/rospackages/openrave/lib/python2.6/site-packages/openravepy/__init__.py", line 19, in _loadversion
    mainpackage = __import__("openravepy", globals(), locals(), [targetname])
  File "/home/constantin/workspace/rospackages/openrave/lib/python2.6/site-packages/openravepy/_openravepy_/__init__.py", line 29, in <module>
    from openravepy_int import *
ImportError: numpy.core.multiarray failed to import
2014-04-20 12:26:05 -0500 marked best answer Can't Find My Include

Hello all, I have two packages: OpenRAVEROSInterp and myTestROS.

OpenRAVEROSInterp is a little package I developed which connects OpenRAVE and ROS. It works well and uses a file named ROSRobot.h which contains subscriptions/services to interact with robots in OpenRAVE. It is stored in

rospackages/OpenRAVEROSInterp/include/OpenRAVEROSInterp/ROSRobot.h

My other package myTestROS is attempting to use ROSRobot.h (just for fun). It's manifest.xml has

 <depend package="OpenRAVEROSInterp"/> 

When I run rosmake, I get...

 ...workspace/rospackages/myTestROS/src/TestClass.cpp:36:40: error: OpenRAVEROSInterp/ROSRobot.h: No such file or directory 

Where line 36 is:

#include <OpenRAVEROSInterp/ROSRobot.h>

Could anyone off any suggestions? Thank you.

2014-04-20 12:26:05 -0500 marked best answer tf::StampedTransform Throws Segfault

Hello all, I am attempting the following:

class Durp
{
  tf::TransformListener _tfListener;
  tf::StampedTransform * saveMyTransform;

  Durp() : saveMyTransform(NULL)
  {
    Nodehandle n;
    someSub = n.sub(bla bla bla &callback);
  }

  ~Durp()
  {
    if(saveMyTransform!=NULL) delete saveMyTransform
  }

  void callback(geo_msgs::StampedPoint incPoint)
  {
     tf::StampedTransform tempTransform; //<---- SEGFAULT FOR NO REASON

     try {
       if(saveMyTransform == NULL)
       {
         saveMyTransform = new tf::StampedTransform();
         _tfListener.lookupTransform("bla", "bla2", ros::Time(0), *saveMyTransform);
         // ^^ Segfaults if I comment out tf::StampedTransform tempTransform above
       }

       transform things....
     }
     catch bllaaaa
  }
};

Could someone please shed some light on what I am doing wrong. I would sincerely appreciate, I am ripping my hair out.


Segfault for StampedTransform tempTransform dump:

0x00007fffeba92116 in std::basic_string<char, std::char_traits<char="">, std::allocator<char> >::~basic_string() () from /usr/lib/libstdc++.so.6
(gdb) bt
#0  0x00007fffeba92116 in std::basic_string<char, std::char_traits<char="">, std::allocator<char> >::~basic_string() () from /usr/lib/libstdc++.so.6
#1  0x000000000041d321 in ~StampedTransform (this=0x7fffd4f7b2b0, __in_chrg=<value optimized="" out="">) at /opt/ros/electric/stacks/geometry/tf/include/tf/transform_datatypes.h:89
#2  0x00007fffee75421a in tf::Transformer::setTransform (this=<value optimized="" out="">, transform=<value optimized="" out="">, authority=<value optimized="" out="">)
    at /tmp/buildd/ros-electric-geometry-1.6.1/debian/ros-electric-geometry/opt/ros/electric/stacks/geometry/tf/src/tf.cpp:438
#3  0x00007fffee7670a5 in tf::TransformListener::subscription_callback (this=<value optimized="" out="">, msg=<value optimized="" out="">)
    at /tmp/buildd/ros-electric-geometry-1.6.1/debian/ros-electric-geometry/opt/ros/electric/stacks/geometry/tf/src/transform_listener.cpp:326
#4  0x00007fffee76d1ab in boost::function1<void, boost::shared_ptr<tf::tfmessage_<std::allocator<void=""> > const> const&>::operator() (function_obj_ptr=<value optimized="" out="">, a0=DWARF-2 expression error: DW_OP_reg operations must be used either alone or in conjuction with DW_OP_piece.
)
    at /usr/include/boost/function/function_template.hpp:1013
#5  boost::detail::function::void_function_obj_invoker1<boost::function<void ()(boost::shared_ptr<tf::tfmessage_<std::allocator<void=""> > const> const&)>, void, boost::shared_ptr<tf::tfmessage_<std::allocator<void> > const> >::invoke(boost::detail::function::function_buffer&, boost::shared_ptr<tf::tfmessage_<std::allocator<void> > const>) (function_obj_ptr=<value optimized="" out="">, a0=DWARF-2 expression error: DW_OP_reg operations must be used either alone or in conjuction with DW_OP_piece.
)
    at /usr/include/boost/function/function_template.hpp:153
#6  0x00007fffee770890 in boost::function1<void, boost::shared_ptr<tf::tfmessage_<std::allocator<void=""> > const> >::operator() (this=0x7fffd0000a70, params=<value optimized="" out="">)
    at /usr/include/boost/function/function_template.hpp:1013
#7  ros::SubscriptionCallbackHelperT<boost::shared_ptr<tf::tfmessage_<std::allocator<void> > const> const&, void>::call (this=0x7fffd0000a70, params=<value optimized="" out="">)
    at /opt/ros/electric/stacks/ros_comm/clients/cpp/roscpp/include/ros/subscription_callback_helper.h:180

Backtrace of when I pass my dynamically allocated Transform in

0  0x00007fffeba921fd in std::string::assign(std::string const&) () from /usr/lib/libstdc++.so.6
#1  0x00007fffee75581e in std::string::operator= (this=<value optimized="" out="">, target_frame=<value optimized="" out="">, source_frame=<value optimized="" out="">, time=..., transform=...)
    at /usr/include/c++/4.4/bits/basic_string.h:506
#2  tf::Transformer::lookupTransform (this=<value optimized="" out="">, target_frame=<value optimized="" out="">, source_frame=<value optimized="" out="">, time=..., transform=...)
    at /tmp/buildd/ros-electric-geometry-1.6.1/debian/ros-electric-geometry/opt/ros/electric/stacks/geometry/tf/src/tf.cpp:483
#3  0x0000000000439494 in RaveServer::displayWaypoint ...
(more)
2014-04-20 12:25:53 -0500 marked best answer Namespace and Remapping

Hello all, I have been reading the documentation and running test examples on namespaces and remaps but I still cannot achieve what I am trying to do. My attempts have also spawned new questions which I could not find answers to.

First Problem: My node publishes topics in the following manner:

/mynode/[robot_name]/sim/twist
/mynode/[robot_name]/sim/odom
/mynode/[robot_name]/sim/base_scan

I would like to remap the sim/* commands to other commands:

/mynode/[robot_name]/sim/twist            -> /[robot_name]/cmd_vel
/mynode/[robot_name]/sim/odom             -> /[robot_name]/odom
/mynode/[robot_name]/sim/base_scan        -> /[robot_name]/base_scan

Note, that [robot_name] is dynamic, based on an input file. (Just like stage's robot_0, robot_1, robot_2, etc).

Removing the node name was simple, but the sim/* -> new_name did not work. In the launch file:

  <remap from="/mynode" to ="/" /> --- This works
  <remap from="sim/twist" to ="cmd_vel" /> --- These don't
  <remap from="sim/odom" to ="odom" /> --- These don't
  <remap from="sim/base_scan" to ="base_scan" /> --- These don't

Could anyone offer any suggestions on a fix?


Second Problem: When I remap "/mynode" to "/", parameters I pass into my node aren't found anymore. NodeHandle.searchParam does not find them, but they still exist. For example:

 namespace of node = "/"     (this is because of the remap above)
 parameters = "/mynode/PARAM1" , "/mynode/PARAM2"  (parameters are not remapped!!)

As stated, searchParams does not find them, but getParam("/mynode/Param1") works (and of course getParam("Param1") fails since the node's namespace changed. Does anyone have any thoughts? Thank you for your time!

2014-04-20 12:25:48 -0500 marked best answer Using std::vector Copy Constructor In a Message

Hello all, I am attempting the following code:

vector<float> ranges(360, 10); //A vector of 360 '10's
sensor_msgs::LaserScan currentScan;
currentScan.ranges(ranges);   // <---------- Fails

Here is the cryptic error message:

error: no match for call to ‘(std::vector<float, std::allocator<float> >) (std::vector<float,std::allocator<float> >&)’

I tried googling similar errors but to no avail. If someone could offer some readings on the failure behind this, I would really appreciate this. Thank you

Constantin

2014-04-20 12:25:35 -0500 marked best answer Can't Set RPath

Hello all, I am having trouble with my CMake file. I am getting a library not found after compiling, so I looked up the documentation for CMake 2.4.6 AND CMake 2.8 (no difference here) for setting your RPATH.

CMake file is as follows:

string(REGEX REPLACE "[\r\n]" "" OPENRAVE_LIB_DIR "${OPENRAVE_PREFIX}/lib")

set_target_properties(RaveServer PROPERTIES COMPILE_FLAGS "${OPENRAVE_CXX_FLAGS}" LINK_FLAGS "${OPENRAVE_LINK_FLAGS}" INSTALL_RPATH "${OPENRAVE_LIB_DIR}")

Checking the property in the same CMake file:

get_target_property(DURPDA RaveServer INSTALL_RPATH)
message(${DURPDA})

Revealed the property has been set correctly.

However examination of link.txt and CMakeCache.txt shows my -Wl,-rpath,[my rpath] is not seen anywhere. Has anyone else experienced this?

Thank you

2014-04-20 12:23:58 -0500 marked best answer Dirty Uninstall of ROS

Hello all,

I am running ROS on Ubuntu 11.04. I can't remember how I exactly installed ROS but I distinctly remember using svn. I wanted to make sure my ros was up to date after doing an svn update and a make in my ros folder but I couldn't figure out how to check my installation/version. So I decided I would uninstall it and start from scratch. However, I could not find an uninstall script anywhere (I checked rosinstall, and the make file.) To fix my problem I simply did rm -rf [my ros dir]. I just did a locate and it looks like there's a lot of residue ROS files all over my system ... probably from a "sudo make install." Does anyone have a suggestion on how I could remove this residue? (And maybe on how I should have uninstalled it.) Thank you very much!

2014-04-20 06:56:50 -0500 marked best answer ros::init API Documentation

I am having trouble finding the ros::init call in the documentation. I've followed a few of the tutorial links and tried searching through the documentation. Here are my main leads:

http://docs.ros.org/hydro/api/roscpp/...

http://wiki.ros.org/roscpp/Overview/I... -- The links here 404

Any suggestions? Thanks in advance.

2014-04-20 06:56:42 -0500 marked best answer Force Rebuild of Base Package

All, I want to add some debug statements to fake_localization for some tests. I can't get the build system to build it. This is very aggravating:

  1. Adjust $ROS_PACKAGE_PATH to hold my packages first
  2. roscd fake_localization moves me to my local sources
  3. rosmake complains about ROS_NOBUILD
  4. find /opt/ros -iname '*ROS_NOBUILD*' returns nothing
  5. find /home/me/workspace/navigation -iname '*ROS_NOBUILD*' returns nothing

There is no ROS_NOBUILD in my directory. There is no documentation explaining where this ROS_NOBUILD is coming. I am having trouble finding documentation on how to remove supplied packages from the original installation due to the this strange organization of ../share and ../include and ../bin folders in ros root.


I managed to build it, it was a catkin issue. However, to setup an entire workspace for catkin builds and move all my projects into a src folder is redundant to me. My solution:

roscd fake_localization
mkdir build
cd build
cmake ..
make

Finally you need to move the executable out of the build directory otherwise rosrun will not find it...

cp devel/lib/fake_localization/fake_localization ..

or

cmake -DCMAKE_INSTALL_PREFIX=../bin ..
make install

But the second option adds all these bloated scripts in the bin directory. (But rosrun will find it).

2014-04-20 06:55:32 -0500 marked best answer Custom Messages Won't Build

I am using rosmake and fuerte.

rosbuild_genmsg is uncommented in the CMakeLists.txt.

Running rosmake in the package doesn't create a msg_gen folder or the messages. I can't figure out what I'm doing wrong....

No Make file in package my_msgs


In a later project which uses the messages:

fatal error: my_msgs/MyMsg.h

2014-04-20 06:52:04 -0500 marked best answer Backwards Compatible Ros Commands To Find System Headers (Fuerte -> Electric)

All,

I am trying to update some CMake files for a colleague since he is using Electric and I need to use Fuerte. I would like to update the CMake files using ROS's CMake macros, environment variables and console commands... Note these are not rosmake files but simple cmake files that use some of ROS's libraries.

However, some of the core headers (such as rosbag.h or ros.h) no longer follow a simple rospack find [package]. This call returns me to /opt/ros/fuerte/share directory.

Is it possible to somehow use rosbuild_find_ros_package and prefix /include in such a way that it works for all packages in Fuerte and Electric

Thank you

2014-04-20 06:50:33 -0500 marked best answer libavcodec Removal/Upgrade

Hi All, I am trying to install the usb_cam node. I am getting error messages related to libavcodec. More specifically declaration of AVMEDIA_TYPE_VIDEO and definition of AVPacket. Examining my avcodec.h and avutil.h those are indeed not defined. Examining the avcodec.h and avutil.h on ffmpeg.org, those are defined.

Thus my next logical step is remove the half finished libraries on my computer and install the real libraries. However, I cannot do this without uninstalling ROS. Does anyone have a work around for this? Should I update my repos maybe? Any thoughts would be great, I would rather not spend the day uninstalling ros then reinstalling it.

System: Ubuntu 10.04

tl;dr: Using the package manager to remove libavcodec forces ROS removal. I need to upgrade libavcodec.