Quantcast
Channel: ROS Answers: Open Source Q&A Forum - RSS feed
Viewing all 844 articles
Browse latest View live

problem with tf tree, robot_pose_ekf, odom_combined

$
0
0
Hello, I've been working with a turtlebot with a kobuki base , i'm trying to use robot_pose_ekf but i found a tf problem, in this case base_footprint will have 2 parents (odom_combined published by robot_pose_ekf node and odom published by nodelet_manager node) So how can i resolve this problem, should i change some parameters in launch files? Any help please

Calculating with TF/TF2

$
0
0
Hi, Currently I have a two interactive markers in the map frame. Now I want to the coordinates of a point on the line between them with a distance x from one of those points. Can TF/TF2 do that, if yes, how? Or do I have to do that myself? Do I have to publish tf messages or can I calculate with non-published transforms internally somehow?

Does tf.lookupTransform (python) take time to fire up?

$
0
0
Hi there, I have an issue I don't understand with tf in Python. Consider this code: import rospy, tf rospy.init_node('test') l = tf.TransformListener() # rospy.sleep(0.5) # l.waitForTransform('BODY', 'manipulation_marker', rospy.Time(0), rospy.Time(10)) print l.lookupTransform('BODY', 'manipulation_marker', rospy.Time(0)) When I run it, I get a LookupException: LookupException: "BODY" passed to lookupTransform argument target_frame does not exist. But if I uncomment the sleep() before the lookupTransform, it works fine. So, I was thinking I could use the waitForTransform() function to replace this sleep() and get the transform as soon as it is available. (Next commented line.) But it doesn't work either and I get a generic Exception() with no error message! To give you more information about my TF, here is the output from tf_monitor: RESULTS: for BODY to manipulation_marker Chain is: * -> * -> * -> BODY Net delay avg = 0.0424558: max = 0.0998758 All Broadcasters: Node: unknown_publisher 111.186 Hz, Average Delay: -0.221831 Max Delay: 0.0471964 What should I do here to get the transform as soon as it is available?

TF tutorial crash

$
0
0
I'm following this tutorial http://www.ros.org/wiki/tf/Tutorials/Introduction%20to%20tf The last step in the launch file systematically fails: [turtle_pointer-6] process has died [pid 4833, exit code 1, cmd /opt/ros/fuerte/stacks/geometry_tutorials/turtle_tf/nodes/turtle_tf_listener.py __name:=turtle_pointer __log:=/home/erupter/.ros/log/a1d3b986-354a-11e2-9db2-d49a205b33a5/turtle_pointer-6.log]. log file: /home/erupter/.ros/log/a1d3b986-354a-11e2-9db2-d49a205b33a5/turtle_pointer-6*.log here is the log content [rospy.client][INFO] 2012-11-23 09:49:05,206: init_node, name[/turtle_pointer], pid[4833] [xmlrpc][INFO] 2012-11-23 09:49:05,207: XML-RPC server binding to 0.0.0.0 [xmlrpc][INFO] 2012-11-23 09:49:05,207: Started XML-RPC server [http://FCD-04-Ubuntu:38834/] [rospy.init][INFO] 2012-11-23 09:49:05,207: ROS Slave URI: [http://FCD-04-Ubuntu:38834/] [rospy.impl.masterslave][INFO] 2012-11-23 09:49:05,208: _ready: http://FCD-04-Ubuntu:38834/ [xmlrpc][INFO] 2012-11-23 09:49:05,208: xml rpc node: starting XML-RPC server [rospy.registration][INFO] 2012-11-23 09:49:05,209: Registering with master node http://localhost:11311 [rospy.init][INFO] 2012-11-23 09:49:05,308: registered with master [rospy.rosout][INFO] 2012-11-23 09:49:05,308: initializing /rosout core topic [rospy.rosout][INFO] 2012-11-23 09:49:05,313: connected to core topic /rosout [rospy.simtime][INFO] 2012-11-23 09:49:05,316: /use_sim_time is not set, will not subscribe to simulated time [/clock] topic [rospy.internal][INFO] 2012-11-23 09:49:05,331: topic[/tf] adding connection to [http://FCD-04-Ubuntu:42239/], count 0 [rospy.internal][INFO] 2012-11-23 09:49:05,501: topic[/rosout] adding connection to [/rosout], count 0 [rospy.internal][INFO] 2012-11-23 09:49:05,536: topic[/tf] adding connection to [http://FCD-04-Ubuntu:50740/], count 1 [rospy.core][INFO] 2012-11-23 09:49:05,574: signal_shutdown [atexit] [rospy.internal][INFO] 2012-11-23 09:49:05,577: topic[/rosout] removing connection to /rosout [rospy.internal][INFO] 2012-11-23 09:49:05,578: topic[/tf] removing connection to http://FCD-04-Ubuntu:42239/ [rospy.internal][INFO] 2012-11-23 09:49:05,578: topic[/tf] removing connection to http://FCD-04-Ubuntu:50740/ [rospy.impl.masterslave][INFO] 2012-11-23 09:49:05,578: atexit So I edited in the launch file the last node and removed the .py from turtle_tf_listener.py This way it doesn't crash anymore but I have these [ INFO] [1353660856.840262559]: waitForService: Service [/spawn] has not been advertised, waiting... [ INFO] [1353660856.928373839]: waitForService: Service [/spawn] is now available. [ERROR] [1353660857.031546679]: Frame id /turtle2 does not exist! Frames (1): and I can't get past this. Also why when I use a launch file my master is not accessible from other terminals as it always is? Meaning that when I launch this launch file, open another terminal for example to use rxgraph, this can't find the master although it's at the usual URI http://localhost:11311

