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

mpthompson's profile - activity

2020-01-14 10:15:33 -0500 received badge  Notable Question (source)
2018-07-25 12:13:35 -0500 received badge  Taxonomist
2016-08-08 01:42:28 -0500 received badge  Famous Question (source)
2016-08-08 01:42:28 -0500 received badge  Notable Question (source)
2016-08-08 01:42:28 -0500 received badge  Popular Question (source)
2015-04-23 09:40:48 -0500 received badge  Good Question (source)
2015-01-14 18:58:00 -0500 received badge  Nice Question (source)
2014-10-04 19:40:06 -0500 received badge  Popular Question (source)
2014-09-19 03:38:59 -0500 received badge  Famous Question (source)
2014-08-26 05:57:04 -0500 received badge  Notable Question (source)
2014-08-26 05:57:04 -0500 received badge  Popular Question (source)
2014-08-25 16:52:56 -0500 received badge  Nice Question (source)
2014-08-17 11:38:22 -0500 received badge  Famous Question (source)
2014-08-17 11:38:22 -0500 received badge  Notable Question (source)
2014-07-18 15:36:10 -0500 asked a question Question regarding tf2 static_transform_publisher

Under ROS Hydro, I'm attempting to publish static transforms using the tf2_ros static_transform_publisher using the following in may .launch files:

<node name="tag00001_publisher" pkg="tf2_ros" type="static_transform_publisher" args="1.00 1.00 0.35 0.00 0.00 0.7071 0.7071 /map /tag00001" />

In my C++ code I want to use these transform. To do so making a call using the canTransform() method on the tf2_ros::Buffer object to make sure the transform can occur before getting the transform with the lookupTransform() method.

