as well as the pose of the original ` visual ` .

**Example:** The same example above is repeated, but fixed joints preserved (
` preserveFixedJoint=true ` ).

    <?xml version='1.0' encoding='UTF-8'?>
    <!--URDF-->
    <robot name='preserve_fixed_joint_lumping_example'>
      <link name='base_link'>
        <inertial>
          <mass value='0.25' />
          <inertia ixx='0.01' ixy='0' ixz='0' iyy='0.01' iyz='0' izz='0.01' />
        </inertial>
        <collision>
          <origin xyz="0 0 0" rpy="0 0 0"/>
          <geometry>
            <sphere radius="2"/>
          </geometry>
        </collision>
      </link>
      <joint name='j1' type='fixed'>
        <parent link='base_link'/>
        <child link='end_effector'/>
        <origin xyz='0 0 1' rpy='0 0 0'/>
      </joint>
      <link name='end_effector'>
        <inertial>
          <mass value='0.25' />
          <inertia ixx='0.01' ixy='0' ixz='0' iyy='0.01' iyz='0' izz='0.01' />
        </inertial>
        <visual>
          <origin xyz="2 0 0" rpy="0 0 0"/>
          <geometry>
            <cylinder length="1" radius="2"/>
          </geometry>
        </visual>
      </link>
      <gazebo reference='j1'>


Cancel  Create saved search


        <engine>ogre2</engine>
        <scene>scene</scene>
        <ambient_light>0.4 0.4 0.4</ambient_light>
        <background_color>0.8 0.8 0.8</background_color>
        <camera_pose>0 -6 8 0 0.8 1.56</camera_pose>
      </plugin>
      <!-- Plugins that add functionality to the scene -->
      <plugin filename="EntityContextMenuPlugin" name="Entity context menu">
        <ignition-gui>
          <property key="state" type="string">floating</property>
          <property key="width" type="double">5</property>
          <property key="height" type="double">5</property>
          <property key="showTitleBar" type="bool">false</property>
        </ignition-gui>
      </plugin>
      <plugin filename="GzSceneManager" name="Scene Manager">
        <ignition-gui>
          <property key="resizable" type="bool">false</property>
          <property key="width" type="double">5</property>
          <property key="height" type="double">5</property>
          <property key="state" type="string">floating</property>
          <property key="showTitleBar" type="bool">false</property>
        </ignition-gui>
      </plugin>
      <plugin filename="InteractiveViewControl" name="Interactive view control">
        <ignition-gui>
          <property key="resizable" type="bool">false</property>
          <property key="width" type="double">5</property>
          <property key="height" type="double">5</property>
          <property key="state" type="string">floating</property>
          <property key="showTitleBar" type="bool">false</property>
        </ignition-gui>
      </plugin>
      <plugin filename="CameraTracking" name="Camera Tracking">
        <ignition-gui>
          <property key="resizable" type="bool">false</property>
          <property key="width" type="double">5</property>
          <property key="height" type="double">5</property>
          <property key="state" type="string">floating</property>
          <property key="showTitleBar" type="bool">false</property>


**[ azeey ](/azeey) ** commented  Mar 7, 2023


##  Member Function Documentation