problem with hector slam

$
0
0
HI All, I'm hoping someone might be able to help. I've been trying to get gmapping working ut the update rates was incredibly slow (~5 seconds from moving the robot to the map moving) so I'm giving the hector slam ago. This problem must be due to the tf I'm publishing, I'm just not sure what hector slam actually needs me to publish vs what is will publish for itself. I'm starting it with the standard (i.e. I've changed nothing): roslaunch hector_slam_launch tutorial.launch I'm have made the tf as simple as possible ![image description](/upfiles/14299479048494689.png) And my system graph looks like: ![image description](/upfiles/14299478468475773.png) Hector slam doesn't seem to be doing anything. All I get printed out is: process[rviz-1]: started with pid [8374] process[hector_mapping-2]: started with pid [8375] process[hector_trajectory_server-3]: started with pid [8379] process[hector_geotiff_node-4]: started with pid [8383] [ INFO] [1429946593.528284272]: Waiting for tf transform data between frames /map and scanmatcher_frame to become available [ INFO] [1429946594.644483794]: Successfully initialized hector_geotiff MapWriter plugin TrajectoryMapWriter. [ INFO] [1429946594.644839942]: Geotiff node started HectorSM map lvl 0: cellLength: 0.05 res x:2048 res y: 2048 HectorSM map lvl 1: cellLength: 0.1 res x:1024 res y: 1024 [ INFO] [1429946598.082143817]: HectorSM p_base_frame_: base_footprint [ INFO] [1429946598.082288732]: HectorSM p_map_frame_: map [ INFO] [1429946598.082325095]: HectorSM p_odom_frame_: nav [ INFO] [1429946598.082375357]: HectorSM p_scan_topic_: scan [ INFO] [1429946598.082410037]: HectorSM p_use_tf_scan_transformation_: true [ INFO] [1429946598.082460158]: HectorSM p_pub_map_odom_transform_: true [ INFO] [1429946598.082495348]: HectorSM p_scan_subscriber_queue_size_: 5 [ INFO] [1429946598.082536563]: HectorSM p_map_pub_period_: 2.000000 [ INFO] [1429946598.082575411]: HectorSM p_update_factor_free_: 0.400000 [ INFO] [1429946598.082610219]: HectorSM p_update_factor_occupied_: 0.900000 [ INFO] [1429946598.082670763]: HectorSM p_map_update_distance_threshold_: 0.400000 [ INFO] [1429946598.082713224]: HectorSM p_map_update_angle_threshold_: 0.060000 [ INFO] [1429946598.082752979]: HectorSM p_laser_z_min_value_: -1.000000 [ INFO] [1429946598.082792572]: HectorSM p_laser_z_max_value_: 1.000000 [ WARN] [1429946613.537432314]: No transform between frames /map and scanmatcher_frame available after 20.009908 seconds of waiting. This warning only prints once. If anyone could advise on what I need to correct I'd be most grateful Kind Regards Mark

tranformation using static publisher and listener

$
0
0
Hi, If I have two frames I want to do transformation.. in my code i have the following: void laserCallback (const sensor_msgs::LaserScan::ConstPtr& scan_in) { double t1 = ros::Time::now().toSec() ; //std::cout<<"LASER" << scan_in->header.frame_id << std::endl ; if(!listener_.waitForTransform(scan_in->header.frame_id, "/uav/baselink_ENU", scan_in->header.stamp + ros::Duration().fromSec(scan_in->ranges.size()*scan_in->time_increment), ros::Duration(1.0))) { std::cout << "RETURN" << std::endl ; return; } sensor_msgs::PointCloud msg; // Which one of the follwoing should I use ? //projector_.projectLaser(*scan_in, msg); //projector_.transformLaserScanToPointCloud("/uav/baselink_ENU",*scan_in, msg,listener_); } Is this part needed if I have a static transformation : if(!listener_.waitForTransform(scan_in->header.frame_id, "/uav/baselink_ENU", scan_in->header.stamp + ros::Duration().fromSec(scan_in->ranges.size()*scan_in->time_increment), ros::Duration(1.0))) { std::cout << "RETURN" << std::endl ; return; } I mean is it enough to have a static tf publisher and the following line ? projector_.transformLaserScanToPointCloud("/uav/baselink_ENU",*scan_in, msg,listener_);

transform laser data to pointcloud usig tf transform without static transformation

$
0
0
Hello, I have a laser that I connected it up-side-down with the quadrotor. The quadrotor system gives me the child base_link frame to the parent world frame. When I run hokyou node, the /scan topic which has a laserScan data that are registered with laser frame as a frame id. Now when I read the laser data from the topic /scan and I use the following transformation: void laserCallback (const sensor_msgs::LaserScan::ConstPtr& scan_in) { double t1 = ros::Time::now().toSec() ; //std::cout<<"LASER" << scan_in->header.frame_id << std::endl ; if(!listener_.waitForTransform(scan_in->header.frame_id, "/uav/baselink_ENU", scan_in->header.stamp + ros::Duration().fromSec(scan_in->ranges.size()*scan_in->time_increment), ros::Duration(1.0))) { std::cout << "RETURN" << std::endl ; return; } sensor_msgs::PointCloud msg; //projector_.projectLaser(*scan_in, msg); projector_.transformLaserScanToPointCloud("/uav/baselink_ENU",*scan_in, msg,listener_); } Does this directly transform the scaned data into xs and ys to the base_link frame or I should use static transformation?

urdf in rviz is too deep

$
0
0
Hi, I setup my robot system and its working good. I am using hector mapping with urdf and a laserscanner and I am getting the following result: ![image description](/upfiles/1430385843616846.png) I dont know why exactly the robot is kind of swimming in the world, here is my tf tree: ![image description](/upfiles/14303859142285894.png) Another Question is now, how can I make the Robot move autonomously and how can I integrate a path planner? What is a common used module to make the robot move and avoid obstacles and crashes? thanks in advance, felix

Gmapping and TF frames

$
0
0
Hello, I'm using Ubuntu 14.04 and ROS indigo I published base_link>camera_link frames using static_transform_publisher as follows: Then, when I started slam_gmapping it gives the following error: Laser has to be mounted planar! Z-coordinate has to be 1 or -1, but gave: 0.00000 This is solved when I change X value to 0 in the transformation as follows: But this doesn't reflect my robot's situation correctly. Also, I noticed in rviz that camera_depth_optical_frame and camera_rgb_optical_frame frames are upside down (as in the picture) and it is also upside down when I change the X value to 0. Is this normal? ![image description](/upfiles/14303931765898081.png)

Using the estimated robot pose from robot_pose_ekf with amcl

$
0
0
Hi all, I am using [robot_pose_ekf](http://wiki.ros.org/robot_pose_ekf) to fuse data from Wheel encoders and IMU to estimate the 3D pose of the robot. Then, I am using [amcl](http://wiki.ros.org/amcl) to take care of odometry drift and finally the [move_base](http://wiki.ros.org/move_base) package does the navigation. I am generating the odom message of the type `nav_msgs/Odometry` from the wheel encoders which is used by the [base_local_planner](http://wiki.ros.org/base_local_planner?distro=indigo). I know robot_pose_ekf provides odom_combined to base_link transformation which is used by amcl. My question is once robot_pose_ekf fuses the data from wheel encoders and IMU and generates the estimated 3D pose of the robot of the type `geometry_msgs/PoseWithCovarianceStamped` on the topic `robot_pose_ekf/odom_combined`, how and where is this output used in the navigation package as a whole (move_base or amcl)? Thanks in advance. Naman Kumar

robot_base_frame parameter in move_base

$
0
0
Hi all, I have a mobile robot with IMU, wheel encoders and hokuyo laser. I am following [this](http://answers.ros.org/question/11682/robot_pose_ekf-with-an-external-sensor/) to set up the transformations and all the frames. I am using robot_pose_ekf to fuse data from IMU and wheel encoders and get the `odom_combined -> base_footprint` transformation. As suggested in the above link, in wheel_odometry, `odom_combined` is the header frame id and `base_footprint` is the child_frame_id and I have a fixed transformation from `base_footprint->base_link` . Now my question is what should be the robot_base_frame parameter in `global_costmap_params.yaml` and `local_costmap_params.yaml` in move_base? Should it be base_link(this is the default) or base_footprint and why? Thanks in advance. Naman Kumar

base_link to base_footprint transform ?

$
0
0
Hi, I am trying to use robot_pose_ekf for my navigation stack, I have done every thing according to [this thread](http://answers.ros.org/question/2642/robot_pose_ekf-with-an-external-sensor) but I faced a problem about my transformations! Robot_pose_ekf is publishing a base_footprint tf, but i dont know how should i connect base_link tf to base_footprint tf. what is the relation between them?

hector_slam where to put nav frame?

$
0
0
In mapping_default.launch, default "odom_frame" is "nav". And the hector_mapping node publishes transform from map to nav. If I have put nav as a parent of base_footprint with 0,0,0,0,0 transformation, the mapping runs fine. But I don't understand the reasoning behind this. Can somebody explain to me for calling odom_frame nav.

An error for publishing nav_msgs/Odometry

$
0
0
In a simulator, I am trying to write a python script which subscribe a nav_msgs/Odometry topic to add a frame between odom and base_footprint. It then also publishes another nav_msgs/Odometry topic under frame odom. The callback function for the subscriber is here: #!/usr/bin/env python import roslib roslib.load_manifest('simulator') import rospy, tf from geometry_msgs.msg import Point, Quaternion, PoseStamped from nav_msgs.msg import Odometry import xml.dom.minidom def newDataAvailable(robotPose): robotPosition=float(robotPose.pose.pose.position.x) -x, float(robotPose.pose.pose.position.y) -y,0.0 robotOrientation=robotPose.pose.pose.orientation.x, robotPose.pose.pose.orientation.y, robotPose.pose.pose.orientation.z, robotPose.pose.pose.orientation.w robotVelocity=(robotPose.twist.twist.linear.x,robotPose.twist.twist.linear.y,robotPose.twist.twist.linear.z) currentTime = rospy.Time.now() br.sendTransform(robotPosition, robotOrientation, currentTime, "base_footprint", "odom") odom = Odometry() odom.header.stamp = rospy.Time.now() odom.header.frame_id = parentFrameId odom.child_frame_id = frameId odom.pose.pose.position = robotPosition print odom.pose.pose.position odom.pose.pose.orientation = robotOrientation print "print orientation" print odom.pose.pose.orientation odom.twist.twist.linear=Point(*robotVelocity) print odom.twist odomPublisher.publish(odom) def main(): rospy.init_node('simulator_robot_tf_broadcaster') global frameId, parentFrameId, br, x, y, odomPublisher frameId = rospy.get_param("frame", "base_footprint") parentFrameId = rospy.get_param("parent_frame", "odom") robotgroundtruthTopic = "/robot_pose" rospy.Subscriber(robotgroundtruthTopic, Odometry, newDataAvailable) odomPublisher=rospy.Publisher("/base_pose_ground_truth", Odometry, 10) scene_file_param=rospy.get_param("/scene_file", "scene.xml") dom = xml.dom.minidom.parse(scene_file_param) root = dom.documentElement itemlist = dom.getElementsByTagName('agent') for i in itemlist: pn = i.getAttribute("type") if pn=="2": # robot:2 print "I got the robot's initial postion" x = i.getAttribute("x") #print x y = i.getAttribute("y") #print y br = tf.TransformBroadcaster() x=float(x) y=float(y) print x,y rospy.spin() if __name__ == '__main__': main() When I run it, an error comes out: File "/opt/ros/hydro/lib/python2.7/dist-packages/nav_msgs/msg/_Odometry.py", line 161, in serialize buff.write(_struct_7d.pack(_x.pose.pose.position.x, _x.pose.pose.position.y, _x.pose.pose.position.z, _x.pose.pose.orientation.x, _x.pose.pose.orientation.y, _x.pose.pose.orientation.z, _x.pose.pose.orientation.w)) AttributeError: 'tuple' object has no attribute 'x' All print functions work fine. However, no message outputs from topic "/base_pose_ground_truth" EDIT1: I modified some places of code as: robotPosition=robotPose.pose.pose.position.x - x, robotPose.pose.pose.position.y-y, 0.0 robotOrientation=(robotPose.pose.pose.orientation.x, robotPose.pose.pose.orientation.y, robotPose.pose.pose.orientation.z, robotPose.pose.pose.orientation.w) robotVelocity=(robotPose.twist.twist.linear.x,robotPose.twist.twist.linear.y,robotPose.twist.twist.linear.z) currentTime = rospy.Time.now() br.sendTransform(robotPosition, robotOrientation, currentTime, "base_footprint", "odom") odom = Odometry() odom.header.stamp = rospy.Time.now() odom.header.frame_id = parentFrameId odom.child_frame_id = frameId odom.pose.pose.position = Point(*robotPosition) odom.pose.pose.orientation =Quaternion(*robotOrientation) odom.twist.twist.linear=Point(*robotVelocity) odomPublisher.publish(odom) Then above error(simplified) disappears. Message output from topic "/base_pose_ground_truth" also but in a lower speed comparing to topic "/robot_pose"( why?) However, as it is mentioned before, the above node adds a frame between "odom" and "base_footprint". Then this node is connected to [fakelocalization](http://wiki.ros.org/fake_localization). But, the link between map and odom doesn't constructed by fakelocalization successfully. And an warning comes out: [WARN] [WallTime: 1430749249.205509] Inbound TCP/IP connection failed: 'int' object has no attribute 'peer_subscribe' Please tell me the reason why. Thank you!

Add a tf frame in a simulator

$
0
0
Hi, all. I want to add a frame between "odom" and "base_footprint" in a simulator by imitating [navigation_stage](http://wiki.ros.org/navigation_stage). Then it is connected to [fakelocalization](http://wiki.ros.org/fake_localization). In this way, the tf tree for this simulator is constructed. It is a python script which subscribes a "/robot_pose" topic to compute the transform between odom and base_footprint, then it publishes another "/base_pose_ground_truth" topic under frame "/odom". The codes of the script are listed below. #!/usr/bin/env python import roslib roslib.load_manifest('simulator') import rospy, tf from geometry_msgs.msg import Point, Quaternion, PoseStamped from nav_msgs.msg import Odometry import xml.dom.minidom def newDataAvailable(robotPose): robotPosition=robotPose.pose.pose.position.x - x, robotPose.pose.pose.position.y-y, 0.0 robotOrientation=(robotPose.pose.pose.orientation.x, robotPose.pose.pose.orientation.y, robotPose.pose.pose.orientation.z, robotPose.pose.pose.orientation.w) robotVelocity=(robotPose.twist.twist.linear.x,robotPose.twist.twist.linear.y,robotPose.twist.twist.linear.z) currentTime = rospy.Time.now() br.sendTransform(robotPosition, robotOrientation, currentTime, "base_footprint", "odom") odom = Odometry() odom.header.stamp = rospy.Time.now() odom.header.frame_id = parentFrameId odom.child_frame_id = frameId odom.pose.pose.position = Point(*robotPosition) odom.pose.pose.orientation =Quaternion(*robotOrientation) odom.twist.twist.linear=Point(*robotVelocity) odomPublisher.publish(odom) def main(): rospy.init_node('simulator_robot_tf_broadcaster') global frameId, parentFrameId, br, x, y, odomPublisher frameId = rospy.get_param("frame", "base_footprint") parentFrameId = rospy.get_param("parent_frame", "odom") robotgroundtruthTopic = "/robot_pose" rospy.Subscriber(robotgroundtruthTopic, Odometry, newDataAvailable) odomPublisher=rospy.Publisher("/base_pose_ground_truth", Odometry, 1) scene_file_param=rospy.get_param("/scene_file", "scene.xml") dom = xml.dom.minidom.parse(scene_file_param) root = dom.documentElement itemlist = dom.getElementsByTagName('agent') for i in itemlist: pn = i.getAttribute("type") if pn=="2": # robot:2 print "I got the robot's initial postion" x = i.getAttribute("x") #print x y = i.getAttribute("y") #print y br = tf.TransformBroadcaster() x=float(x) y=float(y) rospy.set_param("/fake_localization/delta_x",-x) rospy.set_param("/fake_localization/delta_y",-y) print x,y rospy.spin() if __name__ == '__main__': main() When I run it, all coordinates works as expected. However, there exists serious delay for computing tf. In rviz, the TF tree doesn't displayed in real-time. For example, the displayed coordinate "base_footprint" in rviz is "following" the robot ( I am quite sure that this is time delay, not the transform error in distance, because the displayed "base_footprint" axes can get the robot's position). And an warning comes out all the time: [WARN] [WallTime: 1430749249.205509] Inbound TCP/IP connection failed: 'int' object has no attribute 'peer_subscribe' Another phenomenon is the message outputing from topic "/base_pose_ground_truth" is in a lower speed comparing to topic "/robot_pose"( why?) Please tell me the reason why. Thank you!

rviz don't follow the tf configuration of the .rviz file

$
0
0
Hello! My problem is that I want to display some of the TF and hide others. I can do it by selecting what I want by hand, but if I want to save it in a .rviz file and launching it with `rosrun rviz rviz -d my_config.rviz`, it display all my tf. The .rviz file is well saved, here is an abstract of the /TF class in the my_config.rviz : Visualization Manager: Class: "" Displays: - Alpha: 0.5 Cell Size: 1 Class: rviz/Grid Color: 160; 160; 164 Enabled: true Line Style: Line Width: 0.03 Value: Lines Name: Grid Normal Cell Count: 0 Offset: X: 0 Y: 0 Z: 0 Plane: XY Plane Cell Count: 10 Reference Frame: Value: true - Class: rviz/TF Enabled: true Frame Timeout: 15 Frames: All Enabled: false WheelFL_link: Value: false WheelFR_link: Value: false ar_marker_1: Value: true "my_config.rviz" is the right one loaded ( I tried to add and remove a display type to be sure ), and I am using the rviz version 1.11.7 (indigo), Compiled against OGRE version 1.8.1 (Byatis).

Problem mixing lidar bag with live tf

$
0
0
During development, I am trying to replay lidar data from a bag file and combine it with simulated new robot positions, generated during the simulation run. The lidar data I recorded a few weeks ago, and the simulated positions are computed on the fly by a controller and command based odometry nodes. However there is some problem with tf occuring, and causing assemble_scans to give no output. Assemble_scans works fine when I replay tf's recorded inside the bag together with the lidar; but not when I filter them out of the bag file and play my live versions. (I'm running in simtime mode.) I found a couple of questions and answers regarding tf but nothing definitive yet. From these: is this a bug/limitation of tf itself, where it's not using ros time and using wallclock time instead? If so, is anyone working on fixing it, and are there any current workarounds? Or if not, any ideas what else could be going wrong here?

RGBDSLAM - Slow transform pub‏lishing

$
0
0
Hi there, I have the RGBD SLAM v2 package (http://felixendres.github.io/rgbdslam_v2/) running on a Core i7 computer with a Nvidia GTX 780 graphics card. The computer runs Ubuntu 12.04.5 and ROS Hydro. I want to use the package for robot localization, but it seems like I'm getting a too low pub rate of the transform. In my launch file I have: which are transforms that I need to exist for sending the pose estimation for the robot. I also have: where 'vision' is considered the base of the robot. 'till now everything is ok. The problem comes when I run the package and start processing. Using the tf view_frames, I can check the following on the tf tree: Broadcaster: /rgbdslam Average rate: 10000.000 Hz Most recent transform: 1409946186.276 Buffer length: 0.000 sec which for sure is not right, given that as said in http://answers.ros.org/question/54240/using-robot_pose_ekf-and-rgbdslam-for-path-planning-with-octomaps/?answer=54312#post-id-54312 the tf transform is being sent at a 10Hz rate supposedly, which I know it can be less, but less can't be what is in the following: (Issuing 'rosrun tf tf_monitor') Node: /rgbdslam 0.202653 Hz, Average Delay: 1.97535 Max Delay: 11.3705 Which is extremely slow! Does someone has a tip for what is happening or why is it so slow? Thanks in advance!

For frame[base_link]: No transform to fixed frame using IMU

$
0
0
Hi all, I have a mobile robot and I would like it to navigate around a room and I already have a map of the room. I am using rotary encoders for odometry. I am using [robot_pose_ekf](http://wiki.ros.org/robot_pose_ekf) to merge data from rotary encoders and IMU. I am using [amcl](http://wiki.ros.org/amcl) for localization and [move_base](http://wiki.ros.org/move_base) for planning. Now the problem is, when I set the fixed frame in RVIZ as map, the status of IMU keeps on oscillating from `Status:OK` to following: ![image description](/upfiles/14313587362713657.png) The tf tree is shown which looks good to me: [C:\fakepath\tf_tree.png](/upfiles/14313589068939156.png) **IMU part of the Code** For IMU, I am using http://wiki.ros.org/phidgets_imu and http://wiki.ros.org/imu_filter_madgwick. I am not able to figure out why is this happening because frame id of IMU is base_link and transformation exists between it and the map as can be seen in the tf tree. Does anyone have any idea as to what might be causing this? Thanks a lot. Naman Kumar

I have a question about URDF models and tf transformations

$
0
0
Hi guys, I was convinced that if one defines, let's say 2 links, in a urdf file and joins them toghether with a joint element, then the physic relations between both links is going to be recognized automatically from tf when reading (parsing) the file at the moment to start the program. So it would be possible - I thought - to listen that transformation in my C++ program. To make it clearer: I have the following urdf file (of course it is just a barebone example) ##### base_link ############################################################## ##### base_frame ############################################################## which are assembled togheter with the following joint: Ok?? Now...in my C++ program I m going to broadcast only the transformation between the frames: `/odom` and `/base_link` . See the following snippet: ... odom_transform_.header.stamp = ros::Time::now(); odom_transform_.header.frame_id = "/odom"; odom_transform_.child_frame_id = "/base_link"; ros::Rate loop( frequency_main_loop_ ); do { /* Time must be always updated */ odom_transform_.header.stamp = ros::Time::now(); /* Broadcast the position and orientation of the quadrotor */ odom_transform_.transform.translation.x = actual_pose_.position.x; odom_transform_.transform.translation.y = actual_pose_.position.y; odom_transform_.transform.translation.z = actual_pose_.position.z; odom_transform_.transform.rotation = actual_pose_.orientation; broadcaster_.sendTransform( odom_transform_ ); ros::spinOnce(); loop.sleep(); } while( ros::ok() ); ... so no transformatiions between `/base_link` and `/base_frame` are going to be published in my program since I thought that those frames are fixed and their relative position is already configured in the urdf file. Now...taking a look to the tf transformation printed in the pdf file I got confirmation that those frames are linked and recognized by tf, **BUT** I discovered that the command rosrun tf tf_echo base_link base_frame outputs the followings statements: me@YE-166:~/workspace_ros$ rosrun tf tf_echo base_link base_frame Failure at 254.547000000 Exception thrown:"base_frame" passed to lookupTransform argument source_frame does not exist. The current list of frames is: Frame base_link exists with parent odom. Failure at 254.547000000 Exception thrown:"base_frame" passed to lookupTransform argument source_frame does not exist. The current list of frames is: Frame base_link exists with parent odom. At time 256.020 - Translation: [0.000, 0.000, 0.084] - Rotation: in Quaternion [0.000, 0.000, 0.000, 1.000] in RPY [0.000, -0.000, 0.000] At time 257.020 - Translation: [0.000, 0.000, 0.084] - Rotation: in Quaternion [0.000, 0.000, 0.000, 1.000] in RPY [0.000, -0.000, 0.000] .... so it seems to me that at the beginning is the transformation not recognized. The robot move accordingly and i never suspected that I had such a problem in the tf tree. Would I never typed rosrun tf_echo... I would never discovered it. If I had manually a tf::transformation direct in the code (like in this [tutorial](http://wiki.ros.org/navigation/Tutorials/RobotSetup/TF)) I get no error message. But that's obvious since the transformation is now not given by the urdf file but from the code itself. EDIT: In my launch file I have the following robot_state_publisher: The problem persists... Anyway I would like to understand what is going on in my software. Can you help me? Thank in advance and bye!!!
Viewing all 844 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>