if (tf_buffer_.canTransform(map_frame_, tag_frame_, ros::Time::now(), ros::Duration(0.1), &tf_err) {
  ...
}

This method call will succeed the first time, but subsequent calls will fail. However, if I use tf to publish the static transform as shown below, the code above will always succeed.

<node name="tag00001_publisher" pkg="tf" type="static_transform_publisher" args="1.00 1.00 0.35 0.00 0.00 1.57 /map /tag00001 100" />

Is this an issue with the tf2_ros::Buffer.canTransform() not yet properly working with latched transform publishers?

What's puzzling to me is why the call to the canTransform() method will succeed once, but not on subsequent calls unless I'm using the tf version of the static_transform_publisher.

I have a feeling there is something missing in my understanding of tf2 and how the tf2_ros::Buffer class. Unfortunately, the tf2 tutorials are woefully outdated and not very helpful in this regards.

2014-07-14 18:47:30 -0500 commented answer Turtlebot robot replacement

The electronic version of the book can be purchased online for about $15 from: http://www.lulu.com/spotlight/pirobot Definitely worth the money.

2014-07-10 18:52:12 -0500 received badge  Famous Question (source)
2014-07-09 19:26:34 -0500 answered a question Turtlebot robot replacement

Yes, this is possible. If you don't have it already, I would suggest getting the book ROS By Example by R. Patrick Goebel. In this book Patrick goes step-by-step through the process required to get a robot similar to the Turtlebot up and running. This includes the nodes that implement motion control via motors, wheels and encoders and how they relate to the navigation and other ROS nodes which are not robot specific. With this information, you would gain a good sense of which turtlebot packages you would need to replace to get your specific platform running under ROS.

2014-07-09 19:07:35 -0500 asked a question Notification when tf topic is subscribed to?

I'm working on camera based visual odometry node that publishes /tf transforms when fiducial tags are present within a camera image. As the image process is somewhat computationally heavy, I would only like to process images only when there is a subscriber that cares about the transforms from my node. The ImageTransport infrastructure provides a connectCallback mechanism for accomplishing this where client nodes subscribe to an image. However, I don't see there is a similar connect callback mechanism for the TransformBroadcaster which I'm using to send transforms. I presume this is because there is no way to tell when transforms a subscriber to /tf really cares about.

Is there a recommended way of accomplishing this? I presume I could create a service that clients can use to manually enable/disable image processing, but I was hoping for something a bit more automatic.

2014-07-09 18:47:08 -0500 received badge  Notable Question (source)
2014-07-02 20:32:39 -0500 received badge  Student (source)
2014-07-02 17:54:30 -0500 received badge  Popular Question (source)
2014-07-01 13:56:50 -0500 received badge  Scholar (source)
2014-07-01 13:56:16 -0500 commented answer Catkin_make fails with "ImportError: cannot import name ensure_workspace_marker"

Thank you very much. That is indeed the problem I ran into. The following command worked for me to remove the older version of catkin-pkg that I must have installed at sometime with pip: "sudo pip uninstall catkin-pkg" This allowed the binary debian package to then be found and catkin_make was again happy.

2014-07-01 13:06:33 -0500 asked a question Catkin_make fails with "ImportError: cannot import name ensure_workspace_marker"

Under ROS hydro, catkin_make has been working fine for me. However, now when I change to my local workspace and execute catkin_make, I get the following error:

~/catkin_ws $ catkin_make
Traceback (most recent call last):
  File "/opt/ros/hydro/bin/catkin_make", line 15, in <module>
    from catkin.builder import cmake_input_changed
  File "/opt/ros/hydro/lib/python2.7/dist-packages/catkin/builder.py", line 61, in <module>
    from catkin_pkg.workspaces import ensure_workspace_marker
ImportError: cannot import name ensure_workspace_marker

A few days ago there was a massive upgrade of packages for ROS hydro which I installed, but I'm not sure if that is related or not.

What might have broken with my ROS installation that is causing this error?

Any help would be appreciated. Thanks.

2014-06-17 22:12:19 -0500 received badge  Famous Question (source)
2014-01-28 17:29:54 -0500 marked best answer Problem of "Please point me at a wall." with turtlebot_calibration

I'm a ROS newby attempting to bring up a TurtleBot with ROS Fuerte and Ubuntu 12.04. I've got the laptop and TurtleBot configured and can get the turtlebot_dashboard going and drive the robot around with a keyboard using the keyboard teleop. I can also apply power to the Kinect device and see the three requisite Microsoft USB devices with 'lsusb':

Bus 001 Device 010: ID 045e:02b0 Microsoft Corp. Xbox NUI Motor
Bus 001 Device 017: ID 045e:02ad Microsoft Corp. Xbox NUI Audio
Bus 001 Device 018: ID 045e:02ae Microsoft Corp. Xbox NUI Camera

The problem I have is with turtlebot_calibration. I get the following output:

-------------------------------------------------------------------------
turtlebot@turtlebot ~ $ roslaunch turtlebot_calibration calibrate.launch
Checking log directory for disk usage. This may take awhile.
Press Ctrl-C to interrupt
Done checking log file disk usage. Usage is <1GB.

started roslaunch server http;//192.168.0.38;56954/

SUMMARY
========

PARAMETERS
 * /kinect_laser/max_height
 * /kinect_laser/min_height
 * /kinect_laser/output_frame_id
 * /kinect_laser_narrow/max_height
 * /kinect_laser_narrow/min_height
 * /kinect_laser_narrow/output_frame_id
 * /openni_launch/debayering
 * /openni_launch/depth_frame_id
 * /openni_launch/depth_mode
 * /openni_launch/depth_registration
 * /openni_launch/depth_time_offset
 * /openni_launch/image_mode
 * /openni_launch/image_time_offset
 * /openni_launch/rgb_frame_id
 * /pointcloud_throttle/max_rate
 * /rosdistro
 * /rosversion
 * /scan_to_angle/max_angle
 * /scan_to_angle/min_angle

NODES
  /
    kinect_breaker_enabler (turtlebot_node/kinect_breaker_enabler.py)
    kinect_laser (nodelet/nodelet)
    kinect_laser_narrow (nodelet/nodelet)
    openni_launch (nodelet/nodelet)
    openni_manager (nodelet/nodelet)
    pointcloud_throttle (nodelet/nodelet)
    scan_to_angle (turtlebot_calibration/scan_to_angle.py)
    turtlebot_calibration (turtlebot_calibration/calibrate.py)

ROS_MASTER_URI=http;//192.168.0.38;11311

core service [/rosout] found
Exception AttributeError: AttributeError("'_DummyThread' object has no attribute '_Thread__block'",) in <module 'threading' from '/usr/lib/python2.7/threading.pyc'> ignored
process[kinect_breaker_enabler-1]: started with pid [2132]
Exception AttributeError: AttributeError("'_DummyThread' object has no attribute '_Thread__block'",) in <module 'threading' from '/usr/lib/python2.7/threading.pyc'> ignored
process[openni_manager-2]: started with pid [2133]
Exception AttributeError: AttributeError("'_DummyThread' object has no attribute '_Thread__block'",) in <module 'threading' from '/usr/lib/python2.7/threading.pyc'> ignored
process[openni_launch-3]: started with pid [2139]
[ INFO] [1360034582.865846913]: Initializing nodelet with 2 worker threads.
Exception AttributeError: AttributeError("'_DummyThread' object has no attribute '_Thread__block'",) in <module 'threading' from '/usr/lib/python2.7/threading.pyc'> ignored
process[pointcloud_throttle-4]: started with pid [2199]
Exception AttributeError: AttributeError("'_DummyThread' object has no attribute '_Thread__block'",) in <module 'threading' from '/usr/lib/python2.7/threading.pyc'> ignored
process[kinect_laser-5]: started with pid [2218]
Exception AttributeError: AttributeError("'_DummyThread' object has no attribute '_Thread__block'",) in <module 'threading' from '/usr/lib/python2.7/threading.pyc'> ignored
process[kinect_laser_narrow-6]: started with pid [2240]
Exception AttributeError: AttributeError("'_DummyThread' object has no attribute '_Thread__block'",) in <module 'threading' from '/usr/lib/python2.7/threading.pyc'> ignored
process[scan_to_angle-7]: started with pid [2264]
Exception AttributeError: AttributeError("'_DummyThread' object has no attribute '_Thread__block'",) in <module 'threading' from '/usr/lib/python2.7/threading.pyc'> ignored
process[turtlebot_calibration-8]: started with pid [2266]
[kinect_breaker_enabler-1] process has finished cleanly
log file: /home/turtlebot/.ros/log/0f317c9e-6f42-11e2-a312-74f06d7d6e3b/kinect_breaker_enabler-1*.log
[ INFO] [1360034585.493648021]: [/openni_launch] Number devices connected: 1
[ INFO] [1360034585.494195015]: [/openni_launch] 1. device on bus 001:18 is a Xbox NUI Camera (2ae) from Microsoft (45e) with serial id 'A00366910379111A'
[ WARN] [1360034585.498586615]: [/openni_launch] device_id is not set! Using first device.
[ INFO ...
(more)
2014-01-28 17:29:43 -0500 marked best answer ROS Groovy and Create based TurtleBot dashboard

With ROS Groovy and Ubuntu 12.04 LTS on a Create based TurtleBot, I use the following to bring up the TurtleBot:

roslaunch turtlebot_bringup minimal.launch

I then use the following to bring up the dashboard (I can do this on the robot itself or on a workstation with the ROS_MASTER_URI and ROS_HOSTNAME properly set).

rqt -s create_dashboard

The "create_dashboard" comes up, but unfortunately doesn't seem to work as it did in Fuerte. If I had to guess, it looks like it's reporting Kabuki based information, although I have the Create base and I'm calling "create_dashboard". However, this is just a guess on my part. The information in the "Robot Monitor" window is:

Error Device Message /Input Ports Stale /Kobuki Stale /Sensors Stale

Unfortuantely, my silly karma is insufficient to post a link to how the dashboard looks, but the following may work.

http-colon-//i50.tinypic.com/2j2damf.jpg

It seems strange to me to see the "Kobuki" device -- as if the dashboard is somehow configured to look for Kobuki devices.

Has anyone actually got a Create based TurtleBot running with Groovy? I assume so since there are so many of them out in the wild. And if so, what needs to be configured to get correctly get the dashboard working with the Create devices rather than Kobuki devices.

2013-11-26 06:28:15 -0500 received badge  Notable Question (source)
2013-08-24 17:48:45 -0500 asked a question ROSJava -- Parameters and knowing their types ahead of time?

I'm working on updating some old ROSSerial classes to work with the latest version of ROSJava under Groovy. To add support for parameters, I'm looking at the ParameterTree interface and it appears that one must know what the parameter type is before retrieving it -- getBoolean(), getInteger(), getDouble(), getString(), etc... Unfortunately, with ROSSerial only the name is passed up from the attached client and I don't know the type of the object prior to getting it from the ParameterTree. Can anyone suggest a way around this?

Looking at the implementation of DefaultParameterTree it appears that the XML RPC interfaces get a generic Object and then cast it as needed to support the API. It would be nice if the ParameterTree api included the option of returning the generic Object and then reflection could be used to cast the object to appropriate type for serialization to the ROSSerial client.

2013-07-23 22:24:58 -0500 answered a question Please suggest the learning material for C++ and python in context to ROS?

For the Python side of things, I recently needed to come up to speed pretty quickly with the Python syntax to better be able to make out the ROS examples in the language. I found a bunch of Python tutorials on YouTube, but I settled on the videos of the 2-day Python class given by Nick Parlante at Google for their employees:

http://www.youtube.com/watch?v=tKTZoB2Vjuk

It takes about 5 hours to sit through all the videos, but Nick is pretty good instructor and the class moves a long at a pretty good clip so you won't get bored if you are already generally familiar with basic programming concepts.

This class won't teach you everything about Python, but for the things that you didn't learn you be well prepared to then pick up the missing pieces from many of the Python programming books.

2013-07-23 14:12:36 -0500 received badge  Popular Question (source)