Everything concerning your robot's model and description is located, as per
ROS standards, in a package named ` /MYROBOT_description ` and all the world
files and launch files used with Gazebo is located in a ROS package named `
/MYROBOT_gazebo ` . Replace 'MYROBOT' with the name of your bot in lower case
letters. With these two packages, your hierarchy should be as follows:


    $ rosparam load `rospack find baxter_description`/urdf/baxter.urdf /robot_description
    ...
    yaml.scanner.ScannerError: while scanning for the next token
    found character '\t' that cannot start any token
      in "<string>", line 34, column 1:
                <!-- note invisible -->
        ^

---

👍  1  LasseBoerresen reacted with thumbs up emoji


[ ](javascript:; "Like") 0


###  [ THOMSON TX8O7EU CRT TV - POWER-AUDIO-VIDEO&HORIZONTAL OUTPUT -
SCHEMATIC
](////electro404.rssing.com/chan-13553321/article958.html#c13553321a958i2063621701)


Yes, I also believe it's a race condition. I wouldn't recommend using the `
-unpause ` argument in the spawner, especially when spawning multiple objects.
The only thing that works reliably for me is to start Gazebo paused, wait for
everything to finish spawning, and _then_ manually unpause Gazebo (by clicking
the "start" button in the Gazebo GUI, or ` rosservice call
/gazebo/unpause_physics ` ).

---

👍  3  luisrayas3, ZitWNG, and chaoyuefei reacted with thumbs up emoji


Copy link


> Start gzserver (Gazebo Server) in debug mode using gdb (default false)


    01997
    01998       gazebo::Vector3 target_force;
    01999       gazebo::Vector3 target_torque;
    02000
    02003       reference_torque = reference_torque + reference_point.GetCrossProd(reference_force);
    02004
    02006       if (frame)
    02007       {
    02008         // FIXME
    02009         // get reference frame (body/model(body)) pose and
    02010         // transform target pose to absolute world frame
    02011         // @todo: need to modify wrench (target force and torque by frame)
    02012         //        transform wrench from reference_point in reference_frame
    02013         //        into the reference frame of the body
    02014         //        first, translate by reference point to the body frame
    02015         gazebo::Pose3d target_to_reference = frame->GetWorldPose() - body->GetWorldPose();
    02016         [ROS_DEBUG](../../../api/rosconsole/html/macros__generated_8h.html#a83228c0b42c80605abdd0f42af64b1f7)("reference frame for applied wrench: [%f %f %f, %f %f %f]-[%f %f %f, %f %f %f]=[%f %f %f, %f %f %f]",
    02017                    body->GetWorldPose().pos.x,
    02018                    body->GetWorldPose().pos.y,
    02019                    body->GetWorldPose().pos.z,
    02020                    body->GetWorldPose().rot.GetAsEuler().x,
    02021                    body->GetWorldPose().rot.GetAsEuler().y,
    02022                    body->GetWorldPose().rot.GetAsEuler().z,
    02023                    frame->GetWorldPose().pos.x,
    02024                    frame->GetWorldPose().pos.y,
    02025                    frame->GetWorldPose().pos.z,
    02026                    frame->GetWorldPose().rot.GetAsEuler().x,
    02027                    frame->GetWorldPose().rot.GetAsEuler().y,
    02028                    frame->GetWorldPose().rot.GetAsEuler().z,
    02029                    target_to_reference.pos.x,
    02030                    target_to_reference.pos.y,
    02031                    target_to_reference.pos.z,
    02032                    target_to_reference.rot.GetAsEuler().x,
    02033                    target_to_reference.rot.GetAsEuler().y,
    02034                    target_to_reference.rot.GetAsEuler().z
    02035                  );
    02036         this->[transformWrench](classGazeboROSNode.html#ab198eaed8eab1ba85cdfdfb72c268150 "shift wrench from reference frame to target frame assume wrench is defined in")(target_force, target_torque, reference_force, reference_torque, target_to_reference);
    02037         [ROS_ERROR](../../../api/rosconsole/html/macros__generated_8h.html#a7fb635b03cc608284eadecd2f8becd9a)("wrench defined as [%s]:[%f %f %f, %f %f %f] --> applied as [%s]:[%f %f %f, %f %f %f]",
    02038                    frame->GetName().c_str(),
    02039                    reference_force.x,


[ ![@hsu](https://avatars.githubusercontent.com/u/138109?s=80&v=4) ](/hsu)


[ NSFW?  ](javascript:; "Mark channel Not-Safe-For-Work")


[
![@felixvd](https://avatars.githubusercontent.com/u/4535737?s=80&u=ab62e090ab2bfe181a6d95f16672111fee9df926&v=4)
](/felixvd)


#  [ Start actor trajectory from plugin
](//gazebo214.rssing.com/chan-57893035/latest-article19-live.php)


The advantage of the model database method is that now you can include your
robot directly within your world files, without using a ROS package path.
We'll use the same setup from the section "Creating a world file" but modify
the world file:


[ ](//www.rssing.com/index.php?zw=2123 "Home") [ $ ](javascript:; "MoMoney")


* Product


    ../catkin_ws/src
        /MYROBOT_description
            package.xml
            CMakeLists.txt
            /urdf
                MYROBOT.urdf
            /meshes
                mesh1.dae
                mesh2.dae
                ...
            /materials
            /cad
        /MYROBOT_gazebo
            /launch
                MYROBOT.launch
            /worlds
                MYROBOT.world
            /models
                world_object1.dae
                world_object2.stl
                world_object3.urdf
            /materials
            /plugins


I think this issue is something about gazebo. We have some discussions at [
gazebo ](https://bitbucket.org/osrf/gazebo/issues/2504/set-model-
configuration-not-work-with) .

---

All reactions


[ ![@DangMinh24](https://avatars.githubusercontent.com/u/20850828?s=80&v=4)
](/DangMinh24)


Hi All, I'm trying to create a SDF from COLLADA files I have already. However,
the files I'm trying to link to are located in different files (I'm trying to
load a sensor on the robot). In URDFs I could use the ($find package_name)
method to get a location. How would I do that with the SDF file? This is part
of what I have right now in the SDF file.  0 0 0 0 0 0  1 1 1
package://my_package/Media/models/textured.dae  This won't link to my package.
Also, is it possible to use XACRO files with the SDF?


#  [ Explain 'Exporting model paths from a package.xml section' of 'Using
roslaunch to start Gazebo' tutorial on Gazebo-Classic
](//gazebo214.rssing.com/chan-57893035/latest-article27-live.php)


To see all of the available arguments for ` spawn_model ` including
namespaces, trimesh properties, joint positions and RPY orientation run:


[
![@davetcoleman](https://avatars.githubusercontent.com/u/561060?s=80&u=200346d5f870b7a99e0c188d7bb10b41f3635b84&v=4)
](/davetcoleman)


Hello, I am trying to insert a custom model into gazebo but most of the time
upon inserting the first model it sits on the floor and then when inserting
another of the same model nothing happens. If I select the model through the
'world' tab then gazebo freezes completely. Occasionally the object will also
fall through the floor. The same thing happens on multiple machines. Any idea
what the problem could be?


[ ](javascript:; "Ouch") 0


###  [ Epsxe On-screen Gamepad skins (For Android)
](////ngemu1.rssing.com/chan-25253293/article13362.html#c25253293a13362i1209846253)


[ Remove ADS ](//www.rssing.com/account.php?r=27)


#  [ Vibration in Gazebo model. ](//gazebo214.rssing.com/chan-57893035/latest-
article26-live.php)


Each model must have a model.config file in the model's root directory that
contains meta information about the model. Basically copy this into a
model.config file, replacing MYROBOT.urdf with your file name:


[ ↂ
](////fonts1404.rssing.com/chan-57741102/article185.html#c57741102a185i1833605640
"Pumas 2022/2023 Font \(TTF & OTF\)")


By Solution


Sorry, something went wrong.


[ _≪_ Previous: Contact Sensor Plugin does not Provide all information
](//gazebo214.rssing.com/chan-57893035/latest.php#c57893035a6922 "Previous
Article")


**[ anshulpaigwar ](/anshulpaigwar) ** commented  Jan 11, 2021


    00039 #include "gazebo/gazebo_config.h"
    00040 #include "gazebo/Simulator.hh"
    00041 #include "gazebo/GazeboConfig.hh"
    00042 #include "gazebo/GazeboError.hh"
    00043 #include "gazebo/Global.hh"
    00044 #include "gazebo/World.hh"
    00045 #include "gazebo/Entity.hh"
    00046 #include "gazebo/Model.hh"
    00047 #include "gazebo/Body.hh"
    00048 #include "gazebo/Geom.hh"
    00049 #include "gazebo/Joint.hh"
    00050 #include "gazebo/Mass.hh"
    00051 #include "gazebo/Pose3d.hh"
    00052 #include "gazebo/Vector3.hh"
    00053 #include "gazebo/Quatern.hh"
    00054 #include "gazebo/PhysicsEngine.hh"
    00055 #include "gazebo/Mass.hh"
    00056
    00057 // ros
    00058 #include <[ros/ros.h](../../../api/roscpp/html/ros_8h.html)>
    00059 #include <[ros/callback_queue.h](../../../api/roscpp/html/callback__queue_8h.html)>
    00060 #include <[ros/subscribe_options.h](../../../api/roscpp/html/subscribe__options_8h.html)>
    00061 #include <[ros/package.h](../../../api/roslib/html/package_8h.html)>
    00062 #include <rosgraph_msgs/Clock.h>
    00063
    00064 // Messages
    00065 #include <std_msgs/Bool.h>
    00066
    00067 // Services
    00068 #include "std_srvs/Empty.h"
    00069
    00070 #include "[gazebo_msgs/JointRequest.h](../../gazebo_msgs/html/JointRequest_8h.html)"
    00071 #include "[gazebo_msgs/BodyRequest.h](../../gazebo_msgs/html/BodyRequest_8h.html)"
    00072
    00073 #include "[gazebo_msgs/SpawnModel.h](../../gazebo_msgs/html/SpawnModel_8h.html)"
    00074 #include "[gazebo_msgs/DeleteModel.h](../../gazebo_msgs/html/DeleteModel_8h.html)"
    00075
    00076 #include "[gazebo_msgs/ApplyBodyWrench.h](../../gazebo_msgs/html/ApplyBodyWrench_8h.html)"
    00077
    00078 #include "[gazebo_msgs/SetPhysicsProperties.h](../../gazebo_msgs/html/SetPhysicsProperties_8h.html)"


**[ m-talha ](/m-talha) ** commented  Aug 29, 2019


Hi all, I use the turtlebot in the willowgarage world to create a semantic
mapping system. As the actual mapping (using gmapping for example) is not the
most important part of this effort, I would like to be able to use ground
truths for the start as well. I found a way to get the ground truth pose
(using the topic /gazebo/model_states), but now I also want a way to get the
ground truth map, or at least some way to construct such a map. Is that
possible? Alternatively, is there a way to provide gmapping with the ground
truth pose such that it just builds perfect maps (assuming a static world)?
Ultimately I would like to have a tf frame /mobile_base_groudntruth and a map
topic /map_groundtruth. Any help is very much appreciated! Best, Koen


Collaborator


Copy link


seems to work with gazebo 4.x release. I am testing in branch `
issue_93_set_joint_position ` with


function onFoo(  ) { ... } [GUI] [Wrn] [Application.cc:797] [QT]
file::/Gazebo/GazeboDrawer.qml:147:3: QML Dialog: Binding loop detected for
property "implicitHeight" [GUI] [Wrn] [Application.cc:797] [QT]
file::/Gazebo/GazeboDrawer.qml:147:3: QML Dialog: Binding loop detected for
property "implicitHeight" [GUI] [Dbg] [Gui.cc:333] GUI requesting list of
world names. The server may be busy downloading resources. Please be patient.
[GUI] [Dbg] [PathManager.cc:55] Received resource paths. [GUI] [Dbg]
[Gui.cc:391] Requesting GUI from [/world/default/gui/info]... [GUI] [Dbg]
[GuiRunner.cc:145] Requesting initial state from [/world/default/state]...
[GUI] [Msg] Loading config [/home/sperospace/.ignition/gazebo/6/gui.config]
[GUI] [Dbg] [Application.cc:426] Loading plugin [MinimalScene] [GUI] [Msg]
Added plugin [3D View] to main window [GUI] [Msg] Loaded plugin [MinimalScene]
from path [/usr/lib/x86_64-linux-gnu/ign-gui-6/plugins/libMinimalScene.so]
[GUI] [Dbg] [Application.cc:426] Loading plugin [EntityContextMenuPlugin]
[GUI] [Wrn] [Application.cc:797] [QT]
file::/EntityContextMenuPlugin/EntityContextMenuPlugin.qml:57:5: QML
Connections: Implicitly defined onFoo properties in Connections are
deprecated. Use this syntax instead: function onFoo(  ) { ... } [GUI] [Wrn]
[Application.cc:797] [QT]
file::/EntityContextMenuPlugin/EntityContextMenuPlugin.qml:52:3: QML
RenderWindowOverlay: Detected anchors on an item that is managed by a layout.
This is undefined behavior; use Layout.alignment instead. [GUI] [Wrn]
[Application.cc:797] [QT]
file::/EntityContextMenuPlugin/EntityContextMenuPlugin.qml:67:3: QML
EntityContextMenu: Detected anchors on an item that is managed by a layout.
This is undefined behavior; use Layout.alignment instead. [GUI] [Wrn]
[Application.cc:797] [QT]
file::/EntityContextMenuPlugin/EntityContextMenuPlugin.qml:52:3: QML
RenderWindowOverlay: Detected anchors on an item that is managed by a layout.
This is undefined behavior; use Layout.alignment instead. [GUI] [Wrn]
[Application.cc:797] [QT]
file::/EntityContextMenuPlugin/EntityContextMenuPlugin.qml:67:3: QML
EntityContextMenu: Detected anchors on an item that is managed by a layout.
This is undefined behavior; use Layout.alignment instead. [GUI] [Wrn]
[Application.cc:797] [QT]
file::/EntityContextMenuPlugin/EntityContextMenuPlugin.qml:52:3: QML
RenderWindowOverlay: Detected anchors on an item that is managed by a layout.
This is undefined behavior; use Layout.alignment instead. [GUI] [Wrn]
[Application.cc:797] [QT]
file::/EntityContextMenuPlugin/EntityContextMenuPlugin.qml:67:3: QML


###  [ People's Blog • First Pictures of the Eclipse ! ! !
](////satire3490.rssing.com/chan-77006292/article253.html#c77006292a253i838655542)


    rosrun gazebo_ros gazebo
    rosrun gazebo_ros spawn_model -urdf -model baxter -file ~/ros/ws_baxter/src/baxter_common/baxter_description/urdf/baxter.urdf -z 0.93 -J right_s0 -0.272659 -J right_s1 1.04701 -J right_e0 -0.00123203 -J right_e1 0.49262 -J right_w0 -0.0806423 -J right_w1 -0.0620532 -J right_w2 0.0265941 -J left_s0 0.192483 -J left_s1 1.047 -J left_e0 0.000806359 -J left_e1 0.491094 -J left_w0 -0.178079 -J left_w1 -0.0610333 -J left_w2 -0.0124707


[ ![First Pictures of the Eclipse ! !
!](//thepeoplescube.com/red/download/file.php?id=57243&sid=5311a0068099bb708e6eae6fd0456e59)
](////political6691.rssing.com/chan-78391714/article69.html#c78391714a69i1437484910)


Thanks for that but I already have the initial pose working. However, my robot
is teleoperated and I want the user to be able to reset it to the initial pose
when it gets stuck (e.g. singularity etc.). And I want it to snap back into
position without any dynamics involved.

---

All reactions


[ ](javascript:; "Ouch") 0


[ ](javascript:; "Like") 0


[…ulation#93](https://github.com/ros-simulation/gazebo_ros_pkgs/issues/93)), sleeping for 1 second to avoid race condition. this branch should only be used for debugging, merge only as a last resort.


I want to create QR Code model in Gazebo11. I read many blog for this problem
but i cannot solve. I want to give detail about my project, i want to add and
scan qr code and using mobile robot such as turtlebot3_waffle_pi. After
scanning this qr code, i want to distance measurement between robot and qr
code. Then i add feature as if the distance between qr code nearly 0.25 meter,
it must force stop and also stop. But when i cannot add QR code, i do
anything.


##  Footer


Open


[Application.cc:426] Loading plugin [Lights] [GUI] [Msg] Added plugin [Lights]
to main window [GUI] [Msg] Loaded plugin [Lights] from path
[/usr/lib/x86_64-linux-gnu/ign-gazebo-6/plugins/gui/libLights.so] [GUI] [Dbg]
[Application.cc:426] Loading plugin [TransformControl] [GUI] [Wrn]
[Application.cc:797] [QT] file::/TransformControl/TransformControl.qml:104:3:
QML Connections: Implicitly defined onFoo properties in Connections are
deprecated. Use this syntax instead: function onFoo(  ) { ... } [GUI] [Wrn]
[Application.cc:797] [QT] file::/TransformControl/TransformControl.qml:99:3:
QML Connections: Implicitly defined onFoo properties in Connections are
deprecated. Use this syntax instead: function onFoo(  ) { ... } [GUI] [Wrn]
[Application.cc:797] [QT] file::/TransformControl/TransformControl.qml:94:3:
QML Connections: Implicitly defined onFoo properties in Connections are
deprecated. Use this syntax instead: function onFoo(  ) { ... } [GUI] [Wrn]
[Application.cc:797] [QT] file::/TransformControl/TransformControl.qml:89:3:
QML Connections: Implicitly defined onFoo properties in Connections are
deprecated. Use this syntax instead: function onFoo(  ) { ... } [GUI] [Dbg]
[TransformControl.cc:219] Legacy mode is disabled; this plugin must be used
with MinimalScene. [GUI] [Msg] Added plugin [Transform control] to main window
[GUI] [Msg] Loaded plugin [TransformControl] from path [/usr/lib/x86_64-linux-
gnu/ign-gazebo-6/plugins/gui/libTransformControl.so] [GUI] [Dbg]
[Application.cc:426] Loading plugin [Screenshot] [GUI] [Msg] Screenshot
service on [/gui/screenshot] [GUI] [Msg] Added plugin [Screenshot] to main
window [GUI] [Msg] Loaded plugin [Screenshot] from path
[/usr/lib/x86_64-linux-gnu/ign-gui-6/plugins/libScreenshot.so] [GUI] [Dbg]
[Application.cc:426] Loading plugin [CopyPaste] [GUI] [Msg] Added plugin
[Copy/Paste] to main window [GUI] [Msg] Loaded plugin [CopyPaste] from path
[/usr/lib/x86_64-linux-gnu/ign-gazebo-6/plugins/gui/libCopyPaste.so] [GUI]
[Dbg] [Application.cc:426] Loading plugin [ComponentInspector] [GUI] [Msg]
Added plugin [Component inspector] to main window [GUI] [Msg] Loaded plugin
[ComponentInspector] from path [/usr/lib/x86_64-linux-gnu/ign-
gazebo-6/plugins/gui/libComponentInspector.so] [GUI] [Dbg]
[Application.cc:426] Loading plugin [EntityTree] [GUI] [Wrn]
[Application.cc:797] [QT] file::/EntityTree/EntityTree.qml:148:7: QML
ToolButton: Detected anchors on an item that is managed by a layout. This is
undefined behavior; use Layout.alignment instead. [GUI] [Msg] Added plugin
[Entity tree] to main window [GUI] [Msg] Loaded plugin [EntityTree] from path
[/usr/lib/x86_64-linux-gnu/ign-gazebo-6/plugins/gui/libEntityTree.so] [GUI]
[Dbg] [Application.cc:296] Loading window config [GUI] [Msg] Using server
control service [/server_control] [GUI] [Dbg] [Application.cc:569] Applying
config [GUI] [Wrn] [Application.cc:797] [QT]


    00898         }
    00899         {
    00900           boost::recursive_mutex::scoped_lock lock(*gazebo::Simulator::Instance()->GetMRMutex());
    00901           if (!gazebo::World::Instance()->GetEntityByName(req.[model_name](../../gazebo_msgs/html/structgazebo__msgs_1_1DeleteModelRequest__.html#ae6bbe17db56816c9331ef6bf466e5f21))) break;
    00902         }
    00903         [ROS_DEBUG](../../../api/rosconsole/html/macros__generated_8h.html#a83228c0b42c80605abdd0f42af64b1f7)("Waiting for model deletion (%s)",req.[model_name](../../gazebo_msgs/html/structgazebo__msgs_1_1DeleteModelRequest__.html#ae6bbe17db56816c9331ef6bf466e5f21).c_str());
    00904         usleep(1000);
    00905       }
    00906
    00907       // set result
    00908       res.[success](../../gazebo_msgs/html/structgazebo__msgs_1_1DeleteModelResponse__.html#a51152f41440f853bd60c199e254a7789) = true;
    00909       res.[status_message](../../gazebo_msgs/html/structgazebo__msgs_1_1DeleteModelResponse__.html#ad32bf4e34bc8e7d8cf5f5fcf85dc9754) = std::string("DeleteModel: successfully deleted model");
    00910       return true;
    00911     }
    00912
    [00915](classGazeboROSNode.html#a53eeeb118297985653d890a89108e21f)     bool [getModelState](classGazeboROSNode.html#a53eeeb118297985653d890a89108e21f)([gazebo_msgs::GetModelState::Request](../../gazebo_msgs/html/structgazebo__msgs_1_1GetModelStateRequest__.html) &req,[gazebo_msgs::GetModelState::Response](../../gazebo_msgs/html/structgazebo__msgs_1_1GetModelStateResponse__.html) &res)
    00916     {
    00917       gazebo::Model* model = dynamic_cast<gazebo::Model*>(gazebo::World::Instance()->GetEntityByName(req.[model_name](../../gazebo_msgs/html/structgazebo__msgs_1_1GetModelStateRequest__.html#a28ba8cf54d492a7ef1782e7e938d2deb)));
    00918       gazebo::Body* frame = dynamic_cast<gazebo::Body*>(gazebo::World::Instance()->GetEntityByName(req.[relative_entity_name](../../gazebo_msgs/html/structgazebo__msgs_1_1GetModelStateRequest__.html#a4b15abcdd6f57dd69eaa959f25642509)));
    00919       if (!model)
    00920       {
    00921         [ROS_ERROR](../../../api/rosconsole/html/macros__generated_8h.html#a7fb635b03cc608284eadecd2f8becd9a)("GetModelState: model [%s] does not exist",req.[model_name](../../gazebo_msgs/html/structgazebo__msgs_1_1GetModelStateRequest__.html#a28ba8cf54d492a7ef1782e7e938d2deb).c_str());
    00922         res.[success](../../gazebo_msgs/html/structgazebo__msgs_1_1GetModelStateResponse__.html#aeb58e60c2f46b69ad7ff582169ae3b6c) = false;
    00923         res.[status_message](../../gazebo_msgs/html/structgazebo__msgs_1_1GetModelStateResponse__.html#a2ac60b79617ca44e69200efbafe6d3ee) = "GetModelState: model does not exist";
    00924         return false;
    00925       }
    00926       else
    00927       {
    00928         // get model pose
    00929         gazebo::Pose3d  model_pose = model->GetWorldPose(); // - this->myBody->GetCoMPose();
    00930         gazebo::Vector3 model_pos = model_pose.pos;
    00931         gazebo::Quatern model_rot = model_pose.rot;
    00932
    00933         // get model twist
    00934         gazebo::Vector3 model_linear_vel  = model->GetWorldLinearVel();
    00935         gazebo::Vector3 model_angular_vel = model->GetWorldAngularVel();
    00936
    00937
    00938         if (frame)
    00939         {


[ ](//www.rssing.com/index.php?zw=2123 "Home") [ $ ](javascript:; "MoMoney")


**[ DangMinh24 ](/DangMinh24) ** commented  Nov 16, 2022


  * You should now be able to launch your custom world with both the gas station and robot into Gazebo using the following command:

        roslaunch MYROBOT_gazebo MYROBOT.launch


**[ fmessmer ](/fmessmer) ** commented  Oct 22, 2014


July 17, 2023, 10:53 am


    02577   {
    02578     if ([optWorldParam](gazeboros_8cpp.html#ab9308554571f349ac0b75eac34939dd2))
    02579       gazebo::Simulator::Instance()->LoadWorldString([worldParamData](gazeboros_8cpp.html#a332ee20fb7d46d2b771c88303d3c45aa), [optServerId](gazeboros_8cpp.html#a22e4bc9ab344d8cb4155a232dbd1266f));
    02580     else
    02581       gazebo::Simulator::Instance()->LoadWorldFile([worldFileName](gazeboros_8cpp.html#a0fe0d6cba0a8a75e68da5402cb7d928d), [optServerId](gazeboros_8cpp.html#a22e4bc9ab344d8cb4155a232dbd1266f));
    02582
    02583     gazebo::Simulator::Instance()->SetTimeout([optTimeout](gazeboros_8cpp.html#a3de449cbe56d0aacff20ccd18678cd9a));
    02584     gazebo::Simulator::Instance()->SetPhysicsEnabled([optPhysicsEnabled](gazeboros_8cpp.html#a5dccf1f9607bd91523fab411715874b4));
    02585   }
    02586   catch (gazebo::GazeboError e)
    02587   {
    02588     std::cerr << "Error Loading Gazebo" << std::endl;
    02589     std::cerr << e << std::endl;
    02590     gazebo::Simulator::Instance()->Fini();
    02591     ros::shutdown();
    02592     return -1;
    02593   }
    02594
    02595   // Initialize the simulator
    02596   try
    02597   {
    02598     gazebo::Simulator::Instance()->Init();
    02599     gazebo::Simulator::Instance()->SetPaused([optPaused](gazeboros_8cpp.html#a3697e95c8066e4952f3881c731f9e731));
    02600   }
    02601   catch (gazebo::GazeboError e)
    02602   {
    02603     std::cerr << "Initialization failed" << std::endl;
    02604     std::cerr << e << std::endl;
    02605     gazebo::Simulator::Instance()->Fini();
    02606     ros::shutdown();
    02607     return -1;
    02608   }
    02609
    02610   // start a node
    02611   [GazeboROSNode](classGazeboROSNode.html) grn;
    02612
    02613   // Main loop of the simulator
    02614   try
    02615   {
    02616     gazebo::Simulator::Instance()->MainLoop();


[ _≪_ Previous: Spawning multiple models causes error
](//gazebo214.rssing.com/chan-57893035/latest.php#c57893035a6954 "Previous
Article")


Is there any way to do something similar for Gazebo 2.2.x?

---

All reactions


**[ jbohren ](/jbohren) ** commented  Oct 21, 2014


[ ](javascript:; "Share Article") [
](//www.rssing.com/contact.php?r=o6&u=%2F%2Fgazebo214.rssing.com%2Fchan-57893035%2Flatest-
article22-live.php "Article Support")


Email Address


[ _≫_ Next: How to get information between entities in contact with disabled
physical collisions?
](//gazebo214.rssing.com/chan-57893035/latest.php#c57893035a6950 "Next
Article")


This is undefined behavior; use Layout.alignment instead. [GUI] [Wrn]
[Application.cc:797] [QT]
file::/EntityContextMenuPlugin/EntityContextMenuPlugin.qml:67:3: QML
EntityContextMenu: Detected anchors on an item that is managed by a layout.
This is undefined behavior; use Layout.alignment instead. [GUI] [Wrn]
[Application.cc:797] [QT]
file::/EntityContextMenuPlugin/EntityContextMenuPlugin.qml:52:3: QML
RenderWindowOverlay: Detected anchors on an item that is managed by a layout.
This is undefined behavior; use Layout.alignment instead. [GUI] [Wrn]
[Application.cc:797] [QT]
file::/EntityContextMenuPlugin/EntityContextMenuPlugin.qml:67:3: QML
EntityContextMenu: Detected anchors on an item that is managed by a layout.
This is undefined behavior; use Layout.alignment instead. [GUI] [Wrn]
[Application.cc:797] [QT]
file::/EntityContextMenuPlugin/EntityContextMenuPlugin.qml:52:3: QML
RenderWindowOverlay: Detected anchors on an item that is managed by a layout.
This is undefined behavior; use Layout.alignment instead. [GUI] [Wrn]
[Application.cc:797] [QT]
file::/EntityContextMenuPlugin/EntityContextMenuPlugin.qml:67:3: QML
EntityContextMenu: Detected anchors on an item that is managed by a layout.
This is undefined behavior; use Layout.alignment instead. [GUI] [Wrn]
[Application.cc:797] [QT]
file::/EntityContextMenuPlugin/EntityContextMenuPlugin.qml:52:3: QML
RenderWindowOverlay: Detected anchors on an item that is managed by a layout.
This is undefined behavior; use Layout.alignment instead. [GUI] [Wrn]
[Application.cc:797] [QT]
file::/EntityContextMenuPlugin/EntityContextMenuPlugin.qml:67:3: QML
EntityContextMenu: Detected anchors on an item that is managed by a layout.
This is undefined behavior; use Layout.alignment instead. [GUI] [Wrn]
[Application.cc:797] [QT]
file::/EntityContextMenuPlugin/EntityContextMenuPlugin.qml:52:3: QML
RenderWindowOverlay: Detected anchors on an item that is managed by a layout.
This is undefined behavior; use Layout.alignment instead. [GUI] [Wrn]
[Application.cc:797] [QT]
file::/EntityContextMenuPlugin/EntityContextMenuPlugin.qml:67:3: QML
EntityContextMenu: Detected anchors on an item that is managed by a layout.
This is undefined behavior; use Layout.alignment instead. [GUI] [Wrn]
[Application.cc:797] [QT]
file::/EntityContextMenuPlugin/EntityContextMenuPlugin.qml:52:3: QML
RenderWindowOverlay: Detected anchors on an item that is managed by a layout.


###  [ People's Blog • First Pictures of the Eclipse ! ! !
](////satire6144.rssing.com/chan-78334822/article122.html#c78334822a122i1295535114)


Sharing:


must be something in the spawn service.


April 8, 2024, 1:08 pm


EntityContextMenu: Detected anchors on an item that is managed by a layout.
This is undefined behavior; use Layout.alignment instead. [GUI] [Wrn]
[Application.cc:797] [QT]
file::/EntityContextMenuPlugin/EntityContextMenuPlugin.qml:52:3: QML
RenderWindowOverlay: Detected anchors on an item that is managed by a layout.
This is undefined behavior; use Layout.alignment instead. [GUI] [Wrn]
[Application.cc:797] [QT]
file::/EntityContextMenuPlugin/EntityContextMenuPlugin.qml:67:3: QML
EntityContextMenu: Detected anchors on an item that is managed by a layout.
This is undefined behavior; use Layout.alignment instead. [GUI] [Wrn]
[Application.cc:797] [QT]
file::/EntityContextMenuPlugin/EntityContextMenuPlugin.qml:52:3: QML
RenderWindowOverlay: Detected anchors on an item that is managed by a layout.
This is undefined behavior; use Layout.alignment instead. [GUI] [Wrn]
[Application.cc:797] [QT]
file::/EntityContextMenuPlugin/EntityContextMenuPlugin.qml:67:3: QML
EntityContextMenu: Detected anchors on an item that is managed by a layout.
This is undefined behavior; use Layout.alignment instead. [GUI] [Wrn]
[Application.cc:797] [QT]
file::/EntityContextMenuPlugin/EntityContextMenuPlugin.qml:52:3: QML
RenderWindowOverlay: Detected anchors on an item that is managed by a layout.
This is undefined behavior; use Layout.alignment instead. [GUI] [Wrn]
[Application.cc:797] [QT]
file::/EntityContextMenuPlugin/EntityContextMenuPlugin.qml:67:3: QML
EntityContextMenu: Detected anchors on an item that is managed by a layout.
This is undefined behavior; use Layout.alignment instead. [GUI] [Msg] Added
plugin [Entity Context Menu] to main window [GUI] [Msg] Loaded plugin
[EntityContextMenuPlugin] from path [/usr/lib/x86_64-linux-gnu/ign-
gazebo-6/plugins/gui/libEntityContextMenuPlugin.so] [GUI] [Dbg]
[Application.cc:426] Loading plugin [GzSceneManager] [GUI] [Msg] Added plugin
[Scene Manager] to main window [GUI] [Msg] Loaded plugin [GzSceneManager] from
path [/usr/lib/x86_64-linux-gnu/ign-gazebo-6/plugins/gui/libGzSceneManager.so]
[GUI] [Dbg] [Application.cc:426] Loading plugin [InteractiveViewControl] [GUI]
[Msg] Camera view controller topic advertised on [/gui/camera/view_control]
[GUI] [Msg] Added plugin [Interactive view control] to main window [GUI] [Msg]
Loaded plugin [InteractiveViewControl] from path [/usr/lib/x86_64-linux-
gnu/ign-gui-6/plugins/libInteractiveViewControl.so] [GUI] [Dbg]
[Application.cc:426] Loading plugin [CameraTracking] [GUI] [Msg] Added plugin
[Camera tracking] to main window [GUI] [Msg] Loaded plugin [CameraTracking]
from path [/usr/lib/x86_64-linux-gnu/ign-gui-6/plugins/libCameraTracking.so]


    01194       res.[link_state](../../gazebo_msgs/html/structgazebo__msgs_1_1GetLinkStateResponse__.html#aa83952af428b1a3732e0e19cc2a7353e).[twist](../../gazebo_msgs/html/structgazebo__msgs_1_1LinkState__.html#aacdf4d3b28003c05951526d13a1c57f8).[angular](../../../api/geometry_msgs/html/structgeometry__msgs_1_1Twist__.html#aa0cb518e509179290aa793228ef01f6b).[x](../../../api/geometry_msgs/html/structgeometry__msgs_1_1Vector3__.html#abf9dabaf651196aee50fd14bf3b643be) = body_veul.x;
    01195       res.[link_state](../../gazebo_msgs/html/structgazebo__msgs_1_1GetLinkStateResponse__.html#aa83952af428b1a3732e0e19cc2a7353e).[twist](../../gazebo_msgs/html/structgazebo__msgs_1_1LinkState__.html#aacdf4d3b28003c05951526d13a1c57f8).[angular](../../../api/geometry_msgs/html/structgeometry__msgs_1_1Twist__.html#aa0cb518e509179290aa793228ef01f6b).[y](../../../api/geometry_msgs/html/structgeometry__msgs_1_1Vector3__.html#aaea58ad929c43960a06f728d97132404) = body_veul.y;
    01196       res.[link_state](../../gazebo_msgs/html/structgazebo__msgs_1_1GetLinkStateResponse__.html#aa83952af428b1a3732e0e19cc2a7353e).[twist](../../gazebo_msgs/html/structgazebo__msgs_1_1LinkState__.html#aacdf4d3b28003c05951526d13a1c57f8).[angular](../../../api/geometry_msgs/html/structgeometry__msgs_1_1Twist__.html#aa0cb518e509179290aa793228ef01f6b).[z](../../../api/geometry_msgs/html/structgeometry__msgs_1_1Vector3__.html#a4cde719326e6c3688ab50b51ab4708b1) = body_veul.x;
    01197       res.[link_state](../../gazebo_msgs/html/structgazebo__msgs_1_1GetLinkStateResponse__.html#aa83952af428b1a3732e0e19cc2a7353e).[reference_frame](../../gazebo_msgs/html/structgazebo__msgs_1_1LinkState__.html#af3c75584cb85e20e4bac931829d8a80e) = req.[reference_frame](../../gazebo_msgs/html/structgazebo__msgs_1_1GetLinkStateRequest__.html#a83af84cb417fc8e9297c12f514a2be53);
    01198
    01199       res.[success](../../gazebo_msgs/html/structgazebo__msgs_1_1GetLinkStateResponse__.html#ab078790cbd3b85968631041914f263eb) = true;
    01200       res.[status_message](../../gazebo_msgs/html/structgazebo__msgs_1_1GetLinkStateResponse__.html#ae6630d81e448f045256efffe68e5b7bd) = "GetLinkState: got state";
    01201       return true;
    01202     }
    01203
    [01206](classGazeboROSNode.html#a760bdded5957218245e985ccc568b0fa)     bool [setLinkProperties](classGazeboROSNode.html#a760bdded5957218245e985ccc568b0fa)([gazebo_msgs::SetLinkProperties::Request](../../gazebo_msgs/html/structgazebo__msgs_1_1SetLinkPropertiesRequest__.html) &req,[gazebo_msgs::SetLinkProperties::Response](../../gazebo_msgs/html/structgazebo__msgs_1_1SetLinkPropertiesResponse__.html) &res)
    01207     {
    01208       gazebo::Body* body = dynamic_cast<gazebo::Body*>(gazebo::World::Instance()->GetEntityByName(req.[link_name](../../gazebo_msgs/html/structgazebo__msgs_1_1SetLinkPropertiesRequest__.html#ac5345bab1c3821bbcaeeb7120bd4bec9)));
    01209       if (body == NULL)
    01210       {
    01211         res.[success](../../gazebo_msgs/html/structgazebo__msgs_1_1SetLinkPropertiesResponse__.html#aac9892dab046dcd066b590089f0efba7) = false;
    01212         res.[status_message](../../gazebo_msgs/html/structgazebo__msgs_1_1SetLinkPropertiesResponse__.html#a85799d48602705ed7e2e53f204e3a76a) = "SetLinkProperties: link not found, did you forget to scope the link by model name?";
    01213         return false;
    01214       }
    01215       else
    01216       {
    01217         gazebo::Mass mass;
    01218         // @todo: FIXME: add inertia matrix rotation to Gazebo
    01219         // mass.SetInertiaRotation(gazebo::Quaternion(req.com.orientation.w,res.com.orientation.x,req.com.orientation.y req.com.orientation.z));
    01220         mass.SetCoG(gazebo::Vector3(req.[com](../../gazebo_msgs/html/structgazebo__msgs_1_1SetLinkPropertiesRequest__.html#a1f3b70a749202a22e6d90ae2664ac98c).[position](../../../api/geometry_msgs/html/structgeometry__msgs_1_1Pose__.html#a27067d1772d85a856b0e4ed4690a80b4).[x](../../../api/geometry_msgs/html/structgeometry__msgs_1_1Point__.html#acd9420e6916084b2a9c09019bfda1708),req.[com](../../gazebo_msgs/html/structgazebo__msgs_1_1SetLinkPropertiesRequest__.html#a1f3b70a749202a22e6d90ae2664ac98c).[position](../../../api/geometry_msgs/html/structgeometry__msgs_1_1Pose__.html#a27067d1772d85a856b0e4ed4690a80b4).[y](../../../api/geometry_msgs/html/structgeometry__msgs_1_1Point__.html#a46a84ff5a3e5817ab5693abda66fccb0),req.[com](../../gazebo_msgs/html/structgazebo__msgs_1_1SetLinkPropertiesRequest__.html#a1f3b70a749202a22e6d90ae2664ac98c).[position](../../../api/geometry_msgs/html/structgeometry__msgs_1_1Pose__.html#a27067d1772d85a856b0e4ed4690a80b4).[z](../../../api/geometry_msgs/html/structgeometry__msgs_1_1Point__.html#a061f0093e927a95998f35ceceb5cebda)));
    01221         mass.SetInertiaMatrix(req.[ixx](../../gazebo_msgs/html/structgazebo__msgs_1_1SetLinkPropertiesRequest__.html#a75dcce8d024d09bd3f27dfb546791507),req.[iyy](../../gazebo_msgs/html/structgazebo__msgs_1_1SetLinkPropertiesRequest__.html#aee84669ab989e75f48de4bd26a663138),req.[izz](../../gazebo_msgs/html/structgazebo__msgs_1_1SetLinkPropertiesRequest__.html#af4bf8f338d9967640fb7262f51a8b005),req.[ixy](../../gazebo_msgs/html/structgazebo__msgs_1_1SetLinkPropertiesRequest__.html#a5fd5259b8c4297104526c9fbfdbb9fb4),req.[ixz](../../gazebo_msgs/html/structgazebo__msgs_1_1SetLinkPropertiesRequest__.html#a7895b38a03a2f3eef52efba2193c3dc6),req.[iyz](../../gazebo_msgs/html/structgazebo__msgs_1_1SetLinkPropertiesRequest__.html#a8da9a7a2a38d19d58fb6de7b41d91cc9));
    01222         mass.SetMass(req.[mass](../../gazebo_msgs/html/structgazebo__msgs_1_1SetLinkPropertiesRequest__.html#a88d30531415ffb74a71dddcd11f374ad));
    01223         body->SetMass(mass);
    01224         body->SetGravityMode(req.[gravity_mode](../../gazebo_msgs/html/structgazebo__msgs_1_1SetLinkPropertiesRequest__.html#a096d54da685c1a5c1aabcfd306b5d954));
    01225         // @todo: mass change unverified
    01226         res.[success](../../gazebo_msgs/html/structgazebo__msgs_1_1SetLinkPropertiesResponse__.html#aac9892dab046dcd066b590089f0efba7) = true;
    01227         res.[status_message](../../gazebo_msgs/html/structgazebo__msgs_1_1SetLinkPropertiesResponse__.html#a85799d48602705ed7e2e53f204e3a76a) = "SetLinkProperties: properties set";
    01228         return true;
    01229       }
    01230       return true;
    01231     }
    01232
    [01235](classGazeboROSNode.html#a5cf06484d77fad60d8cb2effb985a83d)     bool [setPhysicsProperties](classGazeboROSNode.html#a5cf06484d77fad60d8cb2effb985a83d)([gazebo_msgs::SetPhysicsProperties::Request](../../gazebo_msgs/html/structgazebo__msgs_1_1SetPhysicsPropertiesRequest__.html) &req,[gazebo_msgs::SetPhysicsProperties::Response](../../gazebo_msgs/html/structgazebo__msgs_1_1SetPhysicsPropertiesResponse__.html) &res)
    01236     {
    01237       // pause simulation if requested


This method uses a small python script called ` spawn_model ` to make a
service call request to the ` gazebo_ros ` ROS node (named simply "gazebo" in
the rostopic namespace) to add a custom URDF into Gazebo. The ` spawn_model `
script is located within the ` gazebo_ros ` package. You can use this script
in the following way:


[ ](javascript:; "Like") 0


[ ](javascript:; "Share Article") [
](//www.rssing.com/contact.php?r=o6&u=%2F%2Fgazebo214.rssing.com%2Fchan-57893035%2Flatest-
article27-live.php "Article Support")


    * [ Actions  Automate any workflow  ](/features/actions)
    * [ Packages  Host and manage packages  ](/features/packages)
    * [ Security  Find and fix vulnerabilities  ](/features/security)
    * [ Codespaces  Instant dev environments  ](/features/codespaces)
    * [ Copilot  Write better code with AI  ](/features/copilot)
    * [ Code review  Manage code changes  ](/features/code-review)
    * [ Issues  Plan and track work  ](/features/issues)
    * [ Discussions  Collaborate outside of code  ](/features/discussions)


The disadvantage of this method is that your packaged ` MYROBOT_description `
and ` MYROBOT_gazebo ` are not as easily portable between computers - you
first have to set the ` GAZEBO_MODEL_PATH ` on any new system before being
able to use these ROS packages.


[ ](//www.rssing.com/index.php?zw=2123 "Home") [ $ ](javascript:; "MoMoney")


![THOMSON TX8O7EU CRT TV - POWER-AUDIO-VIDEO&HORIZONTAL OUTPUT -
SCHEMATIC](//3.bp.blogspot.com/-TwyzAirb1k8/U0wExqbw1eI/AAAAAAABAeE/2kVPj0VknG0/s1600/audio+output.bmp.jpg)


The [ roslaunch ](http://www.ros.org/wiki/roslaunch) tool is the standard
method for starting ROS nodes and bringing up robots in ROS. To start an empty
Gazebo world similar to the ` rosrun ` command in the previous tutorial,
simply run


[ ![@jbohren](https://avatars.githubusercontent.com/u/1253450?s=40&v=4)
](/jbohren) [ jbohren ](/jbohren) reopened this  Oct 21, 2014


URL:


    00326       this->[xmlPrefix_](classGazeboROSNode.html#a56a97753f6fc5e55f80bc9dd4365cf9f "prefix and suffix used for conversion from URDF to Gazebo XML") = std::string("<?xml version='1.0'?> <gazebo:world xmlns:xi='http://www.w3.org/2001/XInclude' xmlns:gazebo='http://playerstage.sourceforge.net/gazebo/xmlschema/#gz' xmlns:model='http://playerstage.sourceforge.net/gazebo/xmlschema/#model' xmlns:sensor='http://playerstage.sourceforge.net/gazebo/xmlschema/#sensor' xmlns:body='http://playerstage.sourceforge.net/gazebo/xmlschema/#body' xmlns:geom='http://playerstage.sourceforge.net/gazebo/xmlschema/#geom' xmlns:joint='http://playerstage.sourceforge.net/gazebo/xmlschema/#joint' xmlns:interface='http://playerstage.sourceforge.net/gazebo/xmlschema/#interface' xmlns:rendering='http://playerstage.sourceforge.net/gazebo/xmlschema/#rendering' xmlns:renderable='http://playerstage.sourceforge.net/gazebo/xmlschema/#renderable' xmlns:controller='http://playerstage.sourceforge.net/gazebo/xmlschema/#controller' xmlns:physics='http://playerstage.sourceforge.net/gazebo/xmlschema/#physics' >");
    00327       this->[xmlSuffix_](classGazeboROSNode.html#a82f7515450366bb2ed7701429eaba99b) = std::string("</gazebo:world>");
    00328
    00329       // reset topic connection counts
    00330       this->[pub_link_states_connection_count_](classGazeboROSNode.html#ac131709cfe171cca7a556620a9180d56) = 0;
    00331       this->[pub_model_states_connection_count_](classGazeboROSNode.html#a5c5117f163d5a790ffd92cb56073ca66) = 0;
    00332       this->[lastWrenchBodyUpdateTime](classGazeboROSNode.html#a10111db7cc35bc709eb1dd9f8ac6673d) = 0;
    00333       this->[lastForceJointUpdateTime](classGazeboROSNode.html#a05911ae1da87d03e4cd777417ee7ad89) = 0;
    00334     }
    00335
    [00336](classGazeboROSNode.html#a425be7d364a037915a6542d887d3cf49)     [~GazeboROSNode](classGazeboROSNode.html#a425be7d364a037915a6542d887d3cf49)()
    00337     {
    00338       // disconnect slots
    00339       gazebo::World::Instance()->DisconnectWorldUpdateStartSignal(boost::bind(&[GazeboROSNode::wrenchBodySchedulerSlot](classGazeboROSNode.html#a39113e9e18f20d71c38aeeaecc17584b),this));
    00340       gazebo::World::Instance()->DisconnectWorldUpdateStartSignal(boost::bind(&[GazeboROSNode::forceJointSchedulerSlot](classGazeboROSNode.html#aee5784a84181a115059d6cf43a0cb67d),this));
    00341       gazebo::World::Instance()->DisconnectWorldUpdateStartSignal(boost::bind(&[GazeboROSNode::publishSimTime](classGazeboROSNode.html#a48733f4c02ab9c9976653dfd37c89e34),this));
    00342       if (this->[pub_link_states_connection_count_](classGazeboROSNode.html#ac131709cfe171cca7a556620a9180d56) > 0) // disconnect if there are subscribers on exit
    00343         gazebo::World::Instance()->DisconnectWorldUpdateStartSignal(boost::bind(&[GazeboROSNode::publishLinkStates](classGazeboROSNode.html#abdcedd88754decfd73b04c1e9d7f5023),this));
    00344       if (this->[pub_model_states_connection_count_](classGazeboROSNode.html#a5c5117f163d5a790ffd92cb56073ca66) > 0) // disconnect if there are subscribers on exit
    00345         gazebo::World::Instance()->DisconnectWorldUpdateStartSignal(boost::bind(&[GazeboROSNode::publishModelStates](classGazeboROSNode.html#a3dfb358eb77f12aa7f328aa0f6e712f0),this));
    00346
    00347       // shutdown ros
    00348       this->[rosnode_](classGazeboROSNode.html#ae9011736edb2ec542d7176cdddeb546d).[shutdown](../../../api/roscpp/html/classros_1_1NodeHandle.html#a81d08224944993c4cd38589e68417e12)();
    00349
    00350       // shutdown ros queue
    00351       this->[gazebo_callback_queue_thread_](classGazeboROSNode.html#a382ac60d7e343d5dc666c4cf3d399bf7)->join();
    00352       delete this->[gazebo_callback_queue_thread_](classGazeboROSNode.html#a382ac60d7e343d5dc666c4cf3d399bf7);
    00353
    00354       this->[physics_reconfigure_thread_](classGazeboROSNode.html#abadd1aabaaa2353bccd4a48bc561e779)->join();
    00355       delete this->[physics_reconfigure_thread_](classGazeboROSNode.html#abadd1aabaaa2353bccd4a48bc561e779);
    00356
    00357       this->[lock_](classGazeboROSNode.html#a3895043c9355e3e2a23f84efe0060736 "A mutex to lock access to fields that are used in ROS message callbacks.").lock();
    00358       for (std::vector<GazeboROSNode::ForceJointJob*>::iterator iter=this->[force_joint_jobs](classGazeboROSNode.html#a22ab41eec754d289d8c56f05045f480e).begin();iter!=this->[force_joint_jobs](classGazeboROSNode.html#a22ab41eec754d289d8c56f05045f480e).end();)
    00359       {
    00360         delete (*iter);
    00361         this->[force_joint_jobs](classGazeboROSNode.html#a22ab41eec754d289d8c56f05045f480e).erase(iter);
    00362       }
    00363       for (std::vector<GazeboROSNode::WrenchBodyJob*>::iterator iter=this->[wrench_body_jobs](classGazeboROSNode.html#ade2831b1970d2ceed871e82a9140c2bb).begin();iter!=this->[wrench_body_jobs](classGazeboROSNode.html#ade2831b1970d2ceed871e82a9140c2bb).end();)
    00364       {
    00365         delete (*iter);


    [02326](classGazeboROSNode.html#a05911ae1da87d03e4cd777417ee7ad89)     double [lastForceJointUpdateTime](classGazeboROSNode.html#a05911ae1da87d03e4cd777417ee7ad89);
    02327
    [02330](classGazeboROSNode.html#a39113e9e18f20d71c38aeeaecc17584b)     void [wrenchBodySchedulerSlot](classGazeboROSNode.html#a39113e9e18f20d71c38aeeaecc17584b)()
    02331     {
    02332       if (this->[lastWrenchBodyUpdateTime](classGazeboROSNode.html#a10111db7cc35bc709eb1dd9f8ac6673d) == gazebo::Simulator::Instance()->GetSimTime().Double())
    02333         return;
    02334       // MDMutex locks in case model is getting deleted, don't have to do this if we delete jobs first
    02335       // boost::recursive_mutex::scoped_lock lock(*gazebo::Simulator::Instance()->GetMDMutex());
    02336       this->[lock_](classGazeboROSNode.html#a3895043c9355e3e2a23f84efe0060736 "A mutex to lock access to fields that are used in ROS message callbacks.").lock();
    02337       for (std::vector<GazeboROSNode::WrenchBodyJob*>::iterator iter=this->[wrench_body_jobs](classGazeboROSNode.html#ade2831b1970d2ceed871e82a9140c2bb).begin();iter!=this->[wrench_body_jobs](classGazeboROSNode.html#ade2831b1970d2ceed871e82a9140c2bb).end();)
    02338       {
    02339         // check times and apply wrench if necessary
    02340         if ([ros::Time](../../../api/rostime/html/classros_1_1Time.html)(gazebo::Simulator::Instance()->GetSimTime().Double()) >= (*iter)->start_time)
    02341           if ([ros::Time](../../../api/rostime/html/classros_1_1Time.html)(gazebo::Simulator::Instance()->GetSimTime().Double()) <= (*iter)->start_time+(*iter)->duration ||
    02342               (*iter)->duration.toSec() < 0.0)
    02343           {
    02344             if ((*iter)->body) // if body exists
    02345             {
    02346               (*iter)->body->SetForce((*iter)->force);
    02347               (*iter)->body->SetTorque((*iter)->torque);
    02348             }
    02349             else
    02350               (*iter)->duration.fromSec(0.0); // mark for delete
    02351           }
    02352
    02353         if ([ros::Time](../../../api/rostime/html/classros_1_1Time.html)(gazebo::Simulator::Instance()->GetSimTime().Double()) > (*iter)->start_time+(*iter)->duration &&
    02354             (*iter)->duration.toSec() >= 0.0)
    02355         {
    02356           // remove from queue once expires
    02357           delete (*iter);
    02358           this->[wrench_body_jobs](classGazeboROSNode.html#ade2831b1970d2ceed871e82a9140c2bb).erase(iter);
    02359         }
    02360         else
    02361           iter++;
    02362       }
    02363       this->[lastWrenchBodyUpdateTime](classGazeboROSNode.html#a10111db7cc35bc709eb1dd9f8ac6673d) = gazebo::Simulator::Instance()->GetSimTime().Double();
    02364       this->[lock_](classGazeboROSNode.html#a3895043c9355e3e2a23f84efe0060736 "A mutex to lock access to fields that are used in ROS message callbacks.").unlock();
    02365     }
    02366
    [02369](classGazeboROSNode.html#aee5784a84181a115059d6cf43a0cb67d)     void [forceJointSchedulerSlot](classGazeboROSNode.html#aee5784a84181a115059d6cf43a0cb67d)()


[ bug  ](/ros-simulation/gazebo_ros_pkgs/labels/bug) [ needs feedback  ](/ros-
simulation/gazebo_ros_pkgs/labels/needs%20feedback) [ needs gazebo feedback
](/ros-simulation/gazebo_ros_pkgs/labels/needs%20gazebo%20feedback)


Could it have been a namespace problem induced by using a urdf to load the
model instead of an sdf file?

---

All reactions


[ ](javascript:; "Ouch") 0


In this launch file we inherit most of the necessary functionality from
empty_world.launch. The only parameter we need to change is the ` world_name `
parameter, substituting the ` empty.world ` world file with the ` mud.world `
file. The other arguments are simply set to their default values.


**[ fmessmer ](/fmessmer) ** commented  Sep 17, 2014


[ ↂ
](////nickalive1.rssing.com/chan-12111484/article19428.html#c12111484a19428i709189718
"Wicked Cool Toys Announces 'The Loud House' Plush Toy Line | NYTF 2018
\[Updated\]")


**[ matlabbe ](/matlabbe) ** commented  Dec 21, 2022  •


Copy link


###  [ Ghafil Tujhe Gharyal Ye Deta Hai Manadi
](////nazam1.rssing.com/chan-8572938/article97.html#c8572938a97i52404577)


  Topics

[ mqtt ](/topics/mqtt "Topic: mqtt") [ chart ](/topics/chart "Topic: chart") [
csv ](/topics/csv "Topic: csv") [ lua ](/topics/lua "Topic: lua") [ time-
series ](/topics/time-series "Topic: time-series") [ plot ](/topics/plot
"Topic: plot") [ qt5 ](/topics/qt5 "Topic: qt5") [ ros ](/topics/ros "Topic:
ros") [ px4 ](/topics/px4 "Topic: px4") [ visualize-data ](/topics/visualize-
data "Topic: visualize-data") [ rosbag ](/topics/rosbag "Topic: rosbag") [
ulog ](/topics/ulog "Topic: ulog") [ labstreaminglayer
](/topics/labstreaminglayer "Topic: labstreaminglayer")


Despite the number of works published in recent years, vehicle localization
remains an open, challenging problem. While map-based localization and SLAM
algorithms are getting better and better, they remain a single point of
failure in typical localization pipelines. This paper proposes a modular
localization architecture that fuses sensor measurements with the outputs of
off-the-shelf localization algorithms. The fusion filter estimates model
uncertainties to improve odometry in case absolute pose measurements are lost
entirely. The architecture is validated experimentally on a real robot
navigating autonomously proving a reduction of the position error of more than
90% with respect to the odometrical estimate without uncertainty estimation in
a two-minute navigation period without position measurements.


|  x  k  =  [  X  k  Y  k  ψ  k  ω  k  R  ω  k  L  R  k  R  R  k  L  b  k  ]
T  subscript  𝑥  𝑘  superscript  matrix  subscript  𝑋  𝑘  subscript  𝑌  𝑘
subscript  𝜓  𝑘  subscript  superscript  𝜔  𝑅  𝑘  subscript  superscript  𝜔  𝐿
𝑘  subscript  superscript  𝑅  𝑅  𝑘  subscript  superscript  𝑅  𝐿  𝑘  subscript
𝑏  𝑘  𝑇
x_{k}=\begin{bmatrix}X_{k}&Y_{k}&\psi_{k}&\omega^{R}_{k}&\omega^{L}_{k}&R^{R}_%
{k}&R^{L}_{k}&b_{k}\end{bmatrix}^{T}  italic_x start_POSTSUBSCRIPT italic_k
end_POSTSUBSCRIPT = [ start_ARG start_ROW start_CELL italic_X
start_POSTSUBSCRIPT italic_k end_POSTSUBSCRIPT end_CELL start_CELL italic_Y
start_POSTSUBSCRIPT italic_k end_POSTSUBSCRIPT end_CELL start_CELL italic_ψ
start_POSTSUBSCRIPT italic_k end_POSTSUBSCRIPT end_CELL start_CELL italic_ω
start_POSTSUPERSCRIPT italic_R end_POSTSUPERSCRIPT start_POSTSUBSCRIPT
italic_k end_POSTSUBSCRIPT end_CELL start_CELL italic_ω start_POSTSUPERSCRIPT
italic_L end_POSTSUPERSCRIPT start_POSTSUBSCRIPT italic_k end_POSTSUBSCRIPT
end_CELL start_CELL italic_R start_POSTSUPERSCRIPT italic_R
end_POSTSUPERSCRIPT start_POSTSUBSCRIPT italic_k end_POSTSUBSCRIPT end_CELL
start_CELL italic_R start_POSTSUPERSCRIPT italic_L end_POSTSUPERSCRIPT
start_POSTSUBSCRIPT italic_k end_POSTSUBSCRIPT end_CELL start_CELL italic_b
start_POSTSUBSCRIPT italic_k end_POSTSUBSCRIPT end_CELL end_ROW end_ARG ]
start_POSTSUPERSCRIPT italic_T end_POSTSUPERSCRIPT  |  |  (1)
---|---|---|---

where  X  𝑋  X  italic_X  ,  Y  𝑌  Y  italic_Y  and  ψ  𝜓  \psi  italic_ψ
represent the pose of the robot,  ω  R  superscript  𝜔  𝑅  \omega^{R}
italic_ω start_POSTSUPERSCRIPT italic_R end_POSTSUPERSCRIPT  and  ω  L
superscript  𝜔  𝐿  \omega^{L}  italic_ω start_POSTSUPERSCRIPT italic_L
end_POSTSUPERSCRIPT  the wheels rotational speeds while  R  R  superscript  𝑅
𝑅  R^{R}  italic_R start_POSTSUPERSCRIPT italic_R end_POSTSUPERSCRIPT  ,  R  L
superscript  𝑅  𝐿  R^{L}  italic_R start_POSTSUPERSCRIPT italic_L
end_POSTSUPERSCRIPT  and  b  𝑏  b  italic_b  the wheel radii and IMU yaw rate
bias. Subscript  k  𝑘  k  italic_k  indicates that the variables are referred
to time instant  k  𝑘  k  italic_k  . The last three states represent
uncertain model parameters, which strongly affect the odometrical performance
of the localization solution. A sensitivity analysis of this phenomenon is
reported in Figure [ 3  ](https://arxiv.org/html/2403.13452v1#S4.F3 "Figure 3
‣ IV-B State transition model ‣ IV ARCHITECTURE SPECIALIZATION FOR YAPE ‣
Mobile Robot Localization: a Modular, Odometry-Improving Approach") . Notice
how even small inaccuracies can have huge effects on the estimated trajectory.


  Forks

[ **566** forks ](/facontidavide/PlotJuggler/forks)

[ Report repository ](/contact/report-
content?content_url=https%3A%2F%2Fgithub.com%2Ffacontidavide%2FPlotJuggler&report=facontidavide+%28user%29)


the prediction steps.
However, visual localization is prone to outliers. In order
to detect these outliers, we define the following criteria
σθ = |dθ |
√Σθ
and σxy =

 dx √Σx
2
+
dy
Σy
2
, (4)
where d = sˆ− z = (dx,dy,dθ )
T is the difference between the
estimations ( ˆs is the belief state and z is the pose estimation
from the visual localization). The variance in the belief state is
denoted Σx and Σy for the position, and Σθ for the orientation.
This variance is naturally given by the Kalman uncertainty, i.e.
Σ = (Σx,Σy,Σθ )
T . The estimate z is considered to be an outlier,
if σθ or σxy is larger than 2. Intuitively, z is considered outlier,
if the estimation is outside the ellipsoid defined by the double
standard deviations Σx and Σy.
Time-delay of the visual localization is also an issue which
needs to be tackled. In our robot system, for example, the
vision time-delay is about 300ms which is measured beforehand. In order to overcome this problem, the past odometry
information is saved in a buffer. When obtaining a vision
estimation, this information is aligned to the robot’s pose in
the past. Thus, the Kalman belief state now corresponds to
the (past) robot’s pose and the update can be performed. The
complete KVO algorithm is show in Algorithm 1.
349
IV. EVALUATION
In this section, we evaluate the KVO localization approach
and compare it with the A.R.T DTrack system as ground truth.
For the evaluation, different movement patterns are performed
on the Robotino (see Figure 1) which is localized using
odometry, vision, KVO and DTrack.


  Snap (recommended in Ubuntu, to ROS users too)

The snap contains a version of PlotJuggler that can work with either ROS1 or
ROS2.

[ ![Get it from the Snap
Store](https://camo.githubusercontent.com/46aa03c94aa80f6545e01f2ce3966a1d7ae73552495f177b9b71f411408ce325/68747470733a2f2f736e617063726166742e696f2f7374617469632f696d616765732f6261646765732f656e2f736e61702d73746f72652d626c61636b2e737667)
](https://camo.githubusercontent.com/46aa03c94aa80f6545e01f2ce3966a1d7ae73552495f177b9b71f411408ce325/68747470733a2f2f736e617063726166742e696f2f7374617469632f696d616765732f6261646765732f656e2f736e61702d73746f72652d626c61636b2e737667)

To install it in Ubuntu 22.04, with ROS2 support, run:

    sudo snap install plotjuggler

If you are still using ROS1 (Ubuntu 20.04), install instead:

    sudo snap install plotjuggler-ros


###  [ Good Will Hunting 1997 Dual Audio 720p BRRip [Hindi – English] ESubs
](////downloadhub26.rssing.com/chan-63389705/article159.html#c63389705a159i1981662480)


![CALIFORNIA: DUI arrests by Chico Police March
2019](//i2.wp.com/www.dwihitparade.com/wp-
content/uploads/2019/04/Sean-P.-Biswurm-33-of-Chico-Calif.-DUI-arrest-on-
March-18-2019-by-Chico-Police.png?w=550)


3.6306968185466776e-08, 1.1326755032269357e-06, 2.142804267063538e-06,
-7.795051814737668e-06, 5.157131696321911e-10, 0.001103251490413962,
-4.92147153421835e-08, 3.531822011990498e-05, -3.2979372797959194e-05,
2.910017471539165e-08, 3.6306968185466776e-08, -4.9214715342183496e-08,
0.000493887418752126] twist: twist: linear: x: 1.91971096583 y:
-0.598022689859 z: 0.50493344106 angular: x: 0.0262928035401 y:
-0.0102758377666 z: -0.00745906155821 covariance: [6.331493813516004, 0.0,
0.0, 0.0, 0.0, 0.0, 0.0, 6.331493813516004, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
2.6113483803761124, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0003851594532902605,
4.605563489112172e-13, 4.061455269627516e-14, 0.0, 0.0, 0.0,
4.605563489112171e-13, 0.0003851593561959551, -8.36557957900773e-12, 0.0, 0.0,
0.0, 4.0614552696283576e-14, -8.365579579007733e-12, 0.00030620271386102107]
\--- header: seq: 1594 stamp: secs: 1432235551 nsecs: 167203903 frame_id:
"odom" child_frame_id: "base_link" pose: pose: position: x: -25.7253968478 y:
-41.1062007752 z: -16.2245404066 orientation: x: 0.364273043958 y:
-0.600533967326 z: -0.61048560356 w: 0.366021080512 covariance:
[5008.802031236015, 1408.6378258257955, 12.947200327348586,
2.1325978785158645e-06, 1.1403697067180848e-06, 3.538685081620088e-05,
1408.6378258257903, 7060.5058708601255, -6.132336376448345,
-1.114938972991315e-06, 2.1561376318999096e-06, -3.2932407512073215e-05,
12.947200327348469, -6.132336376448385, 7850.958226821027,
-2.079979981832892e-06, -7.783246537269239e-06, 5.323378112419656e-08,
2.132597878515865e-06, -1.114938972991315e-06, -2.079979981832892e-06,
0.001103248400879815, 5.201962220313453e-10, 4.4160578457126984e-08,
1.1403697067180844e-06, 2.1561376318999096e-06, -7.783246537269235e-06,
5.201962220313455e-10, 0.001103249182621376, -6.583465241377887e-08,
3.538685081620088e-05, -3.2932407512073215e-05, 5.323378112419657e-08,
4.4160578457126984e-08, -6.58346524137789e-08, 0.0004938869557253063] twist:
twist: linear: x: 1.91857693379 y: -0.59495115496 z: 0.503116769612 angular:
x: 0.00799503491898 y: -0.00256190295846 z: -0.00737636371411 covariance:
[6.334836495079762, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 6.334836495079762, 0.0, 0.0,
0.0, 0.0, 0.0, 0.0, 2.6123586487433075, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,
0.0003851593549689014, 4.813698073764745e-13, 3.9415549023586156e-14, 0.0,
0.0, 0.0, 4.813698073764745e-13, 0.00038515925787299216,
-7.917437114678017e-12, 0.0, 0.0, 0.0, 3.941554902359113e-14,
-7.917437114678017e-12, 0.0003062023411378149] As shown, position (x, y)
covariance only grows and never seems to shrink. Could anyone please help on
this? Thank you in advance!


[ ![19 Reader-Favourite March Purchases — From Steals To
Splurges](//www.refinery29.com/images/11700602.png?auto=webp&width=750&height=938&quality=85&crop=375:469)
](////refinery1042.rssing.com/chan-72297680/article18978.html#c72297680a18978i1490871663)


###  [ Stay Salty POTS Awareness Stretchy Stacking Bracelets | Set of
Three|...
](////pomaces4.rssing.com/chan-3795444/article11960.html#c3795444a11960i1086411135)


Open


[ ](//www.rssing.com/index.php?zw=2123 "Home") [ $ ](javascript:; "MoMoney")


[ ](javascript:; "Share Article") [
](//www.rssing.com/contact.php?r=o6&u=%2F%2Fquestion3152.rssing.com%2Fchan-47151955%2Farticle427-live.html
"Article Support")


#  [ Robot Localization with Odometry and UM7
](//question3152.rssing.com/chan-47151955/article439-live.html)


[ NSFW?  ](javascript:; "Mark channel Not-Safe-For-Work")


Query


[ ![Stay Salty POTS Awareness Stretchy Stacking Bracelets | Set of
Three|...](//i.etsystatic.com/28677176/r/il/b2413c/4350795851/il_570xN.4350795851_fflz.jpg)
](////pomaces4.rssing.com/chan-3795444/article11960.html#c3795444a11960i1086411135)


[ _≫_ Next: IMU orientation mismatch with RVIZ
](//question3152.rssing.com/chan-47151955/all_p22.html#c47151955a422 "Next
Article")


    * [ Enterprise ](/enterprise)
    * [ Teams ](/team)
    * [ Startups ](/enterprise/startups)
    * [ Education  ](https://education.github.com)


Is there anything else that you would recommend in order to fuse the IMU
information?

---

All reactions


The proposed localization architecture comprises two layers, exemplified in
Figure [ 1  ](https://arxiv.org/html/2403.13452v1#S2.F1 "Figure 1 ‣ II
LOCALIZATION ARCHITECTURE ‣ Mobile Robot Localization: a Modular, Odometry-
Improving Approach") . The first layer, on the left, is constituted by the
localization sources, while the second layer performs the sensor fusion
operations. Localization sources could be physical sensors, like GNSS
receivers, encoders, IMUs and magnetometers or other algorithms that provide
useful localization data, like map-based localization algorithms or LiDAR
odometries.


Author


[ _≪_ Previous: What amount of odometry drift would be considered having an
accurate base?
](//question3152.rssing.com/chan-47151955/all_p22.html#c47151955a433 "Previous
Article")


[ rtabmap_ros/src/OdometryROS.cpp
](https://github.com/introlab/rtabmap_ros/blob/3040a5d8f5c5c80bd5cffddd26f6f189c56dee91/src/OdometryROS.cpp#L476-L477)


Hello, I'm trying to configure a robot with GPS for outdoor navigation. For
that I'm using robot_localization package with the navSat transform and I want
to fuse hectorMapping for pathPlanning and obsctacle avoindance. I've seen
this package I tried to replicate for my purposes, so I have this
localization.yaml file: # For parameter descriptions, please refer to the
template parameter files for each node. ekf_se_odom: # Used only for
broadcasting odom to base_link transforms frequency: 30 sensor_timeout: 0.1
two_d_mode: true transform_time_offset: 0.0 transform_timeout: 0.0
print_diagnostics: true debug: false map_frame: map odom_frame: odom
base_link_frame: base_link world_frame: odom #
------------------------------------- # Wheel odometry: odom0:
/husky_velocity_controller/odom odom0_config: [false, false, false, false,
false, false, true, true, true, false, false, false, false, false, false]
odom0_queue_size: 10 odom0_nodelay: true odom0_differential: false
odom0_relative: false # ------------------------------------- # Laser
scanmatching odometry: odom1: scanmatch_odom odom1_config: [false, false,
false, false, false, false, true, true, true, false, false, true, false,
false, false] odom1_queue_size: 10 odom1_nodelay: true odom1_differential:
false odom1_relative: false # -------------------------------------- # imu
configure: imu0: /imu/data imu0_config: [false, false, false, true, true,
false, false, false, false, true, true, true, true, true, true] imu0_nodelay:
false imu0_differential: false imu0_relative: false imu0_queue_size: 10
imu0_remove_gravitational_acceleration: true use_control: false
process_noise_covariance: [--- ] initial_estimate_covariance: [ ----]
ekf_se_map: frequency: 30 sensor_timeout: 0.1 two_d_mode: true
transform_time_offset: 0.0 transform_timeout: 0.0 print_diagnostics: true
debug: false map_frame: map odom_frame: odom base_link_frame: base_link
world_frame: map # ------------------------------------- # Wheel odometry:
odom0: /husky_velocity_controller/odom odom0_config: [false, false, false,
false, false, false, true, true, true, false, false, true, false, false,
false] odom0_queue_size: 10 odom0_nodelay: true odom0_differential: false
odom0_relative: false # ------------------------------------- # GPS odometry:
odom1: /gps/rtkfix odom1_config: [true, true, false, false, false, false,
false, false, false, false, false, false, false, false, false]
odom1_queue_size: 10 odom1_nodelay: true odom1_differential: false
odom1_relative: false # ------------------------------------- # Laser
scanmatching odometry: odom2: scanmatch_odom odom2_config: [false, false,
false, false, false, false, true, true, true, false, false, true, false,
false, false] odom2_queue_size: 10 odom2_nodelay: true odom2_differential:
false odom2_relative: false # -------------------------------------- # imu


[ PlotJuggler.desktop
](/facontidavide/PlotJuggler/blob/main/PlotJuggler.desktop
"PlotJuggler.desktop")

|


Additional navigation options


Sorry, something went wrong.


April 8, 2024, 1:08 pm


[ ![@takahiko-hasegawa-
hdjp](https://avatars.githubusercontent.com/u/90363936?s=80&u=9d2224b0bc56a0f78c91348cc69de7d8fbfcdadd&v=4)
](/takahiko-hasegawa-hdjp)


However, in the same callback function, it doesnt start prcoessing the data as
the buffered data seems empty or not valid:
Wont call the processData function dince the bufferedData is not valid?
if(bufferedData_.first.isValid() && stamp > bufferedData_.first.stamp())
{
SensorData data = bufferedData_.first;
bufferedData_.first = SensorData();
processData(data, bufferedData_.second);
}


###  IV-C  Measurement model


[ ](javascript:; "Ouch") 0


[ takahiko-hasegawa-hdjp ](/takahiko-hasegawa-hdjp) opened this issue  Dec 18,
2022  · 7 comments


[ Search ](javascript:;)


Is it better to build with SLAM such as OKVIS within rtabmap when using IMU
data? or better to use robot localization instead?


[ _≫_ Next: robot_localization with cartographer and amcl
](//question3152.rssing.com/chan-47151955/all_p22.html#c47151955a436 "Next
Article")


RSSing.com


    * [ CI/CD & Automation ](/solutions/ci-cd/)
    * [ DevOps ](/solutions/devops/)
    * [ DevSecOps  ](https://resources.github.com/devops/fundamentals/devsecops/)


[ .clang-format ](/facontidavide/PlotJuggler/blob/main/.clang-format ".clang-
format")

|


[ ![@matlabbe](https://avatars.githubusercontent.com/u/2319645?s=52&v=4)
](/matlabbe) [ ![@takahiko-hasegawa-
hdjp](https://avatars.githubusercontent.com/u/90363936?s=52&v=4) ](/takahiko-
hasegawa-hdjp)


[ ](//www.rssing.com/index.php?zw=2123 "Home") [ $ ](javascript:; "MoMoney")


![Good Will Hunting 1997 Dual Audio 720p BRRip \[Hindi – English\]
ESubs](//i0.wp.com/2.bp.blogspot.com/-BNeRHGE6vos/V1gESmKp3AI/AAAAAAAADVM/SBOnE2K617oqzf7FLZQMMtFmvLYnIJqegCLcB/s1600/Good%2BWill%2BHunting%2B%25281997%2529%2BBluray.jpg?resize=350%2C450&ssl=1)


Hello, I very recently posted a question about the robot_localization package,
and received some very good insight. I managed to fuse my wheel odometry with
my IMU readings, but the result is not what I was expecting. I'm noticing a
very significant bit of lag in updating the filtered transform. My initial
approach was to start out trying to fuse all the data at once, but I quickly
learned I needed to try this with individual data (i.e. just velocity of
odometry). Hopefully showing my setup and some example videos will help
explain the problem I'm having. In the following example, I'm attempting the
simplest setup possible. I only want the EKF to use my odometry's forward
velocity value. Here's the setup & config file I'm using for this: On ros-
kinetic: frequency: 30 sensor_timeout: 0.1 two_d_mode: true
transform_time_offset: 0.0 transform_timeout: 0.0 print_diagnostics: true
publish_tf: true publish_acceleration: false use_control: false #map_frame:
map # Defaults to "map" if unspecified #odom_frame: odom_raw # Defaults to
"odom" if unspecified #base_link_frame: base_link_raw # Defaults to
"base_link" if unspecified #world_frame: odom # Defaults to the value of
odom_frame if unspecified odom0: odom #x, y, z, roll, pitch, yaw, vx, vy, vz,
vroll, vpitch, vyaw, ax, ay, az odom0_config: [false, false, false, false,
false, false, true , false, false, false, false, false, false, false, false]
odom0_queue_size: 10 odom0_nodelay: false odom0_differential: false
odom0_relative: false odom0_pose_rejection_threshold: 5
odom0_twist_rejection_threshold: 1 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] 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, 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, 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, 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, 0, 0, 0, 0,


August 30, 2018, 2:11 pm


[ ](javascript:; "Share Article") [
](//www.rssing.com/contact.php?r=o6&u=%2F%2Fquestion3152.rssing.com%2Fchan-47151955%2Farticle425-live.html
"Article Support")


Copy link


[ _≪_ Previous: robot_localization non uniform inaccurate odometry
](//question3152.rssing.com/chan-47151955/all_p22.html#c47151955a431 "Previous
Article")


Sorry, something went wrong.


  Transform and analyze your data

PlotJuggler makes it easy to visualize data but also to analyze it. You can
manipulate your time series using a simple and extendable Transform Editor.

[ ![](/facontidavide/PlotJuggler/raw/main/docs/function_editor.png)
](/facontidavide/PlotJuggler/blob/main/docs/function_editor.png)

Alternatively, you may use the Custom Function Editor, which allows you to
create Multi-input / Single-output functions using a scripting language based
on [ Lua ](https://www.tutorialspoint.com/lua/index.htm) .

If you are not familiar with Lua, don't be afraid, you won't need more than 5
minutes to learn it ;)

[ ![](/facontidavide/PlotJuggler/raw/main/docs/custom_editor.png)
](/facontidavide/PlotJuggler/blob/main/docs/custom_editor.png)


[ ](javascript:; "Ouch") 0


[ ](javascript:; "Like") 0


More Pages to Explore .....


  * [ //apkmirror717.rssing.com/chan-75476424/article41.html ](//apkmirror717.rssing.com/chan-75476424/article41.html)
  * [ //lordisimo307.rssing.com/chan-17645870/index-page1.html ](//lordisimo307.rssing.com/chan-17645870/index-page1.html)
  * [ //nightsbridge83.rssing.com/chan-24852476/index-page1.html ](//nightsbridge83.rssing.com/chan-24852476/index-page1.html)
  * [ //decimal218.rssing.com/chan-51975378/index-page1.html ](//decimal218.rssing.com/chan-51975378/index-page1.html)
  * [ //thefantasyfix475.rssing.com/chan-17645945/index-latest.php ](//thefantasyfix475.rssing.com/chan-17645945/index-latest.php)
  * [ //roughriders189.rssing.com/chan-17645322/index-latest.php ](//roughriders189.rssing.com/chan-17645322/index-latest.php)
  * [ //advised150.rssing.com/chan-75476119/article9.html ](//advised150.rssing.com/chan-75476119/article9.html)
  * [ //advocating2909.rssing.com/chan-51975165/index-page1.html ](//advocating2909.rssing.com/chan-51975165/index-page1.html)
  * [ //vergessene196.rssing.com/chan-17645232/article25.html ](//vergessene196.rssing.com/chan-17645232/article25.html)
  * [ //aqqiah1.rssing.com/chan-34493024/article101.html ](//aqqiah1.rssing.com/chan-34493024/article101.html)
  * [ //complus11.rssing.com/chan-17645693/index-latest.php ](//complus11.rssing.com/chan-17645693/index-latest.php)
  * [ //ireland10002.rssing.com/chan-34493064/index-page1.html ](//ireland10002.rssing.com/chan-34493064/index-page1.html)
  * [ //twitter17421.rssing.com/chan-17645471/article10.html ](//twitter17421.rssing.com/chan-17645471/article10.html)
  * [ //mattbannister14.rssing.com/chan-24852962/index-latest.php ](//mattbannister14.rssing.com/chan-24852962/index-latest.php)
  * [ //latin3479.rssing.com/chan-51976324/index-page1.html ](//latin3479.rssing.com/chan-51976324/index-page1.html)
  * [ //tales3526.rssing.com/chan-42358061/index-page1.html ](//tales3526.rssing.com/chan-42358061/index-page1.html)
  * [ //elliott2512.rssing.com/chan-42357707/article14.html ](//elliott2512.rssing.com/chan-42357707/article14.html)
  * [ //realty3005.rssing.com/chan-24852848/index-page1.html ](//realty3005.rssing.com/chan-24852848/index-page1.html)
  * [ //inhumane102.rssing.com/chan-8557661/article6.html ](//inhumane102.rssing.com/chan-8557661/article6.html)
  * [ //junqueira56.rssing.com/chan-51975502/index-latest.php ](//junqueira56.rssing.com/chan-51975502/index-latest.php)


###  [ Saline County Jail Booking Activity – Saturday, May 30th
](////salina38.rssing.com/chan-7227570/article681.html#c7227570a681i1053563629)


April 9, 2024, 4:00 pm


###  V-A  Loss of one absolute pose source


deceleration_limits: [1.3, 0.0, 0.0, 0.0, 0.0, 4.5] acceleration_gains: [0.8,
0.0, 0.0, 0.0, 0.0, 0.9] deceleration_gains: [1.0, 0.0, 0.0, 0.0, 0.0, 1.0]
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]
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, 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, 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, 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, 0, 0, 0, 0,
1e-9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1e-9]


Jump to bottom


In terms of the IMU integration, unfortunately I cannot use stereo_odometry
due to the fact that the setup we have is with a camera with rgb-d info so no
separate topic for left image and right image.


                                                          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,     0,     0,     0,    0,    1e-9]</rosparam>

    </node>


As more and more autonomous mobile robots (AMRs) are getting deployed “into
the wild”, the need for robust, reliable and always-available localization is
increasing. This is especially true when focusing on the urban-environments,
where last-mile delivery robots are becoming an interesting option for many
businesses, while the localization problem is exacerbated by the challenging
context. GNSS-based localization with Real Time Kinematics (RTK) corrections
has been successfully employed in some application scenarios like agricultural
fields, but its quality in urban areas is uneven, with vast areas where the
signal has low quality due to multi-path reflections or is completely
unavailable (indoor or covered areas and underpasses). For this reason, a lot
of effort is directed towards the development of map-based localization
algorithms  [ [ 1 ](https://arxiv.org/html/2403.13452v1#bib.bib1) , [ 2
](https://arxiv.org/html/2403.13452v1#bib.bib2) ]  , that compare live sensor
data (typically LiDARs or cameras) to an a-priori known map of the environment
to estimate the vehicle location. While these provide invaluable data in some
settings, they are not a silver bullet and previous works have shown how they
may struggle in some scenarios like vast open areas and repetitive
environments  [ [ 3 ](https://arxiv.org/html/2403.13452v1#bib.bib3) ]  . To
mitigate these issues sensor fusion has been explored since the early days of
robotics. Although some modern approaches integrate more sensors, like GNSS
receivers, in a graph Simultaneous Localization and Mapping (SLAM) framework
[ [ 4 ](https://arxiv.org/html/2403.13452v1#bib.bib4) ]  , these tend to be
computationally complex and rarely consider the peculiarities of the vehicle
on which the algorithm is deployed, resulting in high sensitivity to sensor
calibrations and completely unrealistic motion estimates during failures
(sudden jumps, lateral translations for holonomic vehicles or vertical
movement for robots working in a planar environment, for example). Indeed,
most of these SLAM systems aim to be off-the-shelf algorithms compatible with
a vast variety of vehicles and setups, assuming unconstrained rigid body
dynamics. Adapting them to exploit the motion constraints imposed by a
specific vehicle can be a resource-intensive hurdle, even though the benefits
could be noteworthy. More classical approaches employ Extended Kalman Filters
(EKFs), as it is a lightweight and versatile sensor fusion algorithm, with
classical examples fusing proprioceptive sensors (like IMUs and wheel
encoders) with GNSS measurements  [ [ 5
](https://arxiv.org/html/2403.13452v1#bib.bib5) , [ 6
](https://arxiv.org/html/2403.13452v1#bib.bib6) ]  . This enables the creation
of high-frequency and drift-free positional data as long as an unobstructed
view of the sky is available which, as previously stated, is a strong
assumption. While approaches fusing a vast variety of sensors have been


April 14, 2024, 8:14 am


[ ↂ
](////starve149.rssing.com/chan-67795027/article12985.html#c67795027a12985i625842650
"Giant Crop Cheat Sheet")


##  Footer


Luca Mozzarelli  1  1  {}^{1}  start_FLOATSUPERSCRIPT 1 end_FLOATSUPERSCRIPT
, Luca Cattaneo  1  1  {}^{1}  start_FLOATSUPERSCRIPT 1 end_FLOATSUPERSCRIPT
, Matteo Corno  1  1  {}^{1}  start_FLOATSUPERSCRIPT 1 end_FLOATSUPERSCRIPT
and Sergio Matteo Savaresi  1  1  {}^{1}  start_FLOATSUPERSCRIPT 1
end_FLOATSUPERSCRIPT  1  1  {}^{1}  start_FLOATSUPERSCRIPT 1
end_FLOATSUPERSCRIPT  The authors are with the Dipartimento di Elettronica,
Informazione e Bioingegneria, Politecnico di Milano, 20133 Milano, Italy.
Email:  {luca.mozzarelli, luca1.cattaneo, matteo.corno,
sergio.savaresi}@polimi.it  The experimental data presented in this paper was
collected during the project “BUDD-e: Blind-assistive aUtonomous Droid
Device”, which is financially supported by Politecnico di Milano, Polisocial
Award 2021.


Copy link


Viewing all 521 articles


#  [ robot_localization non uniform inaccurate odometry
](//question3152.rssing.com/chan-47151955/article431-live.html)


Cancel  Create saved search


* Solutions


[ ↂ
](////daily12844.rssing.com/chan-58023368/article3450.html#c58023368a3450i2041549972
"Who Is Junior Pope?| Biography| Profile| History Of Nollywood Actor “Pope
Obumneme Odonwodo” Popularly known as “Junior Pope”")


[ Copy Share URL ](javascript:;)


  Debian packages for ROS User

Install the ROS packages with:

    sudo apt install ros-$ROS_DISTRO-plotjuggler-ros

To launch PlotJuggler on ROS, use the command:

    rosrun plotjuggler plotjuggler

or, if are using ROS2:

    ros2 run plotjuggler plotjuggler

ROS plugins are available in a separate repository: [
https://github.com/PlotJuggler/plotjuggler-ros-plugins
](https://github.com/PlotJuggler/plotjuggler-ros-plugins)

Please take a look at the instructions in that repository if you want to
compile PJ and its ROS plugins from source.


[ _≪_ Previous: Wheel Odometry Covariance
](//question3152.rssing.com/chan-47151955/all_p22.html#c47151955a421 "Previous
Article")


|  y  ^  k  i    m    u  =  ω  k  R    R  k  R  −  ω  k  L    R  k  L  T
\+  b  k  .  superscript  subscript  ^  𝑦  𝑘  𝑖  𝑚  𝑢  subscript  superscript
𝜔  𝑅  𝑘  subscript  superscript  𝑅  𝑅  𝑘  subscript  superscript  𝜔  𝐿  𝑘
subscript  superscript  𝑅  𝐿  𝑘  𝑇  subscript  𝑏  𝑘
\hat{y}_{k}^{imu}=\frac{\omega^{R}_{k}R^{R}_{k}-\omega^{L}_{k}R^{L}_{k}}{T}+b_%
{k}.  over^ start_ARG italic_y end_ARG start_POSTSUBSCRIPT italic_k
end_POSTSUBSCRIPT start_POSTSUPERSCRIPT italic_i italic_m italic_u
end_POSTSUPERSCRIPT = divide start_ARG italic_ω start_POSTSUPERSCRIPT italic_R
end_POSTSUPERSCRIPT start_POSTSUBSCRIPT italic_k end_POSTSUBSCRIPT italic_R
start_POSTSUPERSCRIPT italic_R end_POSTSUPERSCRIPT start_POSTSUBSCRIPT
italic_k end_POSTSUBSCRIPT - italic_ω start_POSTSUPERSCRIPT italic_L
end_POSTSUPERSCRIPT start_POSTSUBSCRIPT italic_k end_POSTSUBSCRIPT italic_R
start_POSTSUPERSCRIPT italic_L end_POSTSUPERSCRIPT start_POSTSUBSCRIPT
italic_k end_POSTSUBSCRIPT end_ARG start_ARG italic_T end_ARG + italic_b
start_POSTSUBSCRIPT italic_k end_POSTSUBSCRIPT .  |  |  (6)
---|---|---|---

###  IV-D  Dealing with multi-rate and unavailable measures


However, I'm a little confused on how to feed the IMU input to the rtabmap
system
What I tried so far is the followings:


  * [ Notifications ](/login?return_to=%2Fintrolab%2Frtabmap_ros)
  * [ Fork  545  ](/login?return_to=%2Fintrolab%2Frtabmap_ros)
  * [ Star  889  ](/login?return_to=%2Fintrolab%2Frtabmap_ros)


Is there any launch file that i can take a look at for imu fusion for robot
localization?

---

All reactions


[ _≪_ Previous: Confused with setup for robot_localization
](//question3152.rssing.com/chan-47151955/all_p22.html#c47151955a424 "Previous
Article")


Open


#  Search code, repositories, users, issues, pull requests...


THE TABLE SHOWS THE ERRORS OF ALL THREE LOCALIZATION METHODS
COMPARED TO THE GROUND TRUTH ON FOUR DIFFERENT EXPERIMENTS.
THE POSITION ERROR IS THE EUCLIDEAN DISTANCE TO THE TRUE
POSITION, WHILE THE ANGLE ERROR IS THE ABSOLUTE VALUE OF THE
DIFFERENCE BETWEEN THE ANGLE ESTIMATE AND THE TRUE ANGLE. IN
EXPERIMENT 4, KVO(*) SHOWS THE LOCALIZATION RESULTS FOR THE
AREAS WHEN VISUAL MARKERS ARE AVAILABLE.
position error in cm angle error in degree
mean 95% perc. max mean 95% perc. max
Exp. 1
KVO [∼ 37Hz] 3.21 8.62 22.39 1.24 2.46 3.72
Vision [∼ 7Hz] 5.89 15.69 38.62 1.38 2.53 4.16
Odometry [∼ 30Hz] 14.01 24.74 29.38 4.05 8.48 8.65
Exp. 2
KVO [∼ 37Hz] 2.63 6.26 14.40 1.99 5.02 22.63
Vision [∼ 7Hz] 4.33 12.90 25.55 4.87 16.96 178.48
Odometry [∼ 30Hz] 8.05 11.23 16.47 3.49 8.55 13.87
Exp. 3
KVO [∼ 35Hz] 3.29 7.90 15.44 2.67 6.67 11.82
Vision [∼ 5Hz] 8.73 19.58 46.17 7.28 15.47 40.50
Odometry [∼ 30Hz] 19.01 39.21 42.77 12.11 24.45 24.64
Exp. 4
KVO [∼ 35Hz] 4.11 12.02 22.28 3.36 10.32 18.01
KVO(*) [∼ 35Hz] 3.37 7.42 17.61 2.68 8.09 15.60
Vision [∼ 5Hz] 9.98 22.66 73.49 13.47 36.41 166.89
Odometry [∼ 30Hz] 35.68 71.08 74.67 6.48 16.43 19.91
REFERENCES
[1] I. J. Cox and G. T. Wilfong, Eds., Autonomous robot vehicles. New
York, NY, USA: Springer-Verlag New York, Inc., 1990.
[2] Y. Qing-xiao, Y. Can, F. Zhuang, and Z. Yan-zheng, “Research of
the localization of restaurant service robot,” International Journal of
Advanced Robotic Systems, vol. 3, 2010.
[3] J. Levinson and S. Thrun, “Robust vehicle localization in urban environments using probabilistic maps,” in ICRA, 2010, pp. 4372–4378.
[4] G. M. Hoffmann, H. Huang, S. L. Waslander, and C. J. Tomlin,
“Precision flight control for a multi-vehicle quadrotor helicopter testbed,”
Sept 2011.
[5] A. Pronobis and B. Caputo, “COLD: COsy Localization Database,” The
International Journal of Robotics Research (IJRR), vol. 28, no. 5, pp.
588–594, 2009.
[6] X. Li, M. Wang, and A. Zell, “Dribbling control of omnidirectional


[ _≫_ Next: robot_localization non uniform inaccurate odometry
](//question3152.rssing.com/chan-47151955/all_p22.html#c47151955a431 "Next
Article")


[ ](//www.rssing.com/index.php?zw=2123 "Home") [ $ ](javascript:; "MoMoney")


Hello, I am using an ArduPilot board with an internal IMU connected to an
external GPS+Compass module. I wanted to localize a frame `base_link` in
relation to `odom_combined`. This base link is connected to other frames, so I
have created a simple URDF file:  So, I went outside and with the sensors,
moved around making a rectangle (moving forwards + turn right + forwards ...).
This the trajectory I did: ![Trajectory seen on a
map.](/upfiles/15365375007771977.jpg) If I plot the latitude and longitude
from the NavsatFix data, I have the following: ![GPS
Data](/upfiles/15365375856519358.jpg) (I recorded the data from two GPS
modules, but the External Module is the one I am talking about). Everything
seems fine, but if I try to use the `robot_localization_package` with the
`navsat_transform_node` to estimate IMU which will then be the input to the
ekf_localization_node, it shows the error: [ WARN] Transform from base_link to
odom_combined was unavailable for the time requested. Using latest instead.
And the frame in RViz does not seems fine at all, with very aggressive
discrete jumps. Based on another
[question](https://answers.ros.org/question/300345/robot-localization-package-
transform-from-base_link-to-odom-was-unavailable-for-the-time-requested-using-
latest-instead-imugps/ "Robot Localization Package: Transform from base_link
to odom was unavailable for the time requested. Using latest instead.
(IMU+GPS)") I did, I set the `predict_to_current_time` parameter to true, but
it did not solve the problem. Also, the `gps/filtered` output (shown below)
from `navsat_transform_node` is very different from the original gps data:
![gps/filtered](/upfiles/15365633543078592.jpg) Yet, the gps output from
`navsat_transform_node` that will be the input from `ekf_localization_node` is
correct (makes a perfect rectangle). This means that the problem is related to
the IMU, right? I really do not know how I can solve this problem because, the
information from the sensors seems correct. The IMU frequency is around 2Hz. I
know that it is too low, but I can not figure why (the mavros launch is
commented below). Also, here is the result of `$ rosrun tf view_frames`:
![frames](/upfiles/15365388161711451.png)
[Here](https://drive.google.com/file/d/1JfDAmth4XxFW5PAUjCmiiXku8CiDvswg/view?usp=sharing
"Bag") is the bag recorded in the parking lot (containing the IMU and
NavSat/fix data). Also, I have created a [another
bag](https://drive.google.com/file/d/1zHSjjpEPaycbnvna9Nl90DmRRsk04Qhz/view?usp=sharing
"Bag EKF") which, not only contains the IMU+Navsat information, but also, the
topics associated with the `robot_localization_package`, when running
`navsat_transform_node` and `ekf_localization_node`.  [true, true, false,
false, false, false, false, false, false, false, false, false, false, false,
false]  [false, false, false, true, true, true,  false, false, false, true,


![Refer to caption](x4.png) Figure 4:  Aerial view of the trajectory traveled
by Yape in the courtyard of the Niguarda Hospital in Milan.


Latest commit


[ ](javascript:; "Like") 0


Assignees


[ _≫_ Next: Robot Localization with Odometry and UM7
](//question3152.rssing.com/chan-47151955/all_p22.html#c47151955a439 "Next
Article")


![Refer to caption](x3.png) (b)


  * [ RSSing>> ](//www.rssing.com/index.php)
  * [ Latest ](//www.rssing.com/index.php?l=l)
  * [ Popular ](//www.rssing.com/index.php?l=p)
  * [ Top Rated ](//www.rssing.com/index.php?l=r)
  * [ Trending ](//www.rssing.com/index.php?l=t)


[ _≪_ Previous: Robot Localization Package: Transform from base_link to odom
was unavailable for the time requested. Using latest instead. (IMU+GPS)
](//question3152.rssing.com/chan-47151955/all_p22.html#c47151955a423 "Previous
Article")


**[ matlabbe ](/matlabbe) ** commented  Dec 30, 2022


As introduced above, we aim to achieve a high-frequency output, independently
from the acquisition frequency of the slowest sensor. In our case, both the
encoders and the IMU provide data at  100    H    z  100  𝐻  𝑧  100~{}Hz
100 italic_H italic_z  : we select the execution frequency  1  /  T  s  =  60
  H    z  1  subscript  𝑇  𝑠  60  𝐻  𝑧  1/T_{s}=60~{}Hz  1 / italic_T
start_POSTSUBSCRIPT italic_s end_POSTSUBSCRIPT = 60 italic_H italic_z  to
maximize the probability of receiving new samples from the proprioceptive
sensors before each iteration, even under severe congestion of the ROS
network. In practice, this means that the predicted measurements vector will
have a minimum of 3 elements and a maximum of 8, with GNSS measures being
integrated roughly every 6 iterations and Cartographer ones every 3.


[ ![First Pictures of the Eclipse ! !
!](//thepeoplescube.com/red/download/file.php?id=57244&sid=5311a0068099bb708e6eae6fd0456e59)
](////political6691.rssing.com/chan-78391714/article69.html#c78391714a69i477360060)


##  III  EXPERIMENTAL SETUP


###  [ Hustisya para kay Randy Echanis
](////filator3.rssing.com/chan-3245654/article2282.html#c3245654a2282i1151529573)


Author


[ Search syntax tips ](https://docs.github.com/search-github/github-code-
search/understanding-github-code-search-syntax)


false, false, false, false, false, false, false, false, false, false, false,
false] odom0_queue_size: 5 odom0_nodelay: false odom0_differential: false
odom0_relative: false odom0_pose_rejection_threshold: 5
odom0_twist_rejection_threshold: 1 imu0: imu imu0_config: [false, false,
false, false, false, true, false, false, false, false, false, false, false,
false, false] imu0_nodelay: false imu0_differential: false imu0_relative:
false imu0_queue_size: 5 imu0_pose_rejection_threshold: 0.8
imu0_twist_rejection_threshold: 0.8
imu0_linear_acceleration_rejection_threshold: 0.8
imu0_remove_gravitational_acceleration: false use_control: true
stamped_control: false control_timeout: 0.2 control_config: [true, false,
false, false, false, true] acceleration_limits: [1.3, 0.0, 0.0, 0.0, 0.0, 3.4]
deceleration_limits: [1.3, 0.0, 0.0, 0.0, 0.0, 4.5] acceleration_gains: [0.8,
0.0, 0.0, 0.0, 0.0, 0.9] deceleration_gains: [1.0, 0.0, 0.0, 0.0, 0.0, 1.0]
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]
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, 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, 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, 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, 0, 0, 0, 0,
1e-9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1e-9]


[ _≫_ Next: what should the frame_id of "poseX" be, before use
robot_localization package?
](//question3152.rssing.com/chan-47151955/all_p22.html#c47151955a434 "Next
Article")


|  |  bufferedData_.  first  = data;
---|---
|  bufferedData_.  second  = header;

then on next imuCallback, when imu_ buffer has enough data, processData will
be done on the buffered image. In other words, the code is waiting valid imu
data before processing the images. This is used to correctly initialize the
orientation of the first odometry pose, accordingly to gravity, then imu is
used in local BA to keep odometry aligned to gravity over time. IMU is also
used to get better orientation guess for odometry's next visual frame.

All reactions


and the high investment cost (e.g. several ten thousand e for
our improved DTrack system). In this paper, we investigate
possibilities for mobile robot localization using off-the-shelf
vision cameras instead of expensive high-end devices.
In recent years, vision cameras have become more important
in robot applications [5], as they provide rich information while
requiring little investments (starting from 100 USD). However,
a disadvantage of vision are high computational requirements
resulting in a low tracking frequency, e.g. 3 − 7Hz, which
is not sufficient for many robot applications, such as indoor
navigation. In this work, the key idea is to combine the vision
data with other robot’s sensor signals, e.g. odometry, in order
to obtain information which enables accurate localization at
higher tracking frequencies. Odometry is an natural choice as
it is available in most mobile robot systems, where sensors
are used for monitoring the rotation of the robot’s wheels.
Odometry can be employed for pose estimation at a high
frequency. However, in opposite to localization methods based
on vision or laser data, odometry allows only a relative
localization, i.e. it computes the movements relative to the
last pose. The consequence is that the estimation errors are
accumulated over time and, thus, the odometry localization
becomes inaccurate in the long run.
Our approach is to merge vision and odometry information
using a Kalman-Filter while combining the strengths of both
methods, i.e. the high tracking frequency of odometry and the
accuracy of vision. Intuitively, the vision information is used
to correct the odometry estimations making the resulting localization more accurate and yet fast. To evaluate our approach,
we use a version of the Festo Robotino with a Guppy PRO F125 camera which is mounted on top of the robot (see Figure
1). We compare the localization results of our approach, the
Kalman-filtered Vision and Odometry localization (KVO), with
the highly accurate DTrack system as ground truth.
The remainder of this paper is organized as follows. Section
II gives an overview about localization with odometry and
vision, respectively. In Section III-B, we explain our KVO
localization method in details. We extensively evaluate KVO
on the robot platform Robotino in Section IV, followed by a
conclusion and an outlook in the last Section. V.
II. LOCALIZATION METHODS
In this section, we describe the vision and odometry localization methods for our mobile robotics platform Robotino.


Copy link


This paper proposes a modular, two-layered localization architecture that can
incorporate raw sensor measurements, as well as the output of off-the-shelf
localization algorithms. This enables the exploitation of complex, vehicle-
agnostic algorithms in a localization system that is aware of the vehicle’s
peculiarities, with relevant benefits in the reliability of odometrical
estimates. Indeed, while in  [ [ 9
](https://arxiv.org/html/2403.13452v1#bib.bib9) ]  little thought is given to
the availability of the position measurements, in an urban area position
sources might unexpectedly become unavailable: GNSS measurements may be lost
for the already mentioned multi-path and sky coverage issues, while map-based
methods might fail due to changes in the environment or challenging locations.
Such losses would force to robot to halt, even if continuing along the
trajectory would allow it to re-localize (think of an underpass that blocks
GNSS reception: reaching the end would allow the reception of new measures).
While fusing two position sources definitely increases the robustness of the
localization solution, loss of both is not uncommon. In such conditions,
having short or medium-term resilience to complete measurement loss can
significantly increase the robot’s autonomous capabilities and reduce the need
for human intervention. Since proprioceptive sensors are highly reliable,
continuing to move trusting an odometrical estimate is an option but, without
the necessary precautions, it is often too risky: the drift rates of odometry
can be unpredictable and highly affected by model parameters like wheel radii.
Our approach improves the odometrical estimation by estimating model
uncertainties online, resulting in relevant improvements in positional errors.


###  [ Za Pakhtoon Yum: A mind-altering foray into Pukhtun life and culture
](////drama1031.rssing.com/chan-27446141/article21.html#c27446141a21i856785604)


[ .clang-format ](/facontidavide/PlotJuggler/blob/main/.clang-format ".clang-
format")

|

|


April 11, 2024, 5:27 pm


##  V  VALIDATION RESULTS


[ ↂ
](////kerala860.rssing.com/chan-63836988/article296.html#c63836988a296i25562831
"Kerala Christian Convention Maramon 2018 Songs Lyrics")


[ ↂ
](////electro404.rssing.com/chan-13553321/article484.html#c13553321a484i592237786
"PANASONIC SC AKX50LB - CD Stereo system - Power Amp - Main power SMPS -
Schematic \(Circuit Diagram\) - C1BA00000497 \(Power Amp IC\) -\[TDA 8950J\]
")


> then imu is used in local BA to keep odometry aligned to gravity over time.
> IMU is also used to get better orientation guess for odometry's next visual
> frame.


##  Use saved searches to filter your results more quickly


[ ↂ
](////heroturko111.rssing.com/chan-16832457/article82.html#c16832457a82i1004730930
"Noise Industries FxFactory Pro 3.0.2 \[MAC\]")


April 8, 2024, 1:08 pm


[ ](//www.rssing.com/index.php?zw=2123 "Home") [ $ ](javascript:; "MoMoney")


[ .gitmodules ](/facontidavide/PlotJuggler/blob/main/.gitmodules
".gitmodules")

|


Figure 9:  Effect of model uncertainties estimation on the estimated
(odometrical) trajectory
LABEL:sub@fig:validation/20230512_niguarda_stop_pose_meas_traj  when position
measures are lost: position (
LABEL:sub@fig:validation/20230512_niguarda_stop_pose_meas_errors  , top) and
yaw (  LABEL:sub@fig:validation/20230512_niguarda_stop_pose_meas_errors  ,
bottom) errors. The black dot in
LABEL:sub@fig:validation/20230512_niguarda_stop_pose_meas_traj  and dashed
lines in  LABEL:sub@fig:validation/20230512_niguarda_stop_pose_meas_errors
indicate the last position measurement received. The experiment was repeated
with (green lines) and without (red line) model uncertainties estimation.


* [ Pricing ](/pricing)


[ Search ](javascript:;)


[ _≫_ Next: robot_localization estimate (using only IMU) drifts for a
stationary robot (Gazebo Model)
](//question3152.rssing.com/chan-47151955/all_p22.html#c47151955a429 "Next
Article")


[ PlotJuggler.desktop
](/facontidavide/PlotJuggler/blob/main/PlotJuggler.desktop
"PlotJuggler.desktop")

|

|


August 20, 2018, 11:36 am


#  Mobile Robot Localization: a Modular, Odometry-Improving Approach


[ ↂ
](////fonts1404.rssing.com/chan-57741102/article185.html#c57741102a185i1833605640
"Pumas 2022/2023 Font \(TTF & OTF\)")


For robot_localization, personally, I only used it for wheel odometry + IMU
fusion (which worked well). For other configurations, you will have to ask
support on their repo.

---

All reactions


But as far as I understand, bufferedData_ is only accessed by processData
function so there wouldnt be any data init when we first get the callbackIMU
function called.
I dont really undesrstand whats missing here?


[ ](javascript:; "Ouch") 0


  License

PlotJuggler is released under the [ Mozilla Public License Version 2.0
](/facontidavide/PlotJuggler/blob/main/LICENSE.md) , which allows users to
develop closed-source plugins.

Please note that some third-party dependencies (including Qt) use the **GNU
Lesser General Public License** .


[ ![Fake lip ring, silver lip ring, simple lip ring, unisex lip ring by
AIRlab](//i.etsystatic.com/10798216/r/il/3a91cc/761285074/il_570xN.761285074_fu8j.jpg)
](////kuteriot1.rssing.com/chan-5865851/article17035.html#c5865851a17035i913072506)


[ ](javascript:; "Like") 0