Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions AGXUnity/Model/DeformableTerrainMaterial.cs
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ public static string DefaultTerrainMaterialsPath
if ( s_defaultTerrainMaterialsPath == null ) {
var terrainMaterialLibraryOptions = new string[]
{
"data/TerrainMaterials",
"data/MaterialLibrary/TerrainMaterials"
"TerrainMaterials",
"MaterialLibrary/TerrainMaterials"
};

foreach ( var materialLibraryOption in terrainMaterialLibraryOptions ) {
Expand Down
2 changes: 1 addition & 1 deletion AGXUnity/NativeHandler.cs
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ private void Configure()
for ( int i = 0; i < (int)agxIO.Environment.Type.NUM_TYPES; ++i )
envInstance.getFilePath( (agxIO.Environment.Type)i ).clear();

envInstance.getFilePath( agxIO.Environment.Type.RESOURCE_PATH ).pushbackPath( dataAGXRuntimePath );
envInstance.getFilePath( agxIO.Environment.Type.RESOURCE_PATH ).pushbackPath( dataAGXRuntimePath + "/data" );
envInstance.getFilePath( agxIO.Environment.Type.RUNTIME_PATH ).pushbackPath( dataAGXRuntimePath );

if ( string.IsNullOrEmpty( envInstance.findComponent( "Referenced.agxEntity" ) ) )
Expand Down
134 changes: 132 additions & 2 deletions AGXUnity/Sensor/LidarSensor.cs
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,17 @@

namespace AGXUnity.Sensor
{
public class TestHelper
{
static public bool LidarRayPatternsAreFound()
{
var _ = NativeHandler.Instance;
var fileTest = agxIO.Environment.instance().getFilePath( agxIO.Environment.Type.RESOURCE_PATH ).find( "MaterialLibrary/TerrainMaterials/avia.bin" );
return !string.IsNullOrEmpty( fileTest );
}

}

/// <summary>
/// IModelData is an empty interface to allow for a lidar sensor to hold generic data dependent on the
/// underlying lidar model used.
Expand Down Expand Up @@ -70,17 +81,72 @@ public class GenericSweepData : IModelData
public float VerticalResolution = 0.5f;
}


[Serializable]
public class LivoxData : IModelData
{
/// <summary>
/// Optionally downsample the amount of points generated. 1 is default, 2 is sample every other point in the pattern, 3 every 3 points etc.
/// </summary>
[Tooltip("Scale down the amount of points per second by skipping points in the pattern if set larger than 1.")]
[Min(1)]
public uint Downsample = 1;
}

[Serializable]
public class ReadFromFileData : IModelData
{
/// <summary>
/// The frequency [Hz] of the lidar sweep
/// </summary>
public float Frequency = 10f;
/// <summary>
/// The amount of points from the pattern per frame
/// </summary>
[Min(1)]
public uint FrameSize = 10000;
/// <summary>
/// Path to the .csv or binare file with the ray pattern
/// </summary>
public string FilePath = "";
/// <summary>
/// If true: file has only azimuth,elevation (no first column)
/// </summary>
public bool TwoColumns = false;
/// <summary>
/// If true: read values as degrees, if false: read as radians
/// </summary>
public bool AnglesInDegrees = true;
/// <summary>
/// If true skip first line of file
/// </summary>
public bool FirstLineIsHeader = true;
/// <summary>
/// CSV column delimiter
/// </summary>
public char Delimiter = ',';

}

public enum LidarModelPreset
{
NONE,
LidarModelGenericHorizontalSweep,
LidarModelOusterOS0,
LidarModelOusterOS1,
LidarModelOusterOS2
LidarModelOusterOS2,
LidarModelLivoxAvia,
LidarModelLivoxHap,
LidarModelLivoxHorizon,
LidarModelLivoxMid40,
LidarModelLivoxMid70,
LidarModelLivoxMid360,
LidarModelLivoxTele,
LidarModelReadFromFile,
}

/// <summary>
/// WIP component for lidar sensor
/// Lidar Sensor Component
/// </summary>
[DisallowMultipleComponent]
[AddComponentMenu( "AGXUnity/Sensors/Lidar Sensor" )]
Expand Down Expand Up @@ -115,8 +181,24 @@ public LidarModelPreset LidarModelPreset
LidarModelPreset.LidarModelOusterOS1 => new OusterData(),
LidarModelPreset.LidarModelOusterOS2 => new OusterData(),
LidarModelPreset.LidarModelGenericHorizontalSweep => new GenericSweepData(),
LidarModelPreset.LidarModelLivoxAvia => new LivoxData(),
LidarModelPreset.LidarModelLivoxHap => new LivoxData(),
LidarModelPreset.LidarModelLivoxHorizon => new LivoxData(),
LidarModelPreset.LidarModelLivoxMid40 => new LivoxData(),
LidarModelPreset.LidarModelLivoxMid70 => new LivoxData(),
LidarModelPreset.LidarModelLivoxMid360 => new LivoxData(),
LidarModelPreset.LidarModelLivoxTele => new LivoxData(),
LidarModelPreset.LidarModelReadFromFile => new ReadFromFileData(),
_ => null,
};

LocalRotation = ModelData switch
{
OusterData => new Vector3( 90, 90, 0 ),
GenericSweepData => new Vector3( -90, 90, 0 ),
LivoxData => new Vector3( -90, 90, 0 ),
_ => new Vector3()
};
}
m_lidarModelPreset = value;
}
Expand Down Expand Up @@ -431,6 +513,53 @@ private LidarModel CreateLidarModel( LidarModelPreset preset )
lidarModel = new LidarModelOusterOS2( ousterData.ChannelCount, ousterData.BeamSpacing, ousterData.LidarMode );
break;

