Robotics StackExchange | Archived questions

Translating heighmap creates offset between collision and visual

When using the tag inside the to get my heightmap aligned with my coordinate system of choice, it appears to be translating correctly when I open the client, but when I place an object on the heightmap, it is as if the collision frame did not translate.

This portion of the world file looks as follows. There appears to have been a similar issue that was resolved a few years ago (http://answers.gazebosim.org/question/4555/setting-position-on-heightmap-creates-offset-between-collision-and-visual/, https://bitbucket.org/osrf/gazebo/commits/807c528), but I still seem to be exhibiting the problem.

Any ideas? I am on Gazebo 7.5, installed from binaries.

 <model name="heightmap">
      <static>true</static>
      <link name="height">
        <collision name="collision">
          <geometry>
            <heightmap>
              <uri>file://media/heightmaps/terrain.png</uri>
              <size> 540 540 60 </size>
              <pos> -55 -72 0 </pos>
            </heightmap>
          </geometry>
          <surface>
            <friction>
              <ode>
                <mu>100000</mu>
                <mu2>500000</mu2>
              </ode>
            </friction>
            <bounce/>
            <contact>
              <ode/>
            </contact>
          </surface>
          <max_contacts>10</max_contacts>
        </collision>
        <visual name="visual_abcedf">
          <geometry>
            <heightmap>
              <use_terrain_paging>false</use_terrain_paging>
              <texture>
                <diffuse>file://media/heightmaps/terrain_tex.png</diffuse>
                <normal>file://media/materials/textures/flat_normal.png</normal>
                <size> 540 </size>
              </texture>
              <uri>file://media/heightmaps/terrain.png</uri>
              <size> 540 540 60 </size>
              <pos> -55 -72 0 </pos>
            </heightmap>
          </geometry>
        </visual>
      </link>
    </model>

Asked by bybee.taylor on 2017-03-06 15:14:01 UTC

Comments

I am wondering if what you're experiencing is related to this issue: https://bitbucket.org/osrf/gazebo/issues/245/heightmap-visual-is-offset-from-collision

Asked by iche033 on 2017-03-06 16:48:09 UTC

Answers

Assuming that you use default physics engine (ODE), one possible way to solve this problem is, write a model plugin for your heightmap terrain, extract its collision pointer (type casted to ODECollision type) and use ODE function dGeomSetPosition( ODECollisionPtr->ODECollisionId(), x, y, z). The offset you see is because, translation happens in rendering component (in x, y, z) but not in physics component (happens only in z) ( check gazebo-7/gazebo-9 source code ODEHeightmapShape.cc ).

This worked for me!!!

check the below link for proper syntax: ODE API Docs

Asked by Rakesh on 2021-01-11 11:08:56 UTC

Comments