Skip to content

Adding Texture to model

I am trying to add texture to the ground_plane model. I have modified the model.sdf as follows:

<?xml version='1.0'?>
<sdf version='1.6'>
  <model name='ground_plane'>
    <static>1</static>
    <link name='link'>
      <collision name='collision'>
        <geometry>
          <plane>
            <normal>0 0 1</normal>
            <size>1000 1000</size>
          </plane>
        </geometry>
        <surface>
          <friction>
            <ode>
              <mu>100</mu>
              <mu2>50</mu2>
            </ode>
            <torsional>
              <ode/>
            </torsional>
          </friction>
          <contact>
            <ode/>
          </contact>
          <bounce/>
        </surface>
        <max_contacts>10</max_contacts>
      </collision>
      <visual name="visual">
        <cast_shadows>false</cast_shadows>
        <geometry>
          <box>
            <size>200 200 .1</size>
          </box>
        </geometry>
        <material>
          <script>
            <uri>model://ground_plane/materials/scripts</uri>
            <uri>model://ground_plane/materials/textures</uri>
            <name>test/asphalt</name>
          </script>
        </material>
      </visual>
      <self_collide>0</self_collide>
      <kinematic>0</kinematic>
      <gravity>1</gravity>
    </link>
  </model>
</sdf>

the ground_plane directory looks like:

.:
materials  model.config  model.sdf

./materials:
scripts  textures

./materials/scripts:
asphalt.material

./materials/textures:
tarmac.png

The asphalt.material files looks like:

material test/asphalt
{
	technique
	{
		pass
		{
			ambient 0.5 0.5 0.5 1.0
			diffuse 0.5 0.5 0.5 1.0
			specular 0.2 0.2 0.2 1.0 12.5

			texture_unit
			{
				texture tarmac.png
				filtering anistropic
				max_anisotropy 16
				scale 0.1 0.1
			}
		}
	}
}

I modified the setup.py file as:

from os.path import join
from glob import glob
from setuptools import setup, find_packages


package_name = 'eufs_tracks'

share_directory = join('share', package_name)
# data_files = [
#     (share_directory, ['package.xml', 'plugin.xml']),
#     ('share/ament_index/resource_index/packages',
#         ['resource/' + package_name]),
#     (join(share_directory, 'csv'), glob('csv/*')),
#     (join(share_directory, 'image'), glob('image/*')),
#     (join(share_directory, 'launch'),
#         glob('launch/*.launch*') + ['launch/blacklist.txt']),
#     (join(share_directory, 'materials'), glob('materials/*')),
#     (join(share_directory, 'meshes'), glob('meshes/*')),
#     (join(share_directory, 'worlds'), glob('worlds/*')),
#     (join(share_directory, 'resource/randgen_model_template'),
#         glob('resource/randgen_model_template/model.*')),
#     (join(share_directory, 'resource'), [
#         'resource/noiseFiles.txt',
#         'resource/randgen_launch_template',
#         'resource/randgen_world_template',
#         'resource/conversion_tool.ui',
#     ])
# ]

# # Add all model sub-directories
# # This is required as setuptools doesn't currently support recursive glob
# for directory in glob("models/*"):
#     data_file = (join(share_directory, directory), glob(directory + "/*"))
#     data_files.append(data_file)

data_files = [
    (share_directory, ['package.xml', 'plugin.xml']),
    ('share/ament_index/resource_index/packages',
        ['resource/' + package_name]),
    (join(share_directory, 'csv'), glob('csv/*')),
    (join(share_directory, 'image'), glob('image/*')),
    (join(share_directory, 'launch'),
        glob('launch/*.launch*') + ['launch/blacklist.txt']),
    (join(share_directory, 'textures'), glob('materials/textures/*.dat')),
    (join(share_directory, 'scripts'), glob('materials/scripts/*.dat')),
    (join(share_directory, 'meshes'), glob('meshes/*')),
    (join(share_directory, 'worlds'), glob('worlds/*')),
    (join(share_directory, 'resource/randgen_model_template'),
        glob('resource/randgen_model_template/model.*')),
    (join(share_directory, 'resource'), [
        'resource/noiseFiles.txt',
        'resource/randgen_launch_template',
        'resource/randgen_world_template',
        'resource/conversion_tool.ui',
    ])
]

# Add all model sub-directories
# This is required as setuptools doesn't currently support recursive glob
#print(glob('models/*'))
for directory in glob("models/*"):
    data_file = (join(share_directory, directory), glob(directory + "/*.material"))
    data_files.append(data_file)
    data_file = (join(share_directory, directory), glob(directory + "/*.png"))
    data_files.append(data_file)
    data_file = (join(share_directory, directory), glob(directory + "/*.config"))
    data_files.append(data_file)
    data_file = (join(share_directory, directory), glob(directory + "/*.sdf"))
    data_files.append(data_file)
    data_file = (join(share_directory, directory), glob(directory + "/*.urdf.xacro"))
    data_files.append(data_file)

setup(
    name=package_name,
    version='2.0.0',
    # packages=find_packages(),
    packages=['eufs_tracks', 'eufs_tracks.track_generator', 'eufs_tracks.converter_tool', 'eufs_tracks.cli'],
    data_files=data_files,
    install_requires=['setuptools'],
    zip_safe=True,
    maintainer='Cameron Matthew',
    maintainer_email='cambobmat@icloud.com',
    description='Procedurally generates tracks and converts between file formats.',
    license='MIT',
    tests_require=['pytest'],
    scripts=[
        'scripts/eufs_tracks_converter',
        'scripts/eufs_tracks_generator'
    ],
    entry_points={
        'eufscli.command': [
            'track = eufs_tracks.cli.main:EUFSTrackGenerator'
        ],
        'eufs_tracks.verb': [
            'create = eufs_tracks.cli.create:EUFSTracksCreate',
            'convert = eufs_tracks.cli.convert:EUFSTracksConvert'
        ]
    }
)

I even put the same files in eufs_tracks/materials and still there is no difference.

When i manually import the model in a gazebo sim window, it appears fine. But when i launch the simulator, the ground appears white.