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

skiesel's profile - activity

2022-05-16 05:56:30 -0500 received badge  Self-Learner (source)
2022-03-09 20:25:29 -0500 received badge  Nice Question (source)
2019-01-28 13:19:41 -0500 marked best answer openni crashes when sensor starts plugged in

I was just wondering if anyone else has experienced this and has found a solution?

I'm running Ubuntu 12.04 and Hydro.

When I try to run the following command with my PrimeSense Carmine 1.08 or 1.09 unplugged initially:

roslaunch openni_launch openni.launch

I get this message:

[ INFO] [1381423288.395880191]: No devices connected.... waiting for devices to be connected

I then plug in the sensor and it detects it and everything is great!

However, if I try to launch openni.launch with the sensor already plugged in I get the following errors:

(I've cut out the pages of errors that follow because I assume it all stems from this initial reported error)

auto-starting new master
process[master]: started with pid [11804]
ROS_MASTER_URI= ~~~

setting /run_id to 7cec9494-31ca-11e3-85e0-00219b846bff
process[rosout-1]: started with pid [11817]
started core service [/rosout]
process[camera/camera_nodelet_manager-2]: started with pid [11829]
process[camera/driver-3]: started with pid [11830]
[ INFO] [1381423151.932190037]: Initializing nodelet with 4 worker threads.
process[camera/debayer-4]: started with pid [11874]
Warning: USB events thread - failed to set priority. This might cause loss of data...
process[camera/rectify_mono-5]: started with pid [11890]
process[camera/rectify_color-6]: started with pid [11904]
process[camera/rectify_ir-7]: started with pid [11923]
process[camera/depth_rectify_depth-8]: started with pid [11937]
process[camera/depth_metric_rect-9]: started with pid [11951]
terminate called after throwing an instance of 'openni_wrapper::OpenNIException'
  what():  unsigned int openni_wrapper::OpenNIDriver::updateDeviceList() @ /tmp/buildd/ros-hydro-openni-camera-1.9.0-0precise-20130919-1441/src/openni_driver.cpp @ 125 : enumerating image nodes failed. Reason: One or more of the following nodes could not be enumerated:

Image: PrimeSense/SensorV2/5.1.2.1: Failed to set USB interface!

process[camera/depth_metric-10]: started with pid [11972]
[FATAL] [1381423152.575150990]: Service call failed!
2018-08-03 05:06:26 -0500 received badge  Great Question (source)
2017-12-03 23:11:30 -0500 received badge  Nice Answer (source)
2017-04-28 02:01:25 -0500 received badge  Guru (source)
2017-04-28 02:01:25 -0500 received badge  Great Answer (source)
2016-01-26 10:29:29 -0500 received badge  Good Question (source)
2016-01-26 10:29:26 -0500 received badge  Good Answer (source)
2015-06-25 07:30:15 -0500 received badge  Nice Answer (source)
2015-06-24 02:38:38 -0500 received badge  Self-Learner (source)
2015-06-24 02:24:40 -0500 received badge  Nice Question (source)
2015-03-25 12:13:39 -0500 received badge  Good Answer (source)
2014-10-25 23:02:34 -0500 received badge  Enlightened (source)
2014-04-20 06:55:48 -0500 marked best answer MoveIt demo.launch for custom arm trouble

I am in the process of setting up our CytonGamma300 to work with MoveIt. I've been doing my best to follow along with all the tutorials associated with constructing the URDF and running through the MoveIt setup assistant. Everything works great up until I try to run the demo.launch file created by the setup assistant. It looks like the move_group node dies during setup:

[move_group-4] process has died [pid 20831, exit code -4

As a result when MoveIt (I assume) says:

[ INFO] [1380215273.058350241]: Constructing new MoveGroup connection for group 'arm'

The error that follows says:

[ERROR] [1380215303.107930485]: Unable to connect to action server within allotted time

This seems totally reasonable since the move_group node died. So I tried running the move_group node while everything else was running. I got the same error about it dying:

[move_group-1] process has died [pid 21462, exit code -4

Obviously the next logical step was to see what was going on in the move_group.launch file. Thoughtfully enough there gdb options! So I enabled debugging and reran the launch file -- gdb and a quick backtrace give me this:

Program received signal SIGILL, Illegal instruction.
0x00007ffff263b86e in occupancy_map_monitor::OccupancyMapMonitor::OccupancyMapMonitor(boost::shared_ptr<tf::Transformer> const&, std::string const&, double) () from /opt/ros/hydro/lib/libmoveit_occupancy_map_monitor.so
(gdb) backtrace
#0  0x00007ffff263b86e in occupancy_map_monitor::OccupancyMapMonitor::OccupancyMapMonitor(boost::shared_ptr<tf::Transformer> const&, std::string const&, double) () from /opt/ros/hydro/lib/libmoveit_occupancy_map_monitor.so
#1  0x00007ffff694443c in planning_scene_monitor::PlanningSceneMonitor::startWorldGeometryMonitor(std::string const&, std::string const&) () from /opt/ros/hydro/lib/libmoveit_planning_scene_monitor.so
#2  0x000000000040e5d1 in main ()

Any ideas? I'm running hydro on ubuntu 12.04. RViz starts up just fine when I run demo.launch and after the above connection attempt times out I can move the arm goal configuration around in RViz.

I imagine this is related to the problem but in the Motion Planning box in the Context tab in the Planning Library pane "NO PLANNING LIBRARY LOADED" is displayed in red.

To further supply information (as a control) I tried running the pr2_moveit_config version of demo.launch and have possibly similar problems:

[move_group-5] process has died [pid 22281, exit code -4

and then

[ERROR] [1380216041.741668016]: The kinematics plugin (left_arm) failed to load. Error: According to the loaded plugin descriptions the class pr2_arm_kinematics/PR2ArmKinematicsPlugin with base class type kinematics::KinematicsBase does not exist. Declared types are  kdl_kinematics_plugin/KDLKinematicsPlugin

followed by the same message for the right_arm.

Thank you so much for your help with this!

2014-04-20 06:53:53 -0500 marked best answer Using OpenNi after Electric

This is a pretty simple question I imagine but I want to make sure that I'm understanding things correctly BEFORE I get too involved.

I want to use the OpenNi drivers for a PrimeSense RGBD sensor, I'll actually use any drivers, but OpenNi seems to be the most supported.

The ROS package for all things OpenNi says that it is deprecated in Fuerte. It says that you should compile directly against the system dependency instead.

This is the part I want to make sure I understand correctly. I should download and install the driver/library directly from http://www.openni.org/ and then link to those instead of a ros package?

Also just out of curiosity, does anyone know why this package has become deprecated?

2014-04-20 06:52:25 -0500 marked best answer yaw_goal_tolerance not working?

I know that this question is common but I think that I've looked "all over" for an answer that works so if you have a minute would you mind checking out these config files for the nav stack? Everything seems to be working just great except for the goal achievement. I'm going to say that it gets to the (x,y) component fine but then it rotates back and forth. Ready... Set... Check my yaw_goal_tolerance :-) Just kidding, is it possible that the rotation actions being provided by the local planner are too coarse?

local_costmap:
  global_frame: /odom
  robot_base_frame: /base_link
  update_frequency: 5.0
  publish_frequency: 2.0
  static_map: false
  rolling_window: true
  width: 10.0
  height: 10.0
  origin_x: 0.0
  origin_y: 0.0
  resolution: 0.05

global_costmap:
  global_frame: /map
  robot_base_frame: /base_link
  update_frequency: 2.0
  publish_frequency: 10.0
  static_map: false
  rolling_window: true

obstacle_range: 2.5
raytrace_range: 3.0
inflation_radius: 0.5


#---standard pioneer footprint---

#---(in meters)---
footprint: [ [0.254, -0.0508], [0.1778, -0.0508], [0.1778, -0.1778], [-0.32, -0.1778], [-0.32, 0], [-0.32, 0.1778], [0.1778, 0.1778], [0.1778, 0.0508], [0.254, 0.0508] ]

transform_tolerance: 0.5
map_type: costmap

observation_sources: scan

scan: {
      sensor_frame: base_laser, 
      data_type: LaserScan, 
      topic: scan, 
      marking: true, 
      clearing: true, 
      expected_update_rate: 0.5
      } 

# Robot Configuration Parameters
acc_lim_x: 2.5
acc_lim_y: 2.5
acc_lim_th: 3.2
max_vel_x: 0.5
min_vel_x: 0.1
max_rotational_vel: 1.75
min_in_place_rotational_vel: 0.4
escape_vel: -0.1
holonomic_robot: false

# Goal Tolerance Parameters
xy_goal_tolerance: 0.5
yaw_goal_tolerance: 0.1

# Forward Simulation Parameters
sim_time: 1.7
sim_granularity: 0.025
vx_samples: 3
vtheta_samples: 20

# Trajectory Scoring Parameters
goal_distance_bias: 0.8
path_distance_bias: 0.6
occdist_scale: 0.01
heading_lookahead: 0.325
dwa: true

# Oscillation Prevention Parameters
oscillation_reset_dist: 0.05

If these settings look rather familiar it's because they're just about copied from the erratic navigation stack. And for completeness I've up'ed the xy_goal_tolerance to 0.5 and the yaw_goal_tolerance to 3.0 without having any improvement.

I saw that someone had an issue where they created a discrepancy between the resolutions of the map and costmaps?

So with that being said here are the parameters I'm feeding to gmapping:

<param name="sigma" value="0.05"/>
<param name="kernelSize" value="1"/>
<param name="lstep" value="0.05"/>
<param name="astep" value="0.05"/>
<param name="iterations" value="5"/>
<param name="lsigma" value="0.075"/>
<param name="ogain" value="3.0"/>
<param name="lskip" value="0"/>
<param name="srr" value="0.01"/>
<param name="srt" value="0.02"/>
<param name="str" value="0.01"/>
<param name="stt" value="0.02"/>
<param name="linearUpdate" value="0.5"/>
<param name="angularUpdate" value="0.436"/>
<param name="temporalUpdate" value="-1.0"/>
<param name="resampleThreshold" value="0.5"/>
<param name="particles" value="80"/>
<param name="xmin" value="-10.0" />
<param name="ymin" value="-10.0" />
<param name="xmax" value="10.0" />
<param name="ymax" value="10.0" />
<param name="delta" value="0.025"/>
<param name="llsamplerange" value="0.01"/>
<param name="llsamplestep" value="0.01 ...
(more)
2014-04-20 06:52:24 -0500 marked best answer TransformListener Question

I think that this must be some sort of silly mistake on my part but.... I'm trying to use the following code. My transform tree (verified with command line tf and rviz) has /map -> /odom -> /base_link in it. But when I try to run the following C++ I end up getting a transform error claiming:

Frame id /map does not exist! Frames (1):

The simulation in gazebo is up and running for plenty of time before I even try to run this code so I don't think it's an issue of the transforms not being published yet. Also, it's not complaining about extrapolation so I don't think it's a timestamping issue?

ros::init(argc, argv, "transform test");
ros::NodeHandle n;

tf::TransformListener tfListener;

geometry_msgs::PointStamped baseLinkPoint;
geometry_msgs::PointStamped mapPoint;

baseLinkPoint.header.frame_id = "/base_link";
baseLinkPoint.header.stamp = ros::Time::now();

baseLinkPoint.point.x = 0.0;
baseLinkPoint.point.y = 0.0;
baseLinkPoint.point.z = 0.0;

try { tfListener.transformPoint("/map", baseLinkPoint, mapPoint); }
catch (tf::TransformException ex) { ROS_ERROR("%s",ex.what()); }

Any insight is greatly appreciated!

2014-04-20 06:52:11 -0500 marked best answer Simple odometry question

I'm trying to get our robot up and running the navigation stack. As far as I have read and can tell, everything is "correct". In the navigation stack tuning guide it says that there are a couple odometry "sanity checks". Translational involves driving the robot towards a wall and making sure that the aggregate laser scans don't spread over a large distance (~.5 meter). That seems to be going just fine for me.

However, rotation seems to be a problem, I think? With rviz's frame set to "/odom" and spinning the robot in place the scans get to be a giant swirl. When the robot rotates all the way around and returning to where it started, the scans (without aggregate) look identical to what they were before. Meaning if I start facing a wall with the wall parallel to one of the grid lines, after turning all the way around, the wall is once again parallel to the grid line.

It seems like the purpose of the odometry, in rotational terms, is working if when you spin all the way around, your pose at the end is the same as when you started? So I think it's working correctly? Is that right?

I'm hoping that I'm missing something because I'd like to run the gmapping node (which I've tried and my setup isn't working). Hopefully it's something simple. Any help is greatly appreciated.

2014-04-20 06:51:33 -0500 marked best answer Packages in between ROS versions

I'm running fuerte on 12.04 and I realize it takes a lot of work trying to keep stacks up to date in the latest ROS releases. However, when a stack, in this case the p2os stack, appears to be supported in the previous ROS release (electric) and not yet in the current (fuerte), what do you do?

Should you wait until you can properly install it?

sudo apt-get install ros-fuerte-p2os

Or is it alright/recommended to try and run something (stable) in a previous release in the current release -- by grabbing the old source from the repository by hand?

Or is there an alternative option? Or am I looking for a stack that has changed names in the current release?

Thanks! I really appreciate any insight.

2014-04-20 06:51:31 -0500 marked best answer Coordinate frame transforms: /odom to /map?

I think I might just be having a difficult time understanding how the coordinate frames relate to each other. I'm working on a visualization (very small subset of rviz) that is shown in a browser.

Basically I'm running SLAM and building a map. Using rosbridge I'm able to get the map and draw it. The base frame is /map and the associated OccupancyGrid has an origin which I translate and rotate by. This seems to work just fine.

Now I want to put an overlay of a robot footprint so you can see where it is, or it thinks it is in the map. Ideally I'd like to display a few topics under /move_base_node which have a base frame of /odom:

  • /move_base_node/local_costmap/robot_footprint
  • /move_base_node/local_costmap/obstacles
  • /move_base_node/local_costmap/inflated_obstacles

* In the end this is what worked for me *

As suggested I look up the transform between map and odom and then publish that on a new topic that I can subscribe to on the client end of rosbridge. Whenever I receive an update I use the transformation between map and odom on any topics with a base frame of odom to bring them into the map frame.

You can check the frames easily with: rostopic echo 'your_topic_name' | grep frame

int main(int argc, char** argv){
  ros::init(argc, argv, "my_tf_listener");
  ros::NodeHandle node;
  ros::Rate rate(1.0);

  tf::TransformListener listener;
  tf::StampedTransform tfTransform;
  tf::Vector3 origin;
  tf::Quaternion rotation;
  tf::Vector3 axis;

  static ros::Publisher publisher = 
    node.advertise<geometry_msgs::TransformStamped>("/odom2map_transform",
                            10);

  geometry_msgs::TransformStamped geoTransform;

  int seq = 0;
  geoTransform.header.frame_id = "map";
  geoTransform.child_frame_id = "odom";

  while(node.ok()) {
    try { 
      listener.lookupTransform(geoTransform.header.frame_id,
                   geoTransform.child_frame_id,       
                   ros::Time(0), 
                   tfTransform);
    }
    catch(tf::TransformException &exception) { 
      ROS_ERROR("%s", exception.what());
    }

    origin = tfTransform.getOrigin();
    rotation = tfTransform.getRotation();
    axis = rotation.getAxis();

    geoTransform.header.seq = seq;
    geoTransform.header.stamp = tfTransform.stamp_;

    geoTransform.transform.translation.x = origin.x();
    geoTransform.transform.translation.y = origin.y();
    geoTransform.transform.translation.z = origin.z();

    geoTransform.transform.rotation.x = axis.x();
    geoTransform.transform.rotation.y = axis.y();
    geoTransform.transform.rotation.z = axis.z();
    geoTransform.transform.rotation.w = rotation.getW();

    seq++;
    publisher.publish(geoTransform);
    rate.sleep();
  }

  return 0;
}
2014-04-20 06:51:30 -0500 marked best answer Visualization / Transforms with rosbridge and erratic

I'm trying to create a website that displays the current progress of a robot (in this case erratic) running SLAM. With rosbridge I've been able to set up the subscriptions that I need, I think and I can draw all of the data in a similar way that rviz does.

The trouble is that each topic I've subscribed to has a lot of fields and I'm not sure how to get the transforms from each frame to line up when visualizing the slam map, the senses obstacles and the robot.

The topics of interest are:

/move_base_node/local_costmap/robot_footprint
/move_base_node/local_costmap/inflated_obstacles
/map

Obviously it makes sense that the topics under /move_base_node/local_costmap are in the same frame, but obviously /map is not.

Do I need to use tf to accomplish this? I couldn't find a tutorial for this kind of thing.

Any help or direction is greatly appreciated.

2014-01-28 17:32:12 -0500 marked best answer MoveIt! move_group plan function not returning

I can't figure out what I am doing wrong that would cause this issue. I originally was just using the move() function but that wasn't returning either. I thought it had something to do with just running this in rviz and not really executing anything.

So I switched to plan() instead but found I was having the same issue. I've attached the barebones I've boiled this down to:

#include <ros/ros.h>
#include <moveit/move_group_interface/move_group.h>

int main(int argc, char **argv) {
    ros::init(argc, argv, "move_group_interface_demo");
    ros::NodeHandle node;

    move_group_interface::MoveGroup group("arm");

    ros::Rate rate(1);
    while (node.ok()){
        group.setRandomTarget();

        moveit::planning_interface::MoveGroup::Plan  plan;

        ROS_INFO("Planning");

        if(group.plan(plan)) {
            ROS_INFO("Planning Successful");
        }
        else {
            ROS_WARN("Planning failed!");
        }
        rate.sleep();
    }

    ROS_INFO("DONE");

    ros::waitForShutdown();
    return 0;
}

Like I said, I'm sure it's a careless mistake that I'm not seeing. I'm using the demo.launch file created using the MoveIt! Setup Assistant. I see the plan being visualized in RViz after the planning is initiated? But the function doesn't return in this simple node.

In the terminal I see "Planning" being printed but neither the successful or failure messages print after that.

Also, I can use the planners in MoveIt! just fine inside of RViz to "plan and execute".

Any ideas?