case LidarModelPreset.LidarModelLivoxAvia:
LivoxData livoxData = ModelData as LivoxData;
lidarModel = new LidarModelLivoxAvia( livoxData.Downsample );
break;

case LidarModelPreset.LidarModelLivoxHap:
livoxData = ModelData as LivoxData;
lidarModel = new LidarModelLivoxHap( livoxData.Downsample );
break;

case LidarModelPreset.LidarModelLivoxHorizon:
livoxData = ModelData as LivoxData;
lidarModel = new LidarModelLivoxHorizon( livoxData.Downsample );
break;

case LidarModelPreset.LidarModelLivoxMid40:
livoxData = ModelData as LivoxData;
lidarModel = new LidarModelLivoxMid40( livoxData.Downsample );
break;

case LidarModelPreset.LidarModelLivoxMid70:
livoxData = ModelData as LivoxData;
lidarModel = new LidarModelLivoxMid70( livoxData.Downsample );
break;

case LidarModelPreset.LidarModelLivoxMid360:
livoxData = ModelData as LivoxData;
lidarModel = new LidarModelLivoxMid360( livoxData.Downsample );
break;

case LidarModelPreset.LidarModelLivoxTele:
livoxData = ModelData as LivoxData;
lidarModel = new LidarModelLivoxTele( livoxData.Downsample );
break;

case LidarModelPreset.LidarModelReadFromFile:
ReadFromFileData readFromFileData = ModelData as ReadFromFileData;
RayFileDefinition rayFileDefinition = new RayFileDefinition();
rayFileDefinition.path = readFromFileData.FilePath;
rayFileDefinition.twoColumns = readFromFileData.TwoColumns;
rayFileDefinition.anglesInDegrees = readFromFileData.AnglesInDegrees;
rayFileDefinition.firstLineIsHeader = readFromFileData.FirstLineIsHeader;
rayFileDefinition.delimiter = readFromFileData.Delimiter;
LidarProperties lidarProperties = new LidarProperties(BeamDivergence, BeamExitRadius);
lidarModel = new LidarModelReadFromFile( rayFileDefinition, readFromFileData.Frequency, readFromFileData.FrameSize, 1, new RangeReal32( LidarRange.Min, LidarRange.Max ), lidarProperties );
break;

case LidarModelPreset.NONE:
default:
Debug.LogWarning( "No valid LidarModelPreset selected!" );
Expand All @@ -441,6 +570,7 @@ private LidarModel CreateLidarModel( LidarModelPreset preset )

return lidarModel;
}

private void OnDrawGizmosSelected()
{
#if UNITY_EDITOR
Expand Down
2 changes: 1 addition & 1 deletion Editor/AGXUnityEditor/ExternalAGXInitializer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -294,7 +294,7 @@ private bool InitializeCheckout( string agxDir )
select $"{data.Directory.FullName}{Path.DirectorySeparatorChar}bin{Path.DirectorySeparatorChar}x64" ).ToArray();
var installedBinDir = $"{binData[ INSTALLED ].Directory.FullName}{Path.DirectorySeparatorChar}bin{Path.DirectorySeparatorChar}x64";
AGX_PLUGIN_PATH = $"{installedBinDir}{Path.DirectorySeparatorChar}plugins";
AGX_DATA_DIR = $"{installedBinDir}{Path.DirectorySeparatorChar}data";
AGX_DATA_DIR = $"{binData[ INSTALLED ].Directory.FullName}{Path.DirectorySeparatorChar}data";

return true;
}
Expand Down
22 changes: 22 additions & 0 deletions Editor/AGXUnityEditor/InvokeWrapperInspectorDrawer.cs
Original file line number Diff line number Diff line change
Expand Up @@ -1284,6 +1284,22 @@ public static void DrawGenericSweepModelData( AGXUnity.Sensor.GenericSweepData d
data.VerticalResolution = EditorGUILayout.FloatField( FindGUIContentFor( data.GetType(), "VerticalResolution" ), data.VerticalResolution );
}