[ Core development  ](/orgs/gazebosim/projects/1#card-85462627)


  * OS Version: Ubuntu22.04
  * Source or binary build? Binary (version: 6.6.1)


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


|  0  |  551  |  October 16, 2021

  * [ Home ](/)
  * [ Categories ](/categories)
  * [ FAQ/Guidelines ](/guidelines)
  * [ Terms of Service ](/tos)
  * [ Privacy Policy ](/privacy)


7 participants


Copy link


##  ◆  ~NavSatMap()


Parameters


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


Search or jump to...


[ Sign in ](/login?return_to=https%3A%2F%2Fgithub.com%2Fgazebosim%2Fgz-
gui%2Fissues%2F482)


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


##  ◆  SetTopicList()


Assignees


      <gazebo reference='base_link'>
        <mu1>0.25</mu1>
      </gazebo>
    </robot>

This creates the element ` //surface/friction/ode/mu ` in the collision
element of the referenced link.

    <!--SDFormat-->
    <sdf version='1.9'>
      <model name='friction_example'>
        <link name='base_link'>
          <inertial>
            <pose>0 0 0 0 0 0</pose>
            <mass>0.12</mass>
            <inertia>
              <ixx>0.01</ixx>
              <ixy>0</ixy>
              <ixz>0</ixz>
              <iyy>0.01</iyy>
              <iyz>0</iyz>
              <izz>0.01</izz>
            </inertia>
          </inertial>
          <collision name='base_link_collision'>
            <pose>0 0 0 0 0 0</pose>
            <geometry>
              <sphere>
                <radius>2</radius>
              </sphere>
            </geometry>
            <surface>
              <contact>
                <ode/>
              </contact>
              <friction>


[
![@jennuine](https://avatars.githubusercontent.com/u/8602001?s=40&u=0446d249f29faf472e0c19bbff6671907d6e2dce&v=4)
](/jennuine) [ jennuine ](/jennuine) closed this as [ not planned
](/gazebosim/gz-
gui/issues?q=is%3Aissue+is%3Aclosed+archived%3Afalse+reason%3A%22not+planned%22)
Won't fix, can't repro, duplicate, stale  Sep 6, 2022


     [in]  |  _topicList  |  List of topics
---|---|---

##  ◆  TopicList()


[ Sign up
](/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-
name%3E%2F%3Crepo-
name%3E%2Fvoltron%2Fissues_fragments%2Fissue_layout&source=header-
repo&source_repo=gazebosim%2Fgz-gui)


edited


##  ◆  OnTopic


[ bug  ](/gazebosim/gz-gui/labels/bug) Something isn't working


  * [ Code  ](/gazebosim/gz-gui)
  * [ Issues  56  ](/gazebosim/gz-gui/issues)
  * [ Pull requests  4  ](/gazebosim/gz-gui/pulls)
  * [ Actions  ](/gazebosim/gz-gui/actions)
  * [ Projects  0  ](/gazebosim/gz-gui/projects)
  * [ Security  ](/gazebosim/gz-gui/security)
  * [ Insights  ](/gazebosim/gz-gui/pulse)


Returns


**[ iche033 ](/iche033) ** commented  Mar 8, 2023


|  0  |  120  |  October 4, 2023
[ Ignition-gazebo plugin subscriber
](https://community.gazebosim.org/t/ignition-gazebo-plugin-subscriber/1764)


Cancel  Submit feedback


     [in]  |  _latitudeDeg  |  Latitude in degrees
---|---|---
[in]  |  _longitudeDeg  |  Longitude in degrees

##  ◆  OnRefresh


|  Wait until the plugin has a parent, then close and delete the parent. [
More...
](classignition_1_1gui_1_1Plugin.html#acf148f507cd3f4efe843cee455a679b9)

![-](closed.png) Protected Member Functions inherited from [ QObject
](http://doc.qt.io/qt-5/qobject.html)
bool  |  [ checkConnectArgs ](http://doc.qt.io/qt-5/qobject-
qt3.html#checkConnectArgs) (const char *signal, const [ QObject
](http://doc.qt.io/qt-5/qobject.html) *object, const char *method)
virtual void  |  [ childEvent ](http://doc.qt.io/qt-5/qobject.html#childEvent)
( [ QChildEvent ](http://doc.qt.io/qt-5/qchildevent.html) * [ event
](http://doc.qt.io/qt-5/qobject.html#event) )
virtual void  |  [ connectNotify
](http://doc.qt.io/qt-5/qobject.html#connectNotify) (const char *signal)
virtual void  |  [ customEvent
](http://doc.qt.io/qt-5/qobject.html#customEvent) ( [ QEvent
](http://doc.qt.io/qt-5/qevent.html) * [ event
](http://doc.qt.io/qt-5/qobject.html#event) )
virtual void  |  [ disconnectNotify
](http://doc.qt.io/qt-5/qobject.html#disconnectNotify) (const char *signal)
int  |  [ receivers ](http://doc.qt.io/qt-5/qobject.html#receivers) (const
char *signal) const
[ QObject ](http://doc.qt.io/qt-5/qobject.html) *  |  [ sender
](http://doc.qt.io/qt-5/qobject.html#sender) () const
int  |  [ senderSignalIndex
](http://doc.qt.io/qt-5/qobject.html#senderSignalIndex) () const
virtual void  |  [ timerEvent ](http://doc.qt.io/qt-5/qobject.html#timerEvent)
( [ QTimerEvent ](http://doc.qt.io/qt-5/qtimerevent.html) * [ event
](http://doc.qt.io/qt-5/qobject.html#event) )
![-](closed.png) Static Protected Member Functions inherited from [ QObject
](http://doc.qt.io/qt-5/qobject.html)
[ QByteArray ](http://doc.qt.io/qt-5/qbytearray.html) |  [ normalizeSignalSlot
](http://doc.qt.io/qt-5/qobject-qt3.html#normalizeSignalSlot) (const char
*signalSlot)
![-](closed.png) Protected Attributes inherited from [ Plugin
](classignition_1_1gui_1_1Plugin.html)
[ std::string ](http://en.cppreference.com/w/cpp/string/basic_string.html) |
[ configStr
](classignition_1_1gui_1_1Plugin.html#a145dfdf9e6c54da937349deb4ff88efe)
|  XML configuration. [ More...


|  2  |  310  |  February 7, 2023
[ Updates in Ignition Gazebo Documentation
](https://community.gazebosim.org/t/updates-in-ignition-gazebo-
documentation/2263)


**[ JaouadROS ](/JaouadROS) ** commented  Mar 7, 2023


  Special meaning for ` <visual> ` , ` <collision> ` , and ` <material> `

The ` <visual> ` and ` <collision> ` are meant to update existing visuals and
collisions in the URDF as they get converted to SDFormat. At the time of
writing, these tags do not insert new visuals or collision elements into the
referenced link. Note also that these tags affect all visuals and collisions,
respectively, found in the referenced link.

**Example:**

Given the following URDF file with two visuals, the ` <gazebo> ` extension
applies the element ` <transparency> ` to each visual in ` base_link ` .

    <?xml version='1.0' encoding='UTF-8'?>
    <!--URDF-->
    <robot name='visual_example'>
      <link name='base_link'>
        <inertial>
          <mass value='0.12' />
          <inertia ixx='0.01' ixy='0' ixz='0' iyy='0.01' iyz='0' izz='0.01' />
        </inertial>
        <visual>
          <geometry>
            <sphere radius="2"/>
          </geometry>
        </visual>
        <visual>
          <origin xyz="2 0 0" rpy="0 0 0"/>
          <geometry>
            <cylinder length="1" radius="2"/>
          </geometry>
        </visual>
      </link>
      <gazebo reference='base_link'>
        <visual>
          <transparency>0.25</transparency>
        </visual>
      </gazebo>


const char *  |  [ name ](http://doc.qt.io/qt-5/qobject-qt3.html#name-2)
(const char *defaultName) const
[ QString ](http://doc.qt.io/qt-5/qstring.html) |  [ objectName
](http://doc.qt.io/qt-5/qobject.html#objectName-prop) () const
[ QObject ](http://doc.qt.io/qt-5/qobject.html) *  |  [ parent
](http://doc.qt.io/qt-5/qobject.html#parent) () const
[ QVariant ](http://doc.qt.io/qt-5/qvariant.html) |  [ property
](http://doc.qt.io/qt-5/qobject.html#property) (const char * [ name
](http://doc.qt.io/qt-5/qobject-qt3.html#name) ) const
void  |  [ removeChild ](http://doc.qt.io/qt-5/qobject-qt3.html#removeChild) (
[ QObject ](http://doc.qt.io/qt-5/qobject.html) *object)
void  |  [ removeEventFilter
](http://doc.qt.io/qt-5/qobject.html#removeEventFilter) ( [ QObject
](http://doc.qt.io/qt-5/qobject.html) *obj)
void  |  [ setName ](http://doc.qt.io/qt-5/qobject-qt3.html#setName) (const
char * [ name ](http://doc.qt.io/qt-5/qobject-qt3.html#name) )
void  |  [ setObjectName ](http://doc.qt.io/qt-5/qobject.html#objectName-prop)
(const [ QString ](http://doc.qt.io/qt-5/qstring.html) & [ name
](http://doc.qt.io/qt-5/qobject-qt3.html#name) )
void  |  [ setParent ](http://doc.qt.io/qt-5/qobject.html#setParent) ( [
QObject ](http://doc.qt.io/qt-5/qobject.html) * [ parent
](http://doc.qt.io/qt-5/qobject.html#parent) )
bool  |  [ setProperty ](http://doc.qt.io/qt-5/qobject.html#setProperty)
(const char * [ name ](http://doc.qt.io/qt-5/qobject-qt3.html#name) , const [
QVariant ](http://doc.qt.io/qt-5/qvariant.html) &value)
bool  |  [ signalsBlocked ](http://doc.qt.io/qt-5/qobject.html#signalsBlocked)
() const
int  |  [ startTimer ](http://doc.qt.io/qt-5/qobject.html#startTimer) (int
interval)
[ QThread ](http://doc.qt.io/qt-5/qthread.html) *  |  [ thread
](http://doc.qt.io/qt-5/qobject.html#thread) () const

##  Properties

---
[ QStringList ](http://doc.qt.io/qt-5/qstringlist.html) |  [ topicList
](classignition_1_1gui_1_1plugins_1_1NavSatMap.html#a8e7653997ff6b6f3c6b351f8589df387)
|  [ Topic ](classignition_1_1gui_1_1Topic.html "Plotting Topic to handle
published topics & their registered fields. ") list.  More...


Contributor


    [GUI] [Wrn] [Application.cc:845] [QT] QObject::connect(QQuickWindow, QDeclarativeGeoMap): invalid nullptr parameter

---

All reactions


  1. ` ign gazebo -v 4 `
  2. Go to add a Nav Sat Map plugin from the right-top menu
  3. Crashes, when Nav Sat Map plugin is clicked


output.

    <!--SDFormat-->
    <sdf version='1.9'>
      <model name='joint_example'>
        <link name='base_link'>
          <inertial>
            <pose>0 0 0 0 0 0</pose>
            <mass>0.12</mass>
            <inertia>
              <ixx>0.01</ixx>
              <ixy>0</ixy>
              <ixz>0</ixz>
              <iyy>0.01</iyy>
              <iyz>0</iyz>
              <izz>0.01</izz>
            </inertia>
          </inertial>
        </link>
        <joint name='j1' type='revolute'>
          <pose relative_to='base_link'>0 0 1 0 0 0</pose>
          <parent>base_link</parent>
          <child>end_effector</child>
          <axis>
            <xyz>1 0 0</xyz>
            <limit>
              <lower>-10000000000000000</lower>
              <upper>10000000000000000</upper>
            </limit>
            <dynamics>
              <spring_reference>0.5</spring_reference>
              <spring_stiffness>0.25</spring_stiffness>
            </dynamics>
          </axis>
          <physics>
            <ode>
              <limit>
                <cfm>0</cfm>


Sorry, something went wrong.


  ` <gazebo> ` Elements For Links

When using the ` <gazebo> ` extension for links, the name of the link has to
be specified in the ` reference ` attribute. There are a number of special
tags that modify the values of elements or attributes in the generated
SDFormat file. Any tag that is not listed in the table below will be directly
inserted into the corresponding ` <link> ` element in the SDFormat output.
This direct insertion is sometimes referred to as blob insertion.

**Table of elements with special meaning:**

Name  |  Type  |  Description  |  Corresponding SDFormat element
---|---|---|---
turnGravityOff  |  bool  |  A value of "true" turns gravity off.
Alternatively, ` gravity ` (with opposite boolean value) can be used via blob
insertion  |  ` gravity `
dampingFactor  |  double  |  Exponential velocity decay of the link velocity -
takes the value and multiplies the previous link velocity by
(1-dampingFactor).  |  ` velocity_decay/linear ` and ` velocity_decay/angular
`
maxVel  |  double  |  Maximum contact correction velocity truncation term.
(See the Gazebo-classic tutorial on [ Constraints Parameters
](https://classic.gazebosim.org/tutorials?tut=physics_params&cat=physics


[ General  ](/c/general/6)


Copy link


|  1  |  398  |  January 30, 2023
[ Ignition ros control hardware interface (noetic + ignition edifice)
](https://community.gazebosim.org/t/ignition-ros-control-hardware-interface-
noetic-ignition-edifice/1142)


Pick a username


            </geometry>
            <transparency>0.25</transparency>
          </visual>
        </link>
      </model>
    </sdf>

The ` <material> ` tag, when used directly under the ` <gazebo> ` tag, i.e `
//gazebo/material ` , accepts a string value of the name of a material defined
in a Gazebo-classic's material [ script ](https://github.com/gazebosim/gazebo-
classic/blob/d0c34b8a5d6bc9a3271000fb1baeb3f8d9f43afa/media/materials/scripts/gazebo.material)
. Examples include colors like ` Gazebo/SkyBlue ` as well as textures such as
` Gazebo/WoodFloor ` . The ` <material> ` tag affects all visuals found in the
referenced link, similar to the behavior of ` <visual> ` and ` <collision> `

**Example:**

    <?xml version='1.0' encoding='UTF-8'?>
    <!--URDF-->
    <robot name='material_example'>
      <link name='base_link'>
        <inertial>
          <mass value='0.1' />
          <inertia ixx='0.01' ixy='0' ixz='0' iyy='0.01' iyz='0' izz='0.01' />
        </inertial>
        <visual>
          <geometry>
            <sphere radius="2"/>
          </geometry>
        </visual>
      </link>
      <gazebo reference='base_link'>
        <material>Gazebo/Orange</material>
      </gazebo>
    </robot>


      <!-- World statistics -->
      <plugin filename="WorldStats" name="World stats">
        <ignition-gui>
          <title>World stats</title>
          <property type="bool" key="showTitleBar">false</property>
          <property type="bool" key="resizable">false</property>
          <property type="double" key="height">110</property>
          <property type="double" key="width">290</property>
          <property type="double" key="z">1</property>
          <property type="string" key="state">floating</property>
          <anchors target="3D View">
            <line own="right" target="right"/>
            <line own="bottom" target="bottom"/>
          </anchors>
        </ignition-gui>
        <sim_time>true</sim_time>
        <real_time>true</real_time>
        <real_time_factor>true</real_time_factor>
        <iterations>true</iterations>
      </plugin>
      <!-- Translate / rotate -->
      <plugin filename="TransformControl" name="Transform control">
        <ignition-gui>
          <property key="resizable" type="bool">false</property>
          <property key="width" type="double">250</property>
          <property key="height" type="double">50</property>
          <property key="state" type="string">floating</property>
          <property key="showTitleBar" type="bool">false</property>
          <property key="cardBackground" type="string">#777777</property>
        </ignition-gui>
        <!-- disable legacy features used to connect this plugin to GzScene3D -->
        <legacy>false</legacy>
      </plugin>
      <!-- Entity tree -->
      <plugin filename="EntityTree" name="Entity tree">
        <ignition-gui>
          <property type="string" key="state">docked_collapsed</property>
        </ignition-gui>
      </plugin>
      <!-- Inspector -->


* [ The ReadME Project  GitHub community articles  ](/readme)


NavSatMap Class Reference


{{ message }}


Toggle navigation  [
![SDFormat](/assets/masthead-b37cf3cb82b2656194c11c6120206e7f8e47bc590261084df67a4f092fa92ddb.png)
](/)

  * [ Specification ](/spec)
  * [ API ](/api)
  * [ Documentation ](/tutorials?)
  * [ Download ](/download)

[ Back ](/tutorials?cat=specification&)

[ Edit
](https://github.com/osrf/sdf_tutorials/blob/master/urdf/sdf_extensions.md)
Version: 1.6

* * *


[
![@jennuine](https://avatars.githubusercontent.com/u/8602001?s=80&u=0446d249f29faf472e0c19bbff6671907d6e2dce&v=4)
](/jennuine)


            <mass>0.5</mass>
            <inertia>
              <ixx>0.14499999999999999</ixx>
              <ixy>0</ixy>
              <ixz>0</ixz>
              <iyy>0.14499999999999999</iyy>
              <iyz>0</iyz>
              <izz>0.02</izz>
            </inertia>
          </inertial>
          <collision name='base_link_collision'>
            <pose>0 0 0 0 0 0</pose>
            <geometry>
              <sphere>
                <radius>2</radius>
              </sphere>
            </geometry>
          </collision>
          <visual name='base_link_fixed_joint_lump__end_effector_visual'>
            <pose>2 0 1 0 0 0</pose>
            <geometry>
              <cylinder>
                <length>1</length>
                <radius>2</radius>
              </cylinder>
            </geometry>
          </visual>
        </link>
        <frame name='j1' attached_to='base_link'>
          <pose>0 0 1 0 -0 0</pose>
        </frame>
        <frame name='end_effector' attached_to='j1'/>
      </model>
    </sdf>

Note that the mass of ` base_link ` is the sum of the masses of the original `
base_link ` and ` end_effector ` links. The ` visual ` element of `
end_effector ` has been merged into ` base_link ` with a pose value that takes
into account the pose of the original ` end_effector ` link and joint ` j1 `


[ ijnek ](/ijnek) opened this issue  Sep 5, 2022  · 11 comments


###  Related Topics


[
![@jennuine](https://avatars.githubusercontent.com/u/8602001?s=40&u=0446d249f29faf472e0c19bbff6671907d6e2dce&v=4)
](/jennuine) [ jennuine ](/jennuine) closed this as [ completed
](/gazebosim/gz-
gui/issues?q=is%3Aissue+is%3Aclosed+archived%3Afalse+reason%3Acompleted) Sep
6, 2022


edited


To see all available qualifiers, see our [ documentation
](https://docs.github.com/search-github/github-code-search/understanding-
github-code-search-syntax) .


8 tasks


Copy link


I’m trying to use the Navsat plugin but I can’t get it working. I’m using ros-
humble


  * [ ignition ](namespaceignition.html)
  * [ gui ](namespaceignition_1_1gui.html)
  * [ plugins ](namespaceignition_1_1gui_1_1plugins.html)
  * [ NavSatMap ](classignition_1_1gui_1_1plugins_1_1NavSatMap.html)


<topic> : Set the topic to receive NavSat messages. <topic_picker> : Whether
to show the topic picker, true by default. If this is false, a <topic> must be
specified.


     [in]  |  _pluginElem  |  Element containing configuration
---|---|---

Reimplemented from [ Plugin
](classignition_1_1gui_1_1Plugin.html#a23b77569f666353a9794d926b949a179) .


Contributor


void  |  [ dumpObjectTree ](http://doc.qt.io/qt-5/qobject.html#dumpObjectTree)
()
[ QList ](http://doc.qt.io/qt-5/qlist.html) < [ QByteArray
](http://doc.qt.io/qt-5/qbytearray.html) > |  [ dynamicPropertyNames
](http://doc.qt.io/qt-5/qobject.html#dynamicPropertyNames) () const
virtual bool  |  [ event ](http://doc.qt.io/qt-5/qobject.html#event) ( [
QEvent ](http://doc.qt.io/qt-5/qevent.html) *e)
virtual bool  |  [ eventFilter
](http://doc.qt.io/qt-5/qobject.html#eventFilter) ( [ QObject
](http://doc.qt.io/qt-5/qobject.html) *watched, [ QEvent
](http://doc.qt.io/qt-5/qevent.html) * [ event
](http://doc.qt.io/qt-5/qobject.html#event) )
T  |  [ findChild ](http://doc.qt.io/qt-5/qobject.html#findChild) (const [
QString ](http://doc.qt.io/qt-5/qstring.html) & [ name
](http://doc.qt.io/qt-5/qobject-qt3.html#name) ) const
[ QList ](http://doc.qt.io/qt-5/qlist.html) < T > |  [ findChildren
](http://doc.qt.io/qt-5/qobject.html#findChildren-2) (const [ QRegExp
](http://doc.qt.io/qt-5/qregexp.html) &regExp) const
[ QList ](http://doc.qt.io/qt-5/qlist.html) < T > |  [ findChildren
](http://doc.qt.io/qt-5/qobject.html#findChildren) (const [ QString
](http://doc.qt.io/qt-5/qstring.html) & [ name
](http://doc.qt.io/qt-5/qobject-qt3.html#name) ) const
bool  |  [ inherits ](http://doc.qt.io/qt-5/qobject.html#inherits) (const char
* [ className ](http://doc.qt.io/qt-5/qobject-qt3.html#className) ) const
void  |  [ insertChild ](http://doc.qt.io/qt-5/qobject-qt3.html#insertChild) (
[ QObject ](http://doc.qt.io/qt-5/qobject.html) *object)
void  |  [ installEventFilter
](http://doc.qt.io/qt-5/qobject.html#installEventFilter) ( [ QObject
](http://doc.qt.io/qt-5/qobject.html) *filterObj)
bool  |  [ isA ](http://doc.qt.io/qt-5/qobject-qt3.html#isA) (const char * [
className ](http://doc.qt.io/qt-5/qobject-qt3.html#className) ) const
bool  |  [ isWidgetType ](http://doc.qt.io/qt-5/qobject.html#isWidgetType) ()
const
void  |  [ killTimer ](http://doc.qt.io/qt-5/qobject.html#killTimer) (int id)
virtual const [ QMetaObject ](http://doc.qt.io/qt-5/qmetaobject.html) *  |  [
metaObject ](http://doc.qt.io/qt-5/qobject.html#metaObject) () const
void  |  [ moveToThread ](http://doc.qt.io/qt-5/qobject.html#moveToThread) ( [
QThread ](http://doc.qt.io/qt-5/qthread.html) *targetThread)
const char *  |  [ name ](http://doc.qt.io/qt-5/qobject-qt3.html#name) ()
const


List of topics


New issue


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


Open


        </visual>
      </link>
    </model>
    <model name="NavSat">
      <pose>0 0 0.05 0 0.0 0</pose>
      <link name="link">
        <inertial>
          <mass>0.1</mass>
          <inertia>
            <ixx>0.000166667</ixx>
            <iyy>0.000166667</iyy>
            <izz>0.000166667</izz>
          </inertia>
        </inertial>
        <collision name="collision">
          <geometry>
            <box>
              <size>0.1 0.1 0.1</size>
            </box>
          </geometry>
        </collision>
        <visual name="visual">
          <geometry>
            <box>
              <size>0.1 0.1 0.1</size>
            </box>
          </geometry>
        </visual>
        <sensor name="navsat" type="navsat">
          <always_on>1</always_on>
          <update_rate>1</update_rate>
          <topic>navsat</topic>
        </sensor>
      </link>
    </model>
  </world>
</sdf>


Contactparameters)
for more detail)  |  ` collision/surface/contact/ode/kp `
kd  |  ` collision/surface/contact/ode/kd `
selfCollide  |  bool  |  If true, the link can collide with other links in the
model.  |  ` self_collide `
maxContacts  |  int  |  Maximum number of contacts allowed between two
entities. This value overrides the max_contacts element defined in
physics.(See the Gazebo-classic tutorial on [ Contact Parameters
](https://classic.gazebosim.org/tutorials?tut=physics_params&cat=physics


Jump to bottom


        </ignition-gui>
      </plugin>
      <plugin filename="SelectEntities" name="Select Entities">
        <ignition-gui>
          <property key="resizable" type="bool">false</property>
          <property key="width" type="double">5</property>
          <property key="height" type="double">5</property>
          <property key="state" type="string">floating</property>
          <property key="showTitleBar" type="bool">false</property>
        </ignition-gui>
      </plugin>
      <plugin filename="Spawn" name="Spawn Entities">
        <ignition-gui>
          <property key="resizable" type="bool">false</property>
          <property key="width" type="double">5</property>
          <property key="height" type="double">5</property>
          <property key="state" type="string">floating</property>
          <property key="showTitleBar" type="bool">false</property>
        </ignition-gui>
      </plugin>
      <!-- World control -->
      <plugin filename="WorldControl" name="World control">
        <ignition-gui>
          <title>World control</title>
          <property type="bool" key="showTitleBar">false</property>
          <property type="bool" key="resizable">false</property>
          <property type="double" key="height">72</property>
          <property type="double" key="width">121</property>
          <property type="double" key="z">1</property>
          <property type="string" key="state">floating</property>
          <anchors target="3D View">
            <line own="left" target="left"/>
            <line own="bottom" target="bottom"/>
          </anchors>
        </ignition-gui>
        <play_pause>true</play_pause>
        <step>true</step>
        <start_paused>true</start_paused>
        <use_event>true</use_event>
      </plugin>


Sorry, something went wrong.


#  Saved searches


|  1  |  158  |  September 12, 2023
[ Using the skid steer plugin with ign gazebo fortress (or citadel)
](https://community.gazebosim.org/t/using-the-skid-steer-plugin-with-ign-
gazebo-fortress-or-citadel/2317)


        <preserveFixedJoint>true</preserveFixedJoint>
      </gazebo>
    </robot>

results in:

    <!--SDFormat-->
    <sdf version='1.9'>
      <model name='preserve_fixed_joint_lumping_example'>
        <link name='base_link'>
          <inertial>
            <pose>0 0 0 0 0 0</pose>
            <mass>0.25</mass>
            <inertia>
              <ixx>0.01</ixx>
              <ixy>0</ixy>
              <ixz>0</ixz>
              <iyy>0.01</iyy>
              <iyz>0</iyz>
              <izz>0.01</izz>
            </inertia>
          </inertial>
          <collision name='base_link_collision'>
            <pose>0 0 0 0 0 0</pose>
            <geometry>
              <sphere>
                <radius>2</radius>
              </sphere>
            </geometry>
          </collision>
        </link>
        <joint name='j1' type='fixed'>
          <pose relative_to='base_link'>0 0 1 0 0 0</pose>
          <parent>base_link</parent>
          <child>end_effector</child>
          <axis>


#  Can't open Nav Sat Map plugin (crashes)  #482


* Product


This type of question seems better suited for [ robotics.stackexchange.com
](http://robotics.stackexchange.com) .


Status: To do


Copy link


[ ignition ](https://community.gazebosim.org/tag/ignition) , [ fortress
](https://community.gazebosim.org/tag/fortress)


|  [ QStringList ](http://doc.qt.io/qt-5/qstringlist.html) topicList
---
read  write

[ Topic ](classignition_1_1gui_1_1Topic.html "Plotting Topic to handle
published topics & their registered fields. ") list.


Include my email address so I can be contacted


**[ jennuine ](/jennuine) ** commented  Sep 6, 2022


[ ](https://github.com "GitHub") © 2024 GitHub, Inc.


#  Ignition Gui


Resources


    * [ All features ](/features)
    * [ Documentation  ](https://docs.github.com)
    * [ GitHub Skills  ](https://skills.github.com/)
    * [ Blog  ](https://github.blog)


Display NavSat messages coming through an Ignition transport topic on top of a
map.


    * [ Topics ](/topics)
    * [ Trending ](/trending)
    * [ Collections ](/collections)


##  ◆  LoadConfig()


              <sphere>
                <radius>2</radius>
              </sphere>
            </geometry>
          </collision>
        </link>
        <joint name='j1' type='revolute'>
          <pose relative_to='base_link'>0 0 1 0 0 0</pose>
          <parent>base_link</parent>
          <child>end_effector</child>
          <axis>
            <limit>
              <lower>0</lower>
              <upper>0</upper>
            </limit>
            <dynamics>
              <damping>0</damping>
              <friction>0</friction>
              <spring_reference>0</spring_reference>
              <spring_stiffness>0</spring_stiffness>
            </dynamics>
            <xyz>0 0 1</xyz>
          </axis>
          <physics>
            <ode>
              <limit>
                <cfm>0</cfm>
                <erp>0.20000000000000001</erp>
              </limit>
            </ode>
          </physics>
        </joint>
        <link name='end_effector'>
          <pose relative_to='j1'>0 0 0 0 0 0</pose>
          <inertial>
            <pose>0 0 0 0 0 0</pose>
            <mass>0.25</mass>
            <inertia>
              <ixx>0.01</ixx>
              <ixy>0</ixy>


##  Configuration


All reactions


<?xml version="1.0" ?>
<!--
  Latitude / longitude demo
  The world origin's spherical coordinates can be inspected using the Component
  Inspector GUI plugin.
  It has a model with a NavSat (GPS) sensor, whose reading is displayed on a
  NavSatMap plugin.
  Try changing the world origin coordinates with:
ign service \
-s /world/spherical_coordinates/set_spherical_coordinates \
--reqtype ignition.msgs.SphericalCoordinates \
--reptype ignition.msgs.Boolean \
--timeout 2000 \
--req "surface_model: EARTH_WGS84, latitude_deg: 35.6, longitude_deg: 140.1, elevation: 10.0"
  Spawn a model in spherical coordinates:
ign service -s /world/spherical_coordinates/create \
--reqtype ignition.msgs.EntityFactory \
--reptype ignition.msgs.Boolean \
--timeout 300 \
--req 'sdf: '\
'"<?xml version=\"1.0\" ?>'\
'<sdf version=\"1.6\">'\
'<model name=\"spawned_model\">'\
'<link name=\"link\">'\
'<visual name=\"visual\">'\
'<geometry><sphere><radius>1.0</radius></sphere></geometry>'\
'</visual>'\
'<collision name=\"visual\">'\
'<geometry><sphere><radius>1.0</radius></sphere></geometry>'\
'</collision>'\
'</link>'\
'</model>'\
'</sdf>" '\
'spherical_coordinates: {latitude_deg: 35.59999, longitude_deg: 140.09999, elevation: 11.0} '
  Move a model in spherical coordinates:
ign service -s /world/spherical_coordinates/set_spherical_coordinates \
--reqtype ignition.msgs.SphericalCoordinates \
--reptype ignition.msgs.Boolean \
--timeout 300 \
--req 'entity: {name: "spawned_model", type: MODEL}, latitude_deg: 35.59990, longitude_deg: 140.09990'


##  Public Slots

---
void  |  [ OnRefresh
](classignition_1_1gui_1_1plugins_1_1NavSatMap.html#ad04818d9d563e75ffa918c0a0dc52df7)
()
|  Callback when refresh button is pressed.  More...

void  |  [ OnTopic
](classignition_1_1gui_1_1plugins_1_1NavSatMap.html#ac4ed0c2880668f33cb62e1f387becee7)
(const [ QString ](http://doc.qt.io/qt-5/qstring.html) _topic)
|  Callback when a new topic is chosen on the combo box.  More...

##  Signals

---
void  |  [ newMessage
](classignition_1_1gui_1_1plugins_1_1NavSatMap.html#a60c1c0075d2e1719c8527474db836779)
(double _latitudeDeg, double _longitudeDeg)
|  Notify that a new message has been received.  More...

void  |  [ TopicListChanged
](classignition_1_1gui_1_1plugins_1_1NavSatMap.html#a06c415f45108503c6c34762fb8796fb2)
()
|  Notify that topic list has changed.  More...

##  Public Member Functions

---
|  [ NavSatMap
](classignition_1_1gui_1_1plugins_1_1NavSatMap.html#a213597bcaab91dc0bb268f82221b75db)
()
|  Constructor.  More...

virtual  |  [ ~NavSatMap
](classignition_1_1gui_1_1plugins_1_1NavSatMap.html#a25d680fde2663b4b7926daa45a9df156)
()
|  Destructor.  More...


[ ignition ](https://community.gazebosim.org/tag/ignition)


##  ◆  TopicListChanged


Repositories


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


Constraintsparameters)
for more detail)  |  ` collision/surface/contact/ode/max_vel `
minDepth  |  double  |  Minimum allowable depth before contact correction
impulse is applied. (See the Gazebo-classic tutorial on [ Constraints
Parameters
](https://classic.gazebosim.org/tutorials?tut=physics_params&cat=physics


[ Core development  ](/orgs/gazebosim/projects/1#card-85462627)


possibly related Qt issues:


##  Use saved searches to filter your results more quickly


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


Labels


Copy link


Open


Sorry, something went wrong.


Called when a plugin is first created. This function should not be blocking.


  Fixed joint lumping

Fixed joint lumping (aka joint reduction), in the URDF to SDFormat conversion
is the process of taking the child link of a _fixed_ joint and merging all of
its contents into the parent link. It is an optimization that benefits maximal
coordinate physics engines by reducing the number of constraints needed to
simulate the model. The process preserves the total mass of the two links and
computes the center of mass and moment of inertia of the resultant link. All `
visual ` and ` collision ` elements present in the child link are moved to the
parent link with appropriate pose offsets. The fixed joint itself is discarded
and does not appear in the SDFormat output. As of ` libsdformat 9.9.0 ` `
frame ` elements that represent the discarded joint and child link are
generated to preserve their pose information.

Fixed joint lumping is enabled by default, but can be disabled by setting `
preserveFixedJoint ` or ` disableFixedJointLumping ` to ` true ` . The two
parameters behave similarly, but the ` preserveFixedJoint=true ` configuration
results in a joint with a ` fixed ` type whereas the `
disableFixedJointLumping=true ` configuration results in a revolute joint with
position limits set to 0. Note that when both ` preserveFixedJoint=true ` and
` disableFixedJointLumping=true ` are set on a joint, the ` preserveFixedJoint
` setting will take precedence and the resulting joint will have a ` fixed `
type. Fixed joint lumping can also be disabled for all joints if `
ParserConfig::URDFPreserveFixedJoint ` is ` true ` .

> **Warning:** Disabling joint lumping should only be done when both parent
> and child links have positive mass and corresponding ` <inertial> `
> elements.

**Example:** The following URDF demonstrates fixed joint lumping where the
resulting SDFormat output only has one link

    <?xml version='1.0' encoding='UTF-8'?>
    <!--URDF-->
    <robot name='fixed_joint_lumping_example'>
      <link name='base_link'>
        <inertial>
          <mass value='0.25' />


Development


[
![@iche033](https://avatars.githubusercontent.com/u/4000684?s=40&u=e98345ddb8bbd001efee106d206f1c982da9fb9b&v=4)
](/iche033) [ iche033 ](/iche033) mentioned this issue  Mar 9, 2023


sec_7_3_7) and the Gazebo-
classic tutorial on [ Friction Parameters
](https://classic.gazebosim.org/tutorials?tut=physics_params&cat=physics


              <ixz>0</ixz>
              <iyy>0.01</iyy>
              <iyz>0</iyz>
              <izz>0.01</izz>
            </inertia>
          </inertial>
          <visual name='end_effector_visual'>
            <pose>2 0 0 0 0 0</pose>
            <geometry>
              <cylinder>
                <length>1</length>
                <radius>2</radius>
              </cylinder>
            </geometry>
          </visual>
        </link>
      </model>
    </sdf>

The output is the same as ` preserveFixedJoint=true ` example, execept that
joint ` j1 ` has a ` revolute ` type.

©2020 Open Source Robotics Foundation

SDFormat is open-source licensed under [ Apache 2.0
](http://www.apache.org/licenses/LICENSE-2.0.html)


            </geometry>
          </visual>
        </link>
      </model>
    </sdf>

Here, the link ` end_effector ` is still present in the SDFormat output with
mass and inertia equal to the URDF ` end_effector ` link. The ` visual ` of `
end_effector ` is also still present in the ` end_effector ` link of the
SDFormat output. The joint ` j1 ` is also still present and its type is `
fixed ` .

**Example:** The same example above is repeated, but with fixed joint lumping
disabled ( ` disableFixedJointLumping=true ` ).

    <?xml version='1.0' encoding='UTF-8'?>
    <!--URDF-->
    <robot name='disable_fixed_joint_lumping_example'>
      <link name='base_link'>
        <inertial>
          <mass value='0.25' />
          <inertia ixx='0.01' ixy='0' ixz='0' iyy='0.01' iyz='0' izz='0.01' />
        </inertial>
        <collision>
          <origin xyz="0 0 0" rpy="0 0 0"/>
          <geometry>
            <sphere radius="2"/>
          </geometry>
        </collision>
      </link>
      <joint name='j1' type='fixed'>
        <parent link='base_link'/>
        <child link='end_effector'/>
        <origin xyz='0 0 1' rpy='0 0 0'/>
      </joint>
      <link name='end_effector'>
        <inertial>


        <link name="chassis">
                ....
          <plugin filename="ignition-gazebo-navsat-system" name="ignition::gazebo::systems::NavSat"/>
          <gazebo>
            <sensor name="navsat_sensor" type="navsat">
              <always_on>1</always_on>
              <update_rate>1</update_rate>
              <topic>navsat</topic>
            </sensor>
         </gazebo>
        </link>


**[ jennuine ](/jennuine) ** commented  Mar 7, 2023  •


  * [ https://bugreports.qt.io/browse/QTBUG-103592 ](https://bugreports.qt.io/browse/QTBUG-103592)
  * [ https://bugreports.qt.io/browse/QTBUG-95638 ](https://bugreports.qt.io/browse/QTBUG-95638) \- mentions bug is fixed in 5.15.11


**[ 23pointsNorth ](/23pointsNorth) ** commented  Oct 10, 2023


Sign up for GitHub


[ peci1  ](https://community.gazebosim.org/u/peci1) January 10, 2024, 4:39pm
2


Contributor


By clicking “Sign up for GitHub”, you agree to our [ terms of service
](https://docs.github.com/terms) and [ privacy statement
](https://docs.github.com/privacy) . We’ll occasionally send you account
related emails.


Copy link


            <dynamics>
              <spring_reference>0</spring_reference>
              <spring_stiffness>0</spring_stiffness>
            </dynamics>
            <xyz>0 0 1</xyz>
            <limit>
              <lower>-10000000000000000</lower>
              <upper>10000000000000000</upper>
            </limit>
          </axis>
          <physics>
            <ode>
              <limit>
                <cfm>0</cfm>
                <erp>0.20000000000000001</erp>
              </limit>
            </ode>
          </physics>
        </joint>
        <link name='end_effector'>
          <pose relative_to='j1'>0 0 0 0 0 0</pose>
          <inertial>
            <pose>0 0 0 0 0 0</pose>
            <mass>0.25</mass>
            <inertia>
              <ixx>0.01</ixx>
              <ixy>0</ixy>
              <ixz>0</ixz>
              <iyy>0.01</iyy>
              <iyz>0</iyz>
              <izz>0.01</izz>
            </inertia>
          </inertial>
          <visual name='end_effector_visual'>
            <pose>2 0 0 0 0 0</pose>
            <geometry>
              <cylinder>
                <length>1</length>
                <radius>2</radius>
              </cylinder>


You can’t perform that action at this time.


[ ![@jennuine](https://avatars.githubusercontent.com/u/8602001?s=40&v=4)
](/jennuine)


-->
<sdf version="1.6">
  <world name="spherical_coordinates">
    <!-- Processes the NavSat sensor -->
    <plugin
      filename="ignition-gazebo-navsat-system"
      name="ignition::gazebo::systems::NavSat">
    </plugin>
    <!-- Handles requests to update the spherical coordinates -->
    <plugin
      filename="ignition-gazebo-user-commands-system"
      name="ignition::gazebo::systems::UserCommands">
    </plugin>
    <!-- Populates the GUI with data from the server -->
    <plugin
      filename="ignition-gazebo-scene-broadcaster-system"
      name="ignition::gazebo::systems::SceneBroadcaster">
    </plugin>
    <!-- Processes pose commands -->
    <plugin
      filename="ignition-gazebo-physics-system"
      name="ignition::gazebo::systems::Physics">
    </plugin>
    <!-- Set the coordinates for the world origin -->
    <spherical_coordinates>
      <surface_model>EARTH_WGS84</surface_model>
      <world_frame_orientation>ENU</world_frame_orientation>
      <latitude_deg>-22.986687</latitude_deg>
      <longitude_deg>-43.202501</longitude_deg>
      <elevation>0</elevation>
      <heading_deg>0</heading_deg>
    </spherical_coordinates>
    <gui fullscreen="0">
      <!-- 3D scene -->
      <plugin filename="MinimalScene" name="3D View">
        <ignition-gui>
          <title>3D View</title>
          <property type="bool" key="showTitleBar">false</property>
          <property type="string" key="state">docked</property>
        </ignition-gui>


  * Expected behavior: Nav Sat Map plugin opens correctly
  * Actual behavior: Ignition Gazebo crashes with the following messages


Projects


You could try other map plugins that are listed in this page:
[ https://doc.qt.io/qt-5/qtlocation-index.html#plugin-references-and-
parameters ](https://doc.qt.io/qt-5/qtlocation-index.html#plugin-references-
and-parameters)


> tags in the **URDF** file have names.


For


---

All reactions


You signed in with another tab or window. [ Reload ]() to refresh your
session.  You signed out in another tab or window. [ Reload ]() to refresh
your session.  You switched accounts on another tab or window. [ Reload ]() to
refresh your session.  Dismiss alert


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


          <inertia ixx='0.01' ixy='0' ixz='0' iyy='0.01' iyz='0' izz='0.01' />
        </inertial>
        <collision>
          <origin xyz="0 0 0" rpy="0 0 0"/>
          <geometry>
            <sphere radius="2"/>
          </geometry>
        </collision>
      </link>
      <joint name='j1' type='fixed'>
        <parent link='base_link'/>
        <child link='end_effector'/>
        <origin xyz='0 0 1' rpy='0 0 0'/>
      </joint>
      <link name='end_effector'>
        <inertial>
          <mass value='0.25' />
          <inertia ixx='0.01' ixy='0' ixz='0' iyy='0.01' iyz='0' izz='0.01' />
        </inertial>
        <visual>
          <origin xyz="2 0 0" rpy="0 0 0"/>
          <geometry>
            <cylinder length="1" radius="2"/>
          </geometry>
        </visual>
      </link>
    </robot>

results in:

    <!--SDFormat-->
    <sdf version='1.9'>
      <model name='fixed_joint_lumping_example'>
        <link name='base_link'>
          <inertial>
            <pose>0 0 0.5 0 0 0</pose>


        <world name="field">
            ...
          <spherical_coordinates>
            <surface_model>EARTH_WGS84</surface_model>
            <world_frame_orientation>ENU</world_frame_orientation>
            <latitude_deg>-22.986687</latitude_deg>
            <longitude_deg>-43.202501</longitude_deg>
            <elevation>0</elevation>
            <heading_deg>0</heading_deg>
          </spherical_coordinates>
        </world>


  ` <gazebo> ` Elements For Joints

When using the ` <gazebo> ` extension for joints, the name of the joint has to
be specified in the ` reference ` attribute. There are a number of special
tags that modify the values of elements or attributes in the generated
SDFormat file. Any tag that is not listed in the table below will be directly
inserted into the corresponding ` <joint> ` element in the SDFormat output.

**Table of elements with special meaning:**

Name  |  Type  |  Description  |  Corresponding SDFormat element
---|---|---|---
stopCfm  |  double  |  Joint stop constraint force mixing (cfm) and error
reduction parameter (erp) used by ODE  |  ` physics/ode/limit/cfm `
stopErp  |  ` physics/ode/limit/erp `
provideFeedback  |  bool  |  Allows joints to publish their wrench data
(force-torque) via a Gazebo plugin  |  ` physics/provide_feedback ` and `
physics/ode/provide_feedback `
implicitSpringDamper  |  bool  |  If this flag is set to true, ODE will use
ERP and CFM to simulate damping. This is a more stable numerical method for
damping than the default damping tag. The cfmDamping element is deprecated and
should be changed to implicitSpringDamper.  |  `
physics/ode/implicit_spring_damper `
springStiffness  |  double  |  Spring stiffness in N/m.  |  `
axis/dynamics/spring_stiffness `
springReference  |  double  |  Equilibrium position for the spring. |  `
axis/dynamics/spring_reference `
fudgeFactor  |  double  |  Scale the excess for in a joint motor at joint
limits. Should be between zero and one.  |  ` physics/ode/fudge_factor `
preserveFixedJoint  |  bool  |  By default, fixed joints in the URDF are
"lumped", meaning that the contents of the child link are merged with the
parent link with appropriate pose offsets and the joint is discarded. Setting
this to ` true ` preserves the fixed joint and effectively disables fixed
joint lumping.  |
disableFixedJointLumping  |  bool  |  By default, fixed joints in the URDF are
"lumped", meaning that the contents of the child link are merged with the
parent link with appropriate pose offsets and the joint is discarded. Setting
this to ` true ` disables fixed joint lumping. This has a similar effect as `
preserveFixedJoint ` but, for backward compatibility reasons, replaces the
fixed joint with a revolute joint with position limits set to 0. Users are


    * [ 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)


* [ Pricing ](/pricing)


##  Steps to reproduce


Sorry, something went wrong.


**[ ijnek ](/ijnek) ** commented  Sep 5, 2022


  * [ Code  ](/gazebosim/gz-gui)
  * [ Issues  ](/gazebosim/gz-gui/issues)
  * [ Pull requests  ](/gazebosim/gz-gui/pulls)
  * [ Actions  ](/gazebosim/gz-gui/actions)
  * [ Projects  ](/gazebosim/gz-gui/projects)
  * [ Security  ](/gazebosim/gz-gui/security)
  * [ Insights  ](/gazebosim/gz-gui/pulse)


[ Gazebo Community ](/)


[ Switch to use mapboxgl map plugin in NavSat Map gui plugin  #520
](/gazebosim/gz-gui/pull/520)


Parameters


Explore


|  void OnTopic  |  (  |  const [ QString
](http://doc.qt.io/qt-5/qstring.html) |  __topic_ |  )  |
---|---|---|---|---|---
slot

Callback when a new topic is chosen on the combo box.


Query


**[ vincentrou ](/vincentrou) ** commented  Oct 11, 2022


[ Help  ](/c/help/8)


[ ](https://github.com/)


[ Sign in ](/login?return_to=https%3A%2F%2Fgithub.com%2Fgazebosim%2Fgz-
gui%2Fissues%2F482)


Frictionparameters)
for more detail)  |  ` collision/surface/friction/ode/mu `
mu2  |  ` collision/surface/friction/ode/mu2 `
fdir1  |  vector  |  3-tuple specifying direction of mu1 in the collision
local reference frame. (See the Gazebo-classic tutorial on [ Friction
Parameters
](https://classic.gazebosim.org/tutorials?tut=physics_params&cat=physics


Milestone


See also


Search


[ bug  ](/gazebosim/gz-gui/labels/bug) Something isn't working


[ leets0429  ](https://community.gazebosim.org/u/leets0429) January 10, 2024,
10:29am  1


    <!--SDFormat-->
    <sdf version='1.9'>
      <model name='material_example'>
        <link name='base_link'>
          <inertial>
            <pose>0 0 0 0 0 0</pose>
            <mass>0.12</mass>
            <inertia>
              <ixx>0.01</ixx>
              <ixy>0</ixy>
              <ixz>0</ixz>
              <iyy>0.01</iyy>
              <iyz>0</iyz>
              <izz>0.01</izz>
            </inertia>
          </inertial>
          <visual name='base_link_visual'>
            <pose>0 0 0 0 0 0</pose>
            <geometry>
              <sphere>
                <radius>2</radius>
              </sphere>
            </geometry>
            <material>
              <diffuse>0 0 1 1</diffuse>
            </material>
          </visual>
        </link>
      </model>
    </sdf>

where the ` <diffuse> ` tag has been added to the visual of ` base_link ` .

> **Warning:** At the time of writing, there is a [ bug
> ](https://github.com/gazebosim/sdformat/issues/333) in the URDF to SDFormat
> converter that behaves incorrectly when ` <visual> ` and ` <collision> `


|  Get the configuration XML as a string. [ More...
](classignition_1_1gui_1_1Plugin.html#a791b774c262f5271550350ec5030f87d)

QQmlContext *  |  [ Context
](classignition_1_1gui_1_1Plugin.html#ad7247e719bcbb3b0e6dddc9634be428b) ()
const
|  Get the QML context where the plugin was created. [ More...
](classignition_1_1gui_1_1Plugin.html#ad7247e719bcbb3b0e6dddc9634be428b)

bool  |  [ DeleteLaterRequested
](classignition_1_1gui_1_1Plugin.html#ad79a5143eec0a6ba2cf3ee12faee756a) ()
const
|  Get the value of the the ` delete_later ` element from the configuration
file, which defaults to false. [ More...
](classignition_1_1gui_1_1Plugin.html#ad79a5143eec0a6ba2cf3ee12faee756a)

void  |  [ Load
](classignition_1_1gui_1_1Plugin.html#a142b784416e4120fa87ed291444b51f8)
(const tinyxml2::XMLElement *_pluginElem)
|  Load the plugin with a configuration file. This loads the default
parameters and then calls [ LoadConfig()
](classignition_1_1gui_1_1Plugin.html#a23b77569f666353a9794d926b949a179 "Load
the plugin with a configuration file. Override this on custom plugins to
handle custom configura...") , which should be overridden to load custom
parameters. [ More...
](classignition_1_1gui_1_1Plugin.html#a142b784416e4120fa87ed291444b51f8)

QQuickItem *  |  [ PluginItem
](classignition_1_1gui_1_1Plugin.html#a65c332fe76352d317b2b37424547a3eb) ()
const
|  Get the plugin item. [ More...
](classignition_1_1gui_1_1Plugin.html#a65c332fe76352d317b2b37424547a3eb)

void  |  [ PostParentChanges
](classignition_1_1gui_1_1Plugin.html#a84eba809004bf81581e941836506e257) ()
|  Apply changes which should come after the plugin already has a parent. [
More...
](classignition_1_1gui_1_1Plugin.html#a84eba809004bf81581e941836506e257)

virtual [ std::string


[ Load ](classignition_1_1gui_1_1Plugin.html#a142b784416e4120fa87ed291444b51f8 "Load the plugin with a configuration file. This loads the default parameters and then calls LoadConfi...")


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


](http://en.cppreference.com/w/cpp/string/basic_string.html) |  [ Title
](classignition_1_1gui_1_1Plugin.html#a9745e7179bc7bd45af687a6ec578ba55) ()
const
|  Get title. [ More...
](classignition_1_1gui_1_1Plugin.html#a9745e7179bc7bd45af687a6ec578ba55)

![-](closed.png) Public Member Functions inherited from [ QObject
](http://doc.qt.io/qt-5/qobject.html)
|  [ QObject ](http://doc.qt.io/qt-5/qobject.html#QObject) ( [ QObject
](http://doc.qt.io/qt-5/qobject.html) * [ parent
](http://doc.qt.io/qt-5/qobject.html#parent) )
|  [ QObject ](http://doc.qt.io/qt-5/qobject-qt3.html#QObject-3) ( [ QObject
](http://doc.qt.io/qt-5/qobject.html) * [ parent
](http://doc.qt.io/qt-5/qobject.html#parent) , const char * [ name
](http://doc.qt.io/qt-5/qobject-qt3.html#name) )
virtual  |  [ ~QObject ](http://doc.qt.io/qt-5/qobject.html#dtor.QObject) ()
bool  |  [ blockSignals ](http://doc.qt.io/qt-5/qobject.html#blockSignals)
(bool block)
[ QObject ](http://doc.qt.io/qt-5/qobject.html) *  |  [ child
](http://doc.qt.io/qt-5/qobject-qt3.html#child) (const char *objName, const
char *inheritsClass, bool recursiveSearch) const
const QObjectList & |  [ children
](http://doc.qt.io/qt-5/qobject.html#children) () const
const char *  |  [ className ](http://doc.qt.io/qt-5/qobject-
qt3.html#className) () const
bool  |  [ connect ](http://doc.qt.io/qt-5/qobject.html#connect-3) (const [
QObject ](http://doc.qt.io/qt-5/qobject.html) * [ sender
](http://doc.qt.io/qt-5/qobject.html#sender) , const char *signal, const char
*method, Qt::ConnectionType type) const
void  |  [ deleteLater ](http://doc.qt.io/qt-5/qobject.html#deleteLater) ()
void  |  [ destroyed ](http://doc.qt.io/qt-5/qobject.html#destroyed) ( [
QObject ](http://doc.qt.io/qt-5/qobject.html) *obj)
bool  |  [ disconnect ](http://doc.qt.io/qt-5/qobject.html#disconnect-4)
(const [ QObject ](http://doc.qt.io/qt-5/qobject.html) *receiver, const char
*method)
bool  |  [ disconnect ](http://doc.qt.io/qt-5/qobject.html#disconnect-3)
(const char *signal, const [ QObject ](http://doc.qt.io/qt-5/qobject.html)
*receiver, const char *method)
void  |  [ dumpObjectInfo ](http://doc.qt.io/qt-5/qobject.html#dumpObjectInfo)
()


[
![@azeey](https://avatars.githubusercontent.com/u/206116?s=40&u=ead1c8357bc3753d37b705eb212e7c92dcea214b&v=4)
](/azeey) [ azeey ](/azeey) moved this from **Inbox** to **To do** in [ Core
development ](/orgs/gazebosim/projects/1#card-85462627) Oct 24, 2022


|  void newMessage  |  (  |  double  |  __latitudeDeg_ ,
---|---|---|---
|  |  double  |  __longitudeDeg_
|  )  |  |
signal

Notify that a new message has been received.


To do


](classignition_1_1gui_1_1Plugin.html#a145dfdf9e6c54da937349deb4ff88efe)

[ std::string ](http://en.cppreference.com/w/cpp/string/basic_string.html) |
[ title
](classignition_1_1gui_1_1Plugin.html#ac30fed21fe991cc8475ce543929f8b72) = ""
|  Title to be displayed on top of plugin. [ More...
](classignition_1_1gui_1_1Plugin.html#ac30fed21fe991cc8475ce543929f8b72)

##  Detailed Description


           latitude = _latitudeDeg
           longitude = _longitudeDeg
         }


the ` mapboxgl ` plugin works for me. I created a PR: [ #520
](https://github.com/gazebosim/gz-gui/pull/520)


Password


Sorry, something went wrong.


[ List of all members ](classignition_1_1gui_1_1plugins_1_1NavSatMap-
members.html) |  Public Slots  |  Signals  |  Public Member Functions  |
Properties


I don't know how well they work though.

---

All reactions


[ gz-sim: spherical_coordinates.sdf  gazebosim/garden-tutorial-party#1542
](/gazebosim/garden-tutorial-party/issues/1542)


Already on GitHub? [ Sign in ](/login?return_to=%2Fgazebosim%2Fgz-
gui%2Fissues%2Fnew%2Fchoose) to your account


[ ijnek ](/ijnek) opened this issue  Sep 5, 2022  · 11 comments


Powered by [ Discourse ](https://www.discourse.org) , best viewed with
JavaScript enabled


* Solutions


##  Property Documentation


[ ![](https://ignitionrobotics.org/assets/doxygen/ignition_logo.svg)
](index.html)


No branches or pull requests


[ Projects  ](/c/projects/7)


|  virtual ~ [ NavSatMap ](classignition_1_1gui_1_1plugins_1_1NavSatMap.html)
|  (  |  |  )  |
---|---|---|---|---
virtual

Destructor.


[ ![@jennuine](https://avatars.githubusercontent.com/u/8602001?s=40&v=4)
](/jennuine) [ jennuine  ](/jennuine)


sec_7_3_7) but there is a [ mapping between erp/cfm and
stiffness/damping
](https://github.com/osrf/gazebo/blob/gazebo9/gazebo/physics/ode/ODEJoint.cc)
. Also see See the Gazebo-classic tutorial on [ Contact Parameters
](https://classic.gazebosim.org/tutorials?tut=physics_params&cat=physics


Copy link


In my robot urdf, I have the following code


Sorry, something went wrong.


[ _insert_drive_file_ Tutorials ](tutorials.html) _library_books_ Classes
_toc_ Namespaces  [ _insert_drive_file_ Files ](files.html) [ _launch_
Ignition Website ](http://ignitionrobotics.org)


##  Description


**[ jennuine ](/jennuine) ** commented  Sep 6, 2022


##  Output


  * [ Terms ](https://docs.github.com/site-policy/github-terms/github-terms-of-service)
  * [ Privacy ](https://docs.github.com/site-policy/privacy-policies/github-privacy-statement)
  * [ Security ](/security)
  * [ Status ](https://www.githubstatus.com/)
  * [ Docs ](https://docs.github.com/)
  * [ Contact ](https://support.github.com?tags=dotcom-footer)
  * Manage cookies
  * Do not share my personal information


[ Help  ](/c/help/8)


          <mass value='0.25' />
          <inertia ixx='0.01' ixy='0' ixz='0' iyy='0.01' iyz='0' izz='0.01' />
        </inertial>
        <visual>
          <origin xyz="2 0 0" rpy="0 0 0"/>
          <geometry>
            <cylinder length="1" radius="2"/>
          </geometry>
        </visual>
      </link>
      <gazebo reference='j1'>
        <disableFixedJointLumping>true</disableFixedJointLumping>
      </gazebo>
    </robot>

results in:

    <!--SDFormat-->
    <sdf version='1.9'>
      <model name='disable_fixed_joint_lumping_example'>
        <link name='base_link'>
          <inertial>
            <pose>0 0 0 0 0 0</pose>
            <mass>0.25</mass>
            <inertia>
              <ixx>0.01</ixx>
              <ixy>0</ixy>
              <ixz>0</ixz>
              <iyy>0.01</iyy>
              <iyz>0</iyz>
              <izz>0.01</izz>
            </inertia>
          </inertial>
          <collision name='base_link_collision'>
            <pose>0 0 0 0 0 0</pose>
            <geometry>


  Table of Contents

  * SDFormat extensions to URDF (the ` <gazebo> ` tag)
    * ` <gazebo> ` Elements For ` <robot> `
    * ` <gazebo> ` Elements For Links
    * Special meaning for ` <visual> ` , ` <collision> ` , and ` <material> `
      * ` <gazebo> ` Elements For Joints
      * Fixed joint lumping


` #include < [ NavSatMap.hh ](NavSatMap_8hh_source.html) > `


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


I just realized you're on ` jammy ` not ` focal ` , re-opening issue since
this wasn't tested appropriately

---

All reactions


**Have a question about this project?** Sign up for a free GitHub account to
open an issue and contact its maintainers and the community.


###  Footer navigation


[ ignition ](https://community.gazebosim.org/tag/ignition) , [ ros1
](https://community.gazebosim.org/tag/ros1)


Contributor


Parameters


The documentation for this class was generated from the following file:


  SDFormat extensions to URDF (the ` <gazebo> ` tag)

When URDF files are loaded by Gazebo (both Gazebo-classic and the new Gazebo),
the URDF content is first converted to SDFormat before being processed by
Gazebo. Users who want to modify the resulting SDFormat output to include
SDFormat specific elements may do so using the ` <gazebo> ` tag in the
original URDF file. This is known as the Gazebo extension to the [ URDF
specification ](http://wiki.ros.org/urdf/XML) (see [
http://wiki.ros.org/urdf/XML/Gazebo ](http://wiki.ros.org/urdf/XML/Gazebo) )

The URDF to SDFormat conversion usually happens automatically without users
observing the resulting SDFormat file. To diagnose any issues that might come
up during the conversion, the tool

` gz sdf -p <path to urdf file> `

can be used to convert the URDF file to SDFormat that can be inspected by the
user.

The following is the documentation of the various tags available under `
<gazebo> ` and their corresponding effect on the SDFormat output. While some
of the content included here is also available in the [ "Using a URDF in
Gazebo" ](http://gazebosim.org/tutorials?tut=ros_urdf&cat=connect_ros)
tutorial of Gazebo-classic, this document should provide a more complete
discussion of the extension, especially regarding fixed joint lumping.


  * [ Notifications ](/login?return_to=%2Fgazebosim%2Fgz-gui)
  * [ Fork  38  ](/login?return_to=%2Fgazebosim%2Fgz-gui)
  * [ Star  62  ](/login?return_to=%2Fgazebosim%2Fgz-gui)


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


I’ve been following the link below, but I am unable to see any navsat topic in
gazebo
[ https://answers.gazebosim.org//question/28643/gps-sensor-plugin-in-ignition/
](https://answers.gazebosim.org//question/28643/gps-sensor-plugin-in-
ignition/)


encouraged to use ` preserveFixedJoint ` instead.  |

> **Note:** The XPath used in the "Corresponding SDFormat element" column is
> relative to the joint element.

**Example:** The spring reference and stiffness of a joint can be set using `
<springReference> ` and ` <springStiffness> ` respectively.

    <?xml version='1.0' encoding='UTF-8'?>
    <!--URDF-->
    <robot name='joint_example'>
      <link name='base_link'>
        <inertial>
          <mass value='0.12' />
          <inertia ixx='0.01' ixy='0' ixz='0' iyy='0.01' iyz='0' izz='0.01' />
        </inertial>
      </link>
      <joint name='j1' type='continuous'>
        <parent link='base_link'/>
        <child link='end_effector'/>
        <origin xyz='0 0 1' rpy='0 0 0'/>
      </joint>
      <link name='end_effector'>
        <inertial>
          <mass value='0.12' />
          <inertia ixx='0.01' ixy='0' ixz='0' iyy='0.01' iyz='0' izz='0.01' />
        </inertial>
      </link>
      <gazebo reference='j1'>
        <springReference>0.5</springReference>
        <springStiffness>0.25</springStiffness>
      </gazebo>
    </robot>

This creates the elements ` //axis/dynamics/spring_reference ` and `
//axis/dynamics//spring_stiffness ` in the referenced joint of the SDFormat


On my world sdf, I also included


Skip to content


  1. Apply below patch, rebuild
  2. ` gz sim -v 4 -r spherical_coordinates.sdf `
  3. Add the ` Nav Sat Map ` from the plugin menu
  4. Translate the box somewhere, this is when the GUI freezes


[
![@jennuine](https://avatars.githubusercontent.com/u/8602001?s=40&u=0446d249f29faf472e0c19bbff6671907d6e2dce&v=4)
](/jennuine) [ jennuine ](/jennuine) reopened this  Sep 6, 2022


#  [ How to use NavSat plugin ](/t/how-to-use-navsat-plugin/2468)


##  Constructor & Destructor Documentation


There's some discussion [ here
](https://www.qt.io/blog/2017/03/09/provisioning-openstreetmap-providers-in-
qtlocation) about a change in map providers which might be causing the issue.
I tried playing with the configuration options mentioned there and in [
https://forum.sailfishos.org/t/using-qml-map-osm-not-working/7261
](https://forum.sailfishos.org/t/using-qml-map-osm-not-working/7261) with no
luck

---

All reactions


**[ JaouadROS ](/JaouadROS) ** commented  Mar 8, 2023


[
![@jennuine](https://avatars.githubusercontent.com/u/8602001?s=80&u=0446d249f29faf472e0c19bbff6671907d6e2dce&v=4)
](/jennuine)


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


We read every piece of feedback, and take your input very seriously.


Q_INVOKABLE void SetTopicList  |  (  |  const [ QStringList
](http://doc.qt.io/qt-5/qstringlist.html) & |  __topicList_ |  )  |
---|---|---|---|---|---

Set the topic list.


Closed


By Solution


##  ◆  NavSatMap()


Sorry, something went wrong.


I can confirm, I have the same issue with navsatmap gui plugin with same
config (gazebo Fortress and Ubuntu 22.04)

---

All reactions


[ Help  ](/c/help/8)


[ ![@azeey](https://avatars.githubusercontent.com/u/206116?s=52&v=4) ](/azeey)
[ ![@vincentrou](https://avatars.githubusercontent.com/u/921593?s=52&v=4)
](/vincentrou) [
![@23pointsNorth](https://avatars.githubusercontent.com/u/3803951?s=52&v=4)
](/23pointsNorth) [
![@iche033](https://avatars.githubusercontent.com/u/4000684?s=52&v=4)
](/iche033) [
![@JaouadROS](https://avatars.githubusercontent.com/u/8393796?s=52&v=4)
](/JaouadROS) [
![@jennuine](https://avatars.githubusercontent.com/u/8602001?s=52&v=4)
](/jennuine) [
![@ijnek](https://avatars.githubusercontent.com/u/18237662?s=52&v=4) ](/ijnek)


      <plugin filename="ComponentInspector" name="Component inspector">
        <ignition-gui>
          <property type="string" key="state">docked</property>
        </ignition-gui>
      </plugin>
      <!-- Map -->
      <plugin filename="NavSatMap" name="NavSat Map">
        <ignition-gui>
          <title>NavSat Map</title>
          <property key="state" type="string">docked</property>
        </ignition-gui>
        <topic>/navsat</topic>
        <topic_picker>true</topic_picker>
      </plugin>
    </gui>
    <light type="directional" name="sun">
    </light>
    <model name="ground_plane">
      <static>true</static>
      <link name="link">
        <collision name="collision">
          <geometry>
            <plane>
              <normal>0 0 1</normal>
              <size>100 100</size>
            </plane>
          </geometry>
        </collision>
        <visual name="visual">
          <geometry>
            <plane>
              <normal>0 0 1</normal>
              <size>100 100</size>
            </plane>
          </geometry>
          <material>
            <ambient>0.8 0.8 0.8 1</ambient>
            <diffuse>0.8 0.8 0.8 1</diffuse>
            <specular>0.8 0.8 0.8 1</specular>
          </material>


Assignees


##  ◆  topicList


[ Nav Sat Map crashes  gazebosim/gz-sim#1919  ](/gazebosim/gz-sim/issues/1919)


[ ![image](https://user-
images.githubusercontent.com/18237662/188521559-3ad29718-1067-48bd-b0d4-1a999f76f891.png)
](https://user-
images.githubusercontent.com/18237662/188521559-3ad29718-1067-48bd-b0d4-1a999f76f891.png)

---

The text was updated successfully, but these errors were encountered:


##  API Reference


results in:

    <!--SDFormat-->
    <sdf version='1.9'>
      <model name='material_example'>
        <link name='base_link'>
          <inertial>
            <pose>0 0 0 0 0 0</pose>
            <mass>0.10000000000000001</mass>
            <inertia>
              <ixx>0.01</ixx>
              <ixy>0</ixy>
              <ixz>0</ixz>
              <iyy>0.01</iyy>
              <iyz>0</iyz>
              <izz>0.01</izz>
            </inertia>
          </inertial>
          <visual name='base_link_visual'>
            <pose>0 0 0 0 0 0</pose>
            <geometry>
              <sphere>
                <radius>2</radius>
              </sphere>
            </geometry>
            <material>
              <script>
                <name>Gazebo/Orange</name>
                <uri>file://media/materials/scripts/gazebo.material</uri>
              </script>
            </material>
          </visual>
        </link>
      </model>
    </sdf>


7 tasks


#  Provide feedback


Additional navigation options


Contributor


  * [ List ](namespaces.html)
  * [ Members ](namespacemembers.html)
  * [ Functions ](namespacemembers_func.html)
  * [ Typedefs ](namespacemembers_type.html)
  * [ Variables ](namespacemembers_vars.html)
  * [ Enumerations ](namespacemembers_enum.html)
  * [ Enumerator ](namespacemembers_eval.html)


[ NavSatMap ](classignition_1_1gui_1_1plugins_1_1NavSatMap.html) |  (  |  |  )
|
---|---|---|---|---

Constructor.


**[ iche033 ](/iche033) ** commented  Mar 9, 2023  •


[ ![@osrf-
triage](https://avatars.githubusercontent.com/u/64509390?s=40&u=44c7fd6577d19cf16eb27663cf8a46a4c8439a77&v=4)
](/osrf-triage) [ osrf-triage ](/osrf-triage) added this to **Inbox** in [
Core development ](/orgs/gazebosim/projects/1#card-85462627) Sep 5, 2022


  * [ Index ](classes.html)
  * [ List ](annotated.html)
  * [ Hierarchy ](hierarchy.html)
  * [ Members: All ](functions.html)
  * [ Members: Functions ](functions_func.html)
  * [ Members: Variables ](functions_vars.html)
  * [ Members: Typedefs ](functions_type.html)
  * [ Members: Enumerations ](functions_enum.html)
  * [ Members: Enumerator ](functions_eval.html)


Contactparameters)
for more detail)  |  ` collision/max_contacts `
laserRetro  |  double  |  Intensity value returned by laser sensor.  |  `
collision/laser_retro `
visual  |  element  |  The content of the element will be inserted into each `
visual ` of the SDFormat link  |  ` visual `
material  |  element  |  The content of the element will be inserted into each
` material ` of the SDFormat link  |  ` visual/material `
collision  |  element  |  The content of the element will be inserted into
each ` collision ` of the SDFormat link  |  ` collision `

> **Note:** The XPath used in the "Corresponding SDFormat element" column is
> relative to the link element.

**Example:**

The following shows how to set the first coefficient of friction for all `
<collision> ` elements in a link

    <?xml version='1.0' encoding='UTF-8'?>
    <!--URDF-->
    <robot name='friction_example'>
      <link name='base_link'>
        <inertial>
          <mass value='0.12' />
          <inertia ixx='0.01' ixy='0' ixz='0' iyy='0.01' iyz='0' izz='0.01' />
        </inertial>
        <collision>
          <geometry>
            <sphere radius="2"/>
          </geometry>
        </collision>
        <collision>
          <geometry>
            <cylinder radius="1" length="2"/>
          </geometry>
        </collision>
      </link>


[
![@ijnek](https://avatars.githubusercontent.com/u/18237662?s=40&u=e1f1fd232e1e951d86a883d8de72afcfc1bc10a3&v=4)
](/ijnek) [ ijnek ](/ijnek) added the [ bug ](/gazebosim/gz-gui/labels/bug)
Something isn't working  label  Sep 5, 2022


[ ![@caguero](https://avatars.githubusercontent.com/u/1440739?s=40&v=4)
](/caguero) [ caguero ](/caguero) mentioned this issue  Mar 7, 2023


[ Core development  ](/orgs/gazebosim/projects/7)


virtual void  |  [ LoadConfig
](classignition_1_1gui_1_1plugins_1_1NavSatMap.html#a23b77569f666353a9794d926b949a179)
(const tinyxml2::XMLElement *_pluginElem)
|  Load the plugin with a configuration file. Override this on custom plugins
to handle custom configurations.  More...

Q_INVOKABLE void  |  [ SetTopicList
](classignition_1_1gui_1_1plugins_1_1NavSatMap.html#a9925a8fe7dba96c0f69b75464d8659d2)
(const [ QStringList ](http://doc.qt.io/qt-5/qstringlist.html) &_topicList)
|  Set the topic list.  More...

Q_INVOKABLE [ QStringList ](http://doc.qt.io/qt-5/qstringlist.html) |  [
TopicList
](classignition_1_1gui_1_1plugins_1_1NavSatMap.html#a5e51b7897a432c463a4dcfcce5e3363f)
() const
|  Get the list of topics publishing NavSat messages.  More...

![-](closed.png) Public Member Functions inherited from [ Plugin
](classignition_1_1gui_1_1Plugin.html)
|  [ Plugin
](classignition_1_1gui_1_1Plugin.html#ac6f2688af203e5a5aa47ec9cea5fb6f2) ()
|  Constructor. [ More...
](classignition_1_1gui_1_1Plugin.html#ac6f2688af203e5a5aa47ec9cea5fb6f2)

virtual  |  [ ~Plugin
](classignition_1_1gui_1_1Plugin.html#a96cbafa7a127c08d0b97e147f129f5a7) ()
|  Destructor. [ More...
](classignition_1_1gui_1_1Plugin.html#a96cbafa7a127c08d0b97e147f129f5a7)

QQuickItem *  |  [ CardItem
](classignition_1_1gui_1_1Plugin.html#a4ad649987484b5cdcc9baa1035345b80) ()
const
|  Get the card item which contains this plugin. The item is generated the
first time this function is run. [ More...
](classignition_1_1gui_1_1Plugin.html#a4ad649987484b5cdcc9baa1035345b80)

virtual [ std::string
](http://en.cppreference.com/w/cpp/string/basic_string.html) |  [ ConfigStr
](classignition_1_1gui_1_1Plugin.html#a791b774c262f5271550350ec5030f87d) ()


No milestone


Constraintsparameters)
for more detail)  |  ` collision/surface/contact/ode/min_depth `
mu1  |  double  |  Friction coefficients μ for the principal contact
directions along the contact surface as defined by the [ Open Dynamics Engine
(ODE) ](http://www.ode.org) (see parameter descriptions in [ ODE's user guide
](http://www.ode.org/ode-latest-userguide.html


Closed


##  Footer


    * [ Learning Pathways  ](https://resources.github.com/learn/pathways/)
    * [ White papers, Ebooks, Webinars  ](https://resources.github.com/)
    * [ Customer Stories ](/customer-stories)
    * [ Partners  ](https://partner.github.com/)


|  void TopicListChanged  |  (  |  |  )  |
---|---|---|---|---
signal

Notify that topic list has changed.


Open


I was able to get a little further with the below patch but the GUI will
eventually freeze. Unfortunately, I don't have time to continue looking at
this but here are the steps in case anyone does (On Jammy, using Gazebo
Garden):


* [ NavSatMap.hh ](NavSatMap_8hh_source.html)


Sorry, something went wrong.


The following warning may be related:


Copy link


Toggle navigation


    /home/user/ros2_ws/src/Wall Follower/wall_follower/src/wall_follower_part3.cpp: In member function 'void WallFollower::send_goal()':
    /home/user/ros2_ws/src/Wall Follower/wall_follower/src/wall_follower_part3.cpp:119:66: error: no match for 'operator=' (operand types are 'rclcpp_action::Client<custom_interfaces::action::OdomRecord>::GoalResponseCallback' {aka 'std::function<void(std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<custom_interfaces::action::OdomRecord> > >)>'} and 'std::_Bind_helper<false, void (WallFollower::*)(const std::shared_ptr<rclcpp_action::ClientGoalHandle<custom_interfaces::action::OdomRecord> >&), WallFollower*, const std::_Placeholder<1>&>::type' {aka 'std::_Bind<void (WallFollower::*(WallFollower*, std::_Placeholder<1>))(const std::shared_ptr<rclcpp_action::ClientGoalHandle<custom_interfaces::action::OdomRecord> >&)>'})
      119 |         std::bind(&WallFollower::goal_response_callback, this, _1);
          |                                                                  ^
    In file included from /usr/include/c++/9/functional:59,
                     from /opt/ros/foxy/include/rclcpp/utilities.hpp:19,
                     from /opt/ros/foxy/include/rclcpp/logging.hpp:25,
                     from /home/user/ros2_ws/src/Wall Follower/wall_follower/src/wall_follower_part3.cpp:3:
    /usr/include/c++/9/bits/std_function.h:462:7: note: candidate: 'std::function<_Res(_ArgTypes ...)>& std::function<_Res(_ArgTypes ...)>::operator=(const std::function<_Res(_ArgTypes ...)>&) [with _Res = void; _ArgTypes = {std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<custom_interfaces::action::OdomRecord> > >}]'
      462 |       operator=(const function& __x)
          |       ^~~~~~~~
    /usr/include/c++/9/bits/std_function.h:462:33: note:   no known conversion for argument 1 from 'std::_Bind_helper<false, void (WallFollower::*)(const std::shared_ptr<rclcpp_action::ClientGoalHandle<custom_interfaces::action::OdomRecord> >&), WallFollower*, const std::_Placeholder<1>&>::type' {aka 'std::_Bind<void (WallFollower::*(WallFollower*, std::_Placeholder<1>))(const std::shared_ptr<rclcpp_action::ClientGoalHandle<custom_interfaces::action::OdomRecord> >&)>'} to 'const std::function<void(std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<custom_interfaces::action::OdomRecord> > >)>&'
      462 |       operator=(const function& __x)
          |                 ~~~~~~~~~~~~~~~~^~~
    /usr/include/c++/9/bits/std_function.h:480:7: note: candidate: 'std::function<_Res(_ArgTypes ...)>& std::function<_Res(_ArgTypes ...)>::operator=(std::function<_Res(_ArgTypes ...)>&&) [with _Res = void; _ArgTypes = {std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<custom_interfaces::action::OdomRecord> > >}]'
      480 |       operator=(function&& __x) noexcept
          |       ^~~~~~~~
    /usr/include/c++/9/bits/std_function.h:480:28: note:   no known conversion for argument 1 from 'std::_Bind_helper<false, void (WallFollower::*)(const std::shared_ptr<rclcpp_action::ClientGoalHandle<custom_interfaces::action::OdomRecord> >&), WallFollower*, const std::_Placeholder<1>&>::type' {aka 'std::_Bind<void (WallFollower::*(WallFollower*, std::_Placeholder<1>))(const std::shared_ptr<rclcpp_action::ClientGoalHandle<custom_interfaces::action::OdomRecord> >&)>'} to 'std::function<void(std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<custom_interfaces::action::OdomRecord> > >)>&&'
      480 |       operator=(function&& __x) noexcept
          |                 ~~~~~~~~~~~^~~
    /usr/include/c++/9/bits/std_function.h:494:7: note: candidate: 'std::function<_Res(_ArgTypes ...)>& std::function<_Res(_ArgTypes ...)>::operator=(std::nullptr_t) [with _Res = void; _ArgTypes = {std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<custom_interfaces::action::OdomRecord> > >}; std::nullptr_t = std::nullptr_t]'
      494 |       operator=(nullptr_t) noexcept
          |       ^~~~~~~~
    /usr/include/c++/9/bits/std_function.h:494:17: note:   no known conversion for argument 1 from 'std::_Bind_helper<false, void (WallFollower::*)(const std::shared_ptr<rclcpp_action::ClientGoalHandle<custom_interfaces::action::OdomRecord> >&), WallFollower*, const std::_Placeholder<1>&>::type' {aka 'std::_Bind<void (WallFollower::*(WallFollower*, std::_Placeholder<1>))(const std::shared_ptr<rclcpp_action::ClientGoalHandle<custom_interfaces::action::OdomRecord> >&)>'} to 'std::nullptr_t'
      494 |       operator=(nullptr_t) noexcept
          |                 ^~~~~~~~~
    /usr/include/c++/9/bits/std_function.h:523:2: note: candidate: 'template<class _Functor> std::function<_Res(_ArgTypes ...)>::_Requires<std::function<_Res(_ArgTypes ...)>::_Callable<typename std::decay<_Functor>::type>, std::function<_Res(_ArgTypes ...)>&> std::function<_Res(_ArgTypes ...)>::operator=(_Functor&&) [with _Functor = _Functor; _Res = void; _ArgTypes = {std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<custom_interfaces::action::OdomRecord> > >}]'
      523 |  operator=(_Functor&& __f)
          |  ^~~~~~~~
    /usr/include/c++/9/bits/std_function.h:523:2: note:   template argument deduction/substitution failed:
    /usr/include/c++/9/bits/std_function.h: In substitution of 'template<class _Res, class ... _ArgTypes> template<class _Cond, class _Tp> using _Requires = typename std::enable_if<_Cond::value, _Tp>::type [with _Cond = std::function<void(std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<custom_interfaces::action::OdomRecord> > >)>::_Callable<std::_Bind<void (WallFollower::*(WallFollower*, std::_Placeholder<1>))(const std::shared_ptr<rclcpp_action::ClientGoalHandle<custom_interfaces::action::OdomRecord> >&)>, std::__invoke_result<std::_Bind<void (WallFollower::*(WallFollower*, std::_Placeholder<1>))(const std::shared_ptr<rclcpp_action::ClientGoalHandle<custom_interfaces::action::OdomRecord> >&)>&, std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<custom_interfaces::action::OdomRecord> > > > >; _Tp = std::function<void(std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<custom_interfaces::action::OdomRecord> > >)>&; _Res = void; _ArgTypes = {std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<custom_interfaces::action::OdomRecord> > >}]':
    /usr/include/c++/9/bits/std_function.h:523:2:   required by substitution of 'template<class _Functor> std::function<void(std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<custom_interfaces::action::OdomRecord> > >)>::_Requires<std::function<void(std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<custom_interfaces::action::OdomRecord> > >)>::_Callable<typename std::decay<_Tp>::type, std::__invoke_result<typename std::decay<_Tp>::type&, std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<custom_interfaces::action::OdomRecord> > > > >, std::function<void(std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<custom_interfaces::action::OdomRecord> > >)>&> std::function<void(std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<custom_interfaces::action::OdomRecord> > >)>::operator=<_Functor>(_Functor&&) [with _Functor = std::_Bind<void (WallFollower::*(WallFollower*, std::_Placeholder<1>))(const std::shared_ptr<rclcpp_action::ClientGoalHandle<custom_interfaces::action::OdomRecord> >&)>]'
    /home/user/ros2_ws/src/Wall Follower/wall_follower/src/wall_follower_part3.cpp:119:66:   required from here
    /usr/include/c++/9/bits/std_function.h:385:8: error: no type named 'type' in 'struct std::enable_if<false, std::function<void(std::shared_future<std::shared_ptr<rclcpp_action::ClientGoalHandle<custom_interfaces::action::OdomRecord> > >)>&>'
      385 |  using _Requires = typename enable_if<_Cond::value, _Tp>::type;


  1\. What are the _performance_ implications of the following function
declaration? Explain.

    void f( shared_ptr<widget> );

A  shared_ptr  stores strong and weak reference counts (see GotW


            // Orientation quaternion
            tf2::Quaternion q(
                        msg->pose.pose.orientation.x,
                        msg->pose.pose.orientation.y,
                        msg->pose.pose.orientation.z,
                        msg->pose.pose.orientation.w);

            // 3x3 Rotation matrix from quaternion
            tf2::Matrix3x3 m(q);

            // Roll Pitch and Yaw from rotation matrix
            double roll, pitch, yaw;
            m.getRPY(roll, pitch, yaw);

            // Output the measure
            RCLCPP_INFO(get_logger(), "Received odometry in '%s' frame : X: %.2f Y: %.2f Z: %.2f - R: %.2f P: %.2f Y: %.2f - Timestamp: %u.%u sec ",
                     msg->header.frame_id.c_str(),
                     tx, ty, tz,
                     roll * RAD2DEG, pitch * RAD2DEG, yaw * RAD2DEG,
                        msg->header.stamp.sec,msg->header.stamp.nanosec);
        }

    private:
        rclcpp::Subscription<geometry_msgs::msg::PoseStamped>::SharedPtr mPoseSub;
        rclcpp::Subscription<nav_msgs::msg::Odometry>::SharedPtr mOdomSub;
    };

    int main(int argc, char* argv[]) {
        rclcpp::init(argc, argv);
        rclcpp::spin(std::make_shared<MinimalPoseOdomSubscriber>());
        rclcpp::shutdown();
        return 0;
    }


[ _≪_ Previous: unable to read the data from micro controller on ROS
](//question1970.rssing.com/chan-34075453/all_p2.html#c34075453a23 "Previous
Article")


[ w.ronaldo.cd  ](https://get-help.theconstruct.ai/u/w.ronaldo.cd) March 16,
2023, 10:25pm  8


      double cycleAngle = asin((distanceRight-distanceLeft)/WHEEL_BASE);

      // Average angle during the last cycle
      double avgAngle = cycleAngle/2 + odomOld.pose.pose.orientation.z;

      if (avgAngle > PI) {
        avgAngle -= 2*PI;
      }
      else if (avgAngle < -PI) {
        avgAngle += 2*PI;
      }
      else{}

      // Calculate the new pose (x, y, and theta)
      odomNew.pose.pose.position.x = odomOld.pose.pose.position.x + cos(avgAngle)*cycleDistance;
      odomNew.pose.pose.position.y = odomOld.pose.pose.position.y + sin(avgAngle)*cycleDistance;
      odomNew.pose.pose.orientation.z = cycleAngle + odomOld.pose.pose.orientation.z;

      // Prevent lockup from a single bad cycle
      if (isnan(odomNew.pose.pose.position.x) || isnan(odomNew.pose.pose.position.y)
         || isnan(odomNew.pose.pose.position.z)) {
        odomNew.pose.pose.position.x = odomOld.pose.pose.position.x;
        odomNew.pose.pose.position.y = odomOld.pose.pose.position.y;
        odomNew.pose.pose.orientation.z = odomOld.pose.pose.orientation.z;
      }

      // Make sure theta stays in the correct range
      if (odomNew.pose.pose.orientation.z > PI) {
        odomNew.pose.pose.orientation.z -= 2 * PI;
      }
      else if (odomNew.pose.pose.orientation.z < -PI) {
        odomNew.pose.pose.orientation.z += 2 * PI;
      }
      else{}

      // Compute the velocity
      odomNew.header.stamp = ros::Time::now();
      odomNew.twist.twist.linear.x = cycleDistance/(odomNew.header.stamp.toSec() - odomOld.header.stamp.toSec());
      odomNew.twist.twist.angular.z = cycleAngle/(odomNew.header.stamp.toSec() - odomOld.header.stamp.toSec());


    [INFO] [zed_odom_pose_tutorial]: Received pose in 'map' frame : X: 0.00 Y: -0.00 Z: -0.00 - R: 0.40 P: 5.67 Y: 0.00 - Timestamp: 1603116715.61113293 sec
    [INFO] [zed_odom_pose_tutorial]: Received odometry in 'odom' frame : X: -0.00 Y: 0.00 Z: 0.00 - R: 0.28 P: 5.68 Y: 0.07 - Timestamp: 1603116715.61113293 sec
    [INFO] [zed_odom_pose_tutorial]: Received pose in 'map' frame : X: 0.00 Y: -0.00 Z: -0.00 - R: 0.40 P: 5.67 Y: 0.00 - Timestamp: 1603116715.161133293 sec
    [INFO] [zed_odom_pose_tutorial]: Received odometry in 'odom' frame : X: -0.00 Y: 0.00 Z: 0.00 - R: 0.28 P: 5.68 Y: 0.07 - Timestamp: 1603116715.161133293 sec
    [INFO] [zed_odom_pose_tutorial]: Received pose in 'map' frame : X: 0.00 Y: -0.00 Z: -0.00 - R: 0.40 P: 5.67 Y: 0.00 - Timestamp: 1603116715.261042293 sec
    [INFO] [zed_odom_pose_tutorial]: Received odometry in 'odom' frame : X: -0.00 Y: 0.00 Z: 0.00 - R: 0.28 P: 5.68 Y: 0.07 - Timestamp: 1603116715.261042293 sec
    [INFO] [zed_odom_pose_tutorial]: Received pose in 'map' frame : X: 0.00 Y: -0.00 Z: -0.00 - R: 0.40 P: 5.67 Y: 0.00 - Timestamp: 1603116715.361011293 sec
    [INFO] [zed_odom_pose_tutorial]: Received odometry in 'odom' frame : X: -0.00 Y: 0.00 Z: 0.00 - R: 0.28 P: 5.68 Y: 0.07 - Timestamp: 1603116715.361011293 sec
    [INFO] [zed_odom_pose_tutorial]: Received pose in 'map' frame : X: 0.00 Y: -0.00 Z: -0.00 - R: 0.40 P: 5.67 Y: 0.00 - Timestamp: 1603116715.461130293 sec
    [INFO] [zed_odom_pose_tutorial]: Received odometry in 'odom' frame : X: -0.00 Y: 0.00 Z: 0.00 - R: 0.28 P: 5.68 Y: 0.07 - Timestamp: 1603116715.461130293 sec
    [INFO] [zed_odom_pose_tutorial]: Received pose in 'map' frame : X: 0.00 Y: -0.00 Z: -0.00 - R: 0.40 P: 5.67 Y: 0.00 - Timestamp: 1603116715.561097293 sec
    [INFO] [zed_odom_pose_tutorial]: Received odometry in 'odom' frame : X: 0.00 Y: 0.00 Z: 0.00 - R: 0.28 P: 5.68 Y: 0.07 - Timestamp: 1603116715.561097293 sec
    [INFO] [zed_odom_pose_tutorial]: Received odometry in 'odom' frame : X: 0.00 Y: 0.00 Z: 0.00 - R: 0.28 P: 5.68 Y: 0.07 - Timestamp: 1603116715.661202293 sec
    [INFO] [zed_odom_pose_tutorial]: Received pose in 'map' frame : X: 0.00 Y: -0.00 Z: -0.00 - R: 0.40 P: 5.67 Y: 0.00 - Timestamp: 1603116715.661202293 sec
    [INFO] [zed_odom_pose_tutorial]: Received odometry in 'odom' frame : X: 0.00 Y: 0.00 Z: 0.00 - R: 0.28 P: 5.68 Y: 0.07 - Timestamp: 1603116715.761130293 sec
    [INFO] [zed_odom_pose_tutorial]: Received pose in 'map' frame : X: 0.00 Y: -0.00 Z: -0.00 - R: 0.40 P: 5.67 Y: 0.00 - Timestamp: 1603116715.761130293 sec
    [INFO] [zed_odom_pose_tutorial]: Received odometry in 'odom' frame : X: 0.00 Y: 0.00 Z: 0.00 - R: 0.28 P: 5.68 Y: 0.07 - Timestamp: 1603116715.861144293 sec
    [INFO] [zed_odom_pose_tutorial]: Received pose in 'map' frame : X: 0.00 Y: -0.00 Z: -0.00 - R: 0.40 P: 5.67 Y: 0.00 - Timestamp: 1603116715.861144293 sec
    [INFO] [zed_odom_pose_tutorial]: Received odometry in 'odom' frame : X: 0.00 Y: 0.00 Z: 0.00 - R: 0.28 P: 5.68 Y: 0.07 - Timestamp: 1603116715.961162293 sec
    [INFO] [zed_odom_pose_tutorial]: Received pose in 'map' frame : X: 0.00 Y: -0.00 Z: -0.00 - R: 0.40 P: 5.67 Y: 0.00 - Timestamp: 1603116715.961162293 sec
    [INFO] [zed_odom_pose_tutorial]: Received odometry in 'odom' frame : X: 0.00 Y: 0.00 Z: 0.00 - R: 0.28 P: 5.68 Y: 0.07 - Timestamp: 1603116716.61205293 sec
    [INFO] [zed_odom_pose_tutorial]: Received pose in 'map' frame : X: 0.00 Y: -0.00 Z: -0.00 - R: 0.40 P: 5.67 Y: 0.00 - Timestamp: 1603116716.61205293 sec


comment-11658)

@GregM

“which is a problem no matter which kind of pointer”

See, Herb made exactly the same kind of observation in his parenthetical
caveat: “… but in this respect it’s no different than any other aliased
object.”

What difference does it make to whether we need to take care in this
situation?

It’s not just a problem for pointers, it’s a problem for any object with
mutable internal state, e.g. a string vs. a ‘const string&’

This doesn’t stop it from being a problem in the case of shared_ptr, does it?

By accepting a parameter that is a const &, you’ve already introduced at least
one alias. You’ve said, in effect, “I don’t care if this object stays alive –
I assume all my callers will ensure that for me”.

Rather than saying “it’s a guarantee (except it’s not)”, why not instead say
we always have the same trade-off to make:

1\. copy (slow, but ensures object will survive)
2\. ref (fast, doesn’t ensure object will survive)

If you follow 2 by default throughout your code, you are practicing the art of
“write fast code, then fix it”. If you follow 1 by default, you’re following
“write correct code, then optimize it”.

Again, choose your poison! Due to the severe performance problem caused by all
the ref-counting, optimizing a correct program may be as hard as
finding/fixing bugs in a fast program.

  22. ![](https://1.gravatar.com/avatar/15fd957a4ab2c9a249d6f8d9daceb90fe25bc313c9a8ad9d47b61a0477ea1b6d?s=48&d=identicon&r=G) **GregM** says:

[ 2013-06-21 at 11:20 am
](https://herbsutter.com/2013/06/05/gotw-91-solution-smart-pointer-
parameters/


[ ](javascript:; "Like") 0


  * [ Home ](https://automaticaddison.com)
  * [ Need Help? ](https://automaticaddison.com/contact/)
  * [ Tutorials ](https://automaticaddison.com/tutorials/)
  * [ About Me ](https://automaticaddison.com/about-me/)


###  [ 19 Reader-Favourite March Purchases — From Steals To Splurges
](////refinery1042.rssing.com/chan-72297680/article18978.html#c72297680a18978i36572736)


cd ~/catkin_ws


comment-10985)

For mutable parameters, I like to use my tiny inout header[1], which provides
out and inout parameters in the same style as C


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


  * Real-World Applications
  * Prerequisites
  * Getting Started
  * Add the Wheel Odometry Publisher to a Launch File


In robotics, [ odometry ](https://en.wikipedia.org/wiki/Odometry) is about
using data from sensors (e.g. [ wheel encoders
](https://automaticaddison.com/how-to-publish-wheel-encoder-tick-data-using-
ros-and-arduino/) ) to estimate the change in the robot’s position and
orientation over time relative to some [ world-fixed point (e.g. x=0,y=0,z=0)
](https://www.ros.org/reps/rep-0105.html#coordinate-frames) . We use
trigonometry at each timestep along with the data from the wheel encoders to
generate estimates of where the robot is in the world and [ how it is oriented
](https://automaticaddison.com/how-to-describe-the-rotation-of-a-robot-in-2d/)
.


[ ](javascript:;) Switch Editions?
[ Cancel ](javascript:;)


[ The Construct ROS Community ](/)


comment-19766)

It’s an awesome paragraph in favor of all the online people; they will get
advantage from it I
am sure.

  7. ![](https://0.gravatar.com/avatar/92c9a508ba0addb1d73b25bf131165943f3b0a13f4e7b492e4f8ef9ccb5a323c?s=48&d=identicon&r=G) **Matt Wilson** says:

[ 2014-02-06 at 10:53 am
](https://herbsutter.com/2013/06/05/gotw-91-solution-smart-pointer-
parameters/


comment-25067)

Matt, there’s a discussion on this exact topic going on right now over at
Scott Meyer’s blog, and Herb’s involved.
[ http://scottmeyers.blogspot.com/2014/07/should-move-only-types-ever-be-
passed.html ](http://scottmeyers.blogspot.com/2014/07/should-move-only-types-
ever-be-passed.html)

  5. ![](https://2.gravatar.com/avatar/5b318006469e88679bd2512c4c1fcca7c7c0df29269944217f6b10262f177fad?s=48&d=identicon&r=G) **[ Matt B ](http://www.ccs.neu.edu/home/mbisson/) ** says:

[ 2014-08-22 at 6:51 am  ](https://herbsutter.com/2013/06/05/gotw-91-solution-
smart-pointer-parameters/


[ ](javascript:; "Ouch") 0


Thank you, it worked.


[ _≪_ Previous: custom rqt gui
](//question1970.rssing.com/chan-34075453/all_p2.html#c34075453a35 "Previous
Article")


Problem


January 12, 2015, 1:54 pm


More Pages to Explore .....


[ ](https://github.com/stereolabs/zed-sdk "GitHub")


comment-11039)

@Herb: If a function is going to decide at runtime whether to share ownership
or not, should we still pass the shared_ptr by value or is const reference a
legitimate choice? It seems to me that if we pass an lvalue by value and the
called function decides not to share ownership, we’ve copied a share_ptr for
no reason.

  28. ![](https://2.gravatar.com/avatar/50b115889174fdbe7969870dad3d92e20260f58a9465991a2e32393f39a3ad73?s=48&d=identicon&r=G) **Brian Fiete** says:

[ 2013-06-06 at 6:32 am  ](https://herbsutter.com/2013/06/05/gotw-91-solution-
smart-pointer-parameters/


###  [ Saline County Jail Booking Activity – Thursday, December 10th
](////salina38.rssing.com/chan-7227570/article921.html#c7227570a921i63989072)


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


comment-11582)

re: Herb’s caveat “(Yes, you have to be careful if the smart pointer parameter
can be aliased, but in this respect it’s no different than any other aliased
object).”

Reminds me of the guy who was hitting himself with a hammer. When his doctor
told him “Stop hitting yourself with a hammer”, he replied “Oh, come on, you
can’t blame the hammer. It would be just as bad if I hit myself with a brick
or anything else for that matter!”

Yes, if g calls f then as long as f is still running, then g is still running.
But g could pass to f a member variable, m, which presently refers to an
object, and then some unholy, filthy chain of callbacks set off within f could
reach back and cause m to be mutated, all while f – and therefore g – still
have not returned.

So Herb’s paragraph “However, we already get this for free…” would seem to be
followed by the caveat “… (except when we don’t).” What actual firm claim is
being made here? When can it be relied on? How can we tell?

  24. Pingback: [ Herb Sutter GotW91: Smart Pointer parameters | musingstudio ](http://musingstudio.com/2013/06/13/herb-sutter-gotw91-smart-pointer-parameters/)

  25. ![](https://2.gravatar.com/avatar/e5eddd46e4f0121f0996f8e0529a251c2e1db1a35fc96ddd8b4af10e7df7cf71?s=48&d=identicon&r=G) **Mathias Stearn** says:

[ 2013-06-08 at 11:40 am
](https://herbsutter.com/2013/06/05/gotw-91-solution-smart-pointer-
parameters/


[ ↂ
](////adverbs45.rssing.com/chan-14763103/article227.html#c14763103a227i286089440
"Frequency Adverbs")


[ ](javascript:; "Share Page")


[ ](//www.rssing.com/index.php "Home")


[ ↂ
](////hullabaloo16.rssing.com/chan-9145637/article818.html#c9145637a818i695428444
"Calgary Hells Angels implicated in another fraud")


answer


Now let’s run the ROS node to test it.


    class WallFollower : public rclcpp::Node
    {
    public:
        using OdomRecord = custom_interfaces::action::OdomRecord;
        using GoalHandleOdomRecord = rclcpp_action::ClientGoalHandle<OdomRecord>;

        explicit WallFollower(const rclcpp::NodeOptions & node_options = rclcpp::NodeOptions())
        : Node("wall_follower", node_options), goal_done_(false)
        {
            subscribers_callback_group =this->create_callback_group(rclcpp::CallbackGroupType::MutuallyExclusive);
            publishers_callback_group =this->create_callback_group(rclcpp::CallbackGroupType::MutuallyExclusive);
            action_client_callback_group =this->create_callback_group(rclcpp::CallbackGroupType::MutuallyExclusive);

            rclcpp::SubscriptionOptions options1;
            options1.callback_group = subscribers_callback_group;

            vel_publisher = this->create_publisher<geometry_msgs::msg::Twist>("cmd_vel", 10);
            odom_subscriber = this->create_subscription<nav_msgs::msg::Odometry>(
                "odom", 10, std::bind(&WallFollower::odom_subs_callback, this, _7), options1);
            scan_subscriber = this->create_subscription<sensor_msgs::msg::LaserScan>(
                "scan", rclcpp::SensorDataQoS(), std::bind(&WallFollower::scan_subs_callback, this, _7), options1);
            timer_ = this->create_wall_timer(500ms, std::bind(&WallFollower::robot_motion, this), publishers_callback_group);
            print_timer = this->create_wall_timer(2000ms, std::bind(&WallFollower::print_function, this), publishers_callback_group);

            this->client_ptr_ = rclcpp_action::create_client<OdomRecord>(
                this->get_node_base_interface(),
                this->get_node_graph_interface(),
                this->get_node_logging_interface(),
                this->get_node_waitables_interface(),
                "record_odom");

            this->action_client_timer_ = this->create_wall_timer(std::chrono::milliseconds(500), std::bind(&WallFollower::send_goal, this), action_client_callback_group);

            this->rotation_z = 0.0;
            this->distance_to_wall = 0.0;
            this->distance_to_front_wall= 0.0;
            this->offset_angle = 0.0;
            this->linear_vel = 0.1;


In your case, The first error is this part:


Set the initial pose of the robot using the button at the top of RViz.


[ ](javascript:; "Like") 0


Hi, I'm triying to declare an array of custom type that I created. This type
is formed by 2 int32 variables. I'm triying do that with this command:>
main::myType[] myarray; where main is my package name. When I compiled the
program I received an error Which is the correct way to do this? Thanks in
advance


[ Next  Next post:  Sensor Fusion Using the ROS Robot Pose EKF Package
](https://automaticaddison.com/sensor-fusion-using-the-ros-robot-pose-ekf-
package/)


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