2017-05-28 00:31:22 -0500 | received badge | ● Famous Question
(source)
|
2017-02-12 15:48:09 -0500 | received badge | ● Taxonomist
|
2016-09-04 05:49:20 -0500 | received badge | ● Famous Question
(source)
|
2016-02-11 14:27:34 -0500 | received badge | ● Famous Question
(source)
|
2016-01-15 11:57:24 -0500 | received badge | ● Notable Question
(source)
|
2015-12-10 23:37:16 -0500 | received badge | ● Notable Question
(source)
|
2015-08-27 04:02:58 -0500 | received badge | ● Popular Question
(source)
|
2015-08-26 09:31:32 -0500 | asked a question | ekf angle estimation Hello everyone!
My setup is ROS Jade, Ubuntu Trusty
I am currently using a 2 wheeled robot that is driving a full circle or a straight line, for calibrating purposes.
The available sensors are: wheel encoders and gyro. I now fuse linear velocity and yaw velocity in the ekf_localization_node via a TwistWithCovarianceStamped message.
First I ignored yaw velocity to determine the gain of the wheel encoders. It works just fine since when I rostopic echo /odometry/filtered I actually see that the robot followed a 5.5 m straight line. Now, when i also fuse yaw velocity I have some issues.Although the robot is supposed to drive 2pi counter-clockwise, what happens is that after being filtered, the estimated orientation (following z axis) is between 1 and -1 when I determined the gain. To determine the gain I just assumed that the total number of impulses output to the gyro between the beginning and the end equals 2pi (6.28). Did I make a mistake? Here is my launchfile: <!-- Launch file for ekf_localization_node -->
<launch> <!-- This node will take in measurements from odometry, IMU, stamped pose, and stamped twist messages. It tracks
the state of the robot, with the state vector being defined as X position, Y position, Z position,
roll, pitch, yaw, their respective velocites, and linear acceleration. Units for all measurements are assumed
to conform to the SI standard as specified in REP-103. -->
<node pkg="robot_localization" type="ekf_localization_node" name="ekf_localization" clear_params="true">
<!-- ======== STANDARD PARAMETERS ======== -->
<!-- The frequency, in Hz, at which the filter will output a position estimate. Note that
the filter will not begin computation until it receives at least one message from
one of the inputs. It will then run continuously at the frequency specified here,
regardless of whether it receives more measurements. Defaults to 30 if unspecified. -->
<param name="frequency" value="20"/>
<!-- The period, in seconds, after which we consider a sensor to have timed out. In this event, we
carry out a predict cycle on the EKF without correcting it. This parameter can be thought of
as the minimum frequency with which the filter will generate new output. Defaults to 1 / frequency
if not specified. -->
<param name="sensor_timeout" value="0.06"/>
<!-- If this is set to true, no 3D information will be used in your state estimate. Use this if you
are operating in a planar environment and want to ignore the effect of small variations in the
ground plane that might otherwise be detected by, for example, an IMU. Defaults to false if
unspecified. -->
<param name="two_d_mode" value="true"/>
<!-- REP-105 (http://www.ros.org/reps/rep-0105.html) specifies three principal coordinate frames: map,
odom, and base_link. base_link is the coordinate frame that is affixed to the robot. The robot's
position in the odom frame will drift over time, but is accurate in the short term and should be
continuous. The odom frame is therefore the best frame for executing local motion plans. The map
frame, like the odom frame, is a world-fixed coordinate frame ... (more) |
2015-08-26 06:46:17 -0500 | commented question | tune efk_localization_node sorry I gave up a bit on this. I will create a new question since I integrated all that in a TwistWithCovarianceStamped message |
2015-08-24 18:10:11 -0500 | received badge | ● Popular Question
(source)
|
2015-08-21 08:46:05 -0500 | asked a question | tune efk_localization_node Hello everyone,
first, here is my setup: Ubuntu 14.04 + ROS Jade I simulated a two-wheeled robot driving circles, its width is 1m20, the radius of its wheels is 30 cm.
It means that both the linear velocity (following the x-axis) and the angular velocity (following the z-axis) are always constant in this case. Actually, I fused the data into the ekf_localization_node using a TwistWithCovarianceStamped message (published in the "odom" frame) and thanks to this launchfile: <!-- Launch file for ekf_localization_node -->
<launch> <node pkg="robot_localization" type="ekf_localization_node" name="ekf_localization" clear_params="true">
<!-- ======== STANDARD PARAMETERS ======== -->
<param name="frequency" value="20"/>
<param name="sensor_timeout" value="0.06"/>
<param name="two_d_mode" value="true"/>
<!-- Defaults to "odom" if unspecified -->
<param name="odom_frame" value="odom"/>
<!-- Defaults to "base_link" if unspecified -->
<param name="base_link_frame" value="base_link"/>
<!-- Defaults to the value of "odom_frame" if unspecified -->
<param name="world_frame" value="odom"/>
<param name="transform_time_offset" value="0.0"/>
<param name="twist0" value="/turtle1/cmd_vel"/>
<rosparam param="twist0_config">[false, false, false,
false, false, false,
true, true, false,
false, false, true,
false, false, false]</rosparam>
<param name="print_diagnostics" value="true"/>
<param name="twist0_queue_size" value="2"/>
<param name="debug" value="false"/>
<param name="debug_out_file" value="debug_ekf_localization.txt"/>
<rosparam param="process_noise_covariance">[0.05, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0.05, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0.06, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0.03, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0.03, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0.06, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0.025, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0.025, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0.08, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.015]</rosparam>
<rosparam param="initial_estimate_covariance">[1e-9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 1e-9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 1e-9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 1e-9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ... (more) |
2015-08-11 03:38:47 -0500 | received badge | ● Enthusiast
|
2015-08-04 03:53:23 -0500 | commented answer | ekf_localization_node no output Thanks, now it does work, I have outuput to my Kalman filter with a TwistWithCovarianceStamped message as input.
Now, I'll consider a more complex model for two wheeled robot navigation thanks to this ekf_localization_node. |
2015-08-04 03:30:18 -0500 | received badge | ● Scholar
(source)
|
2015-07-30 02:50:34 -0500 | received badge | ● Notable Question
(source)
|
2015-07-29 09:30:45 -0500 | received badge | ● Popular Question
(source)
|
2015-07-29 09:03:44 -0500 | answered a question | ekf_localization_node no output here you will find one example of a TwistWithCovarianceStamped message published over the topic /twist_input1
as input for the ekf_localization_node header:
seq: 534
stamp:
secs: 1438178264
nsecs: 22708520
frame_id: odom
twist:
twist:
linear:
x: 1.641866
y: 1.472035
z: 0.0
angular:
x: 0.0
y: 0.0
z: 0.2307692
covariance: [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
2015-07-29 08:13:21 -0500 | received badge | ● Editor
(source)
|
2015-07-29 08:02:12 -0500 | commented answer | ekf_localization_node no output Thanks for your answer.
I edited the question (sorry for my mistake) and set the differential and relative parameters to false.
It still doesn't work. Any other idea? |
2015-07-29 07:52:42 -0500 | received badge | ● Supporter
(source)
|
2015-07-29 07:36:08 -0500 | asked a question | ekf_localization_node no output Hello everyone
I am a beginner with ROS, and want to test things with the ekf_localization_node
(I use ROS Jade and Ubuntu 14.04) So, I simulated a 2-wheeled robot in a 2D environment in Matlab.
Typically, a robot that goes away from its charging station to reach a target.
Now, I want to test the ekf_localization node to implement it soon on hardware(mobile robot with wheel encoders and gyro output signals), after I know it is at least possible I extracted log files from my simulation (equivalent to odometry): x velocity, y velocity and yaw velocity. image: --> it was converted into a geometry_msgs/TwistWithCovarianceStamped to test it with the ekf_localization_node.
Here is my launchfile <launch> <node pkg="robot_localization" type="ekf_localization_node" name="ekf_localization" clear_params="true">
<param name="frequency" value="20"/>
<param name="sensor_timeout" value="0.06"/>
<param name="two_d_mode" value="true"/>
<!-- Defaults to "odom" if unspecified -->
<param name="odom_frame" value="odom"/>
<!-- Defaults to "base_link" if unspecified -->
<param name="base_link_frame" value="base_link"/>
<!-- Defaults to the value of "odom_frame" if unspecified -->
<param name="world_frame" value="odom"/>
<param name="twist0" value="/twist_input1"/>
<param name="transform_time_offset" value="0.0"/>
<rosparam param="twist0_config">[false, false, false,
false, false, false,
true, true, false,
false, false, true,
false, false, false]</rosparam>
<param name="twist0_differential" value="true"/>
<param name="twist0_relative" value="true"/>
<param name="print_diagnostics" value="true"/>
<!-- ======== ADVANCED PARAMETERS ======== -->
<param name="twist0_queue_size" value="2"/>
<param name="debug" value="false"/>
<!-- Defaults to "robot_localization_debug.txt" if unspecified. -->
<param name="debug_out_file" value="debug_ekf_localization.txt"/>
<rosparam param="process_noise_covariance">[0.05, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0.05, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0.06, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0.03, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0.03, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0.06, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0.025, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0.025, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0.04, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.02, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.01, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0.015]</rosparam>
<rosparam param="initial_estimate_covariance">[1e-9, 0, 0, 0, 0, 0, 0, 0, 0 ... (more) |