public static void DrawReadFromFileModelData( AGXUnity.Sensor.ReadFromFileData data )
{
data.Frequency = EditorGUILayout.FloatField( FindGUIContentFor( data.GetType(), "Frequency" ), data.Frequency );
data.FrameSize = (uint)EditorGUILayout.FloatField( FindGUIContentFor( data.GetType(), "FrameSize" ), data.FrameSize );
data.FilePath = EditorGUILayout.TextField( FindGUIContentFor( data.GetType(), "FilePath" ), data.FilePath );
data.TwoColumns = EditorGUILayout.Toggle( FindGUIContentFor( data.GetType(), "TwoColumns" ), data.TwoColumns );
data.AnglesInDegrees = EditorGUILayout.Toggle( FindGUIContentFor( data.GetType(), "AnglesInDegrees" ), data.AnglesInDegrees );
data.FirstLineIsHeader = EditorGUILayout.Toggle( FindGUIContentFor( data.GetType(), "FirstLineIsHeader" ), data.FirstLineIsHeader );
data.Delimiter = char.Parse( EditorGUILayout.TextField( FindGUIContentFor( data.GetType(), "Delimiter" ), data.Delimiter.ToString() ) );
}

public static void DrawLivoxModelData( AGXUnity.Sensor.LivoxData data )
{
data.Downsample = (uint)EditorGUILayout.FloatField( FindGUIContentFor( data.GetType(), "Downsample" ), data.Downsample );
}

[InspectorDrawer( typeof( AGXUnity.Sensor.IModelData ) )]
public static object ModelDataDrawer( object[] objects, InvokeWrapper wrapper )
{
Expand All @@ -1301,6 +1317,12 @@ public static object ModelDataDrawer( object[] objects, InvokeWrapper wrapper )
case AGXUnity.Sensor.GenericSweepData sweepData:
DrawGenericSweepModelData( sweepData );
break;
case AGXUnity.Sensor.LivoxData livoxData:
DrawLivoxModelData( livoxData );
break;
case AGXUnity.Sensor.ReadFromFileData readFromFileData:
DrawReadFromFileModelData( readFromFileData );
break;
}
}

Expand Down
2 changes: 1 addition & 1 deletion Editor/AGXUnityEditor/Manager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -775,7 +775,7 @@ internal static EnvironmentState ConfigureEnvironment()
// to RUNTIME_PATH (for entities and components). The license file is
// searched for by the license manager.
var dataAndRuntimePath = AGXUnity.IO.Environment.Get( AGXUnity.IO.Environment.Variable.AGX_PLUGIN_PATH );
envInstance.getFilePath( agxIO.Environment.Type.RESOURCE_PATH ).pushbackPath( dataAndRuntimePath );
envInstance.getFilePath( agxIO.Environment.Type.RESOURCE_PATH ).pushbackPath( dataAndRuntimePath + "/data" );
envInstance.getFilePath( agxIO.Environment.Type.RUNTIME_PATH ).pushbackPath( dataAndRuntimePath );
}
// Check if user would like to initialize AGX Dynamics with an
Expand Down
Binary file modified Plugins/x86_64/agxDotNet.dll
Binary file not shown.
22 changes: 22 additions & 0 deletions Tests/Editor/DataTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
using AGXUnity.Model;
using NUnit.Framework;

namespace AGXUnityTesting.Editor
{
public class DataTests
{
[Test]
public void TerrainMaterialPresetsAreFound()
{
var presets = DeformableTerrainMaterial.GetAvailablePresets();
Assert.NotNull( presets );
Assert.NotZero( presets.Length );
}

[Test]
public void LidarRayPatternsAreFound()
{
Assert.True( AGXUnity.Sensor.TestHelper.LidarRayPatternsAreFound() );
}
}
}
11 changes: 11 additions & 0 deletions Tests/Editor/DataTests.cs.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

25 changes: 25 additions & 0 deletions Tests/Runtime/DataTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
using AGXUnity;
using AGXUnity.Model;
using NUnit.Framework;

namespace AGXUnityTesting.Runtime
{
public class DataTests
{
[Test]
public void TerrainMaterialPresetsAreFound()
{
var _ = NativeHandler.Instance;
var presets = DeformableTerrainMaterial.GetAvailablePresets();
Assert.NotNull( presets );
Assert.NotZero( presets.Length );
}

[Test]
public void LidarRayPatternsAreFound()
{
var _ = NativeHandler.Instance;
Assert.True( AGXUnity.Sensor.TestHelper.LidarRayPatternsAreFound() );
}
}
}
11 changes: 11 additions & 0 deletions Tests/Runtime/DataTests.cs.meta

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.