# Migrate Project Assets from Old to New Unity Project # 从旧Unity项目迁移资源到新项目 param( [string]$SourceProject = "D:\ros2\DockerRos2Arm-niryo_arm\PickAndPlaceProject", [string]$TargetProject = "D:\ros2\DockerRos2Arm-niryo_arm\Unity_MoveIt2\NewUnityProject\ROS2_Niryo_Control", [switch]$MigrateScripts, [switch]$MigrateURDF, [switch]$MigratePrefabs, [switch]$MigrateScenes, [switch]$MigrateAll ) Write-Host "=== Migrating Project Assets ===" -ForegroundColor Green # Check if source project exists if (-not (Test-Path $SourceProject)) { Write-Host "Error: Source project not found at $SourceProject" -ForegroundColor Red exit 1 } # Check if target project exists if (-not (Test-Path $TargetProject)) { Write-Host "Error: Target project not found at $TargetProject" -ForegroundColor Red exit 1 } # Function to copy directory with overwrite function Copy-DirectoryWithOverwrite { param( [string]$Source, [string]$Destination, [string]$Description ) if (Test-Path $Source) { Write-Host "Copying $Description..." -ForegroundColor Yellow # Create destination directory if it doesn't exist $destDir = Split-Path $Destination -Parent if (-not (Test-Path $destDir)) { New-Item -ItemType Directory -Path $destDir -Force | Out-Null } # Copy with overwrite Copy-Item -Path $Source -Destination $Destination -Recurse -Force Write-Host "✓ $Description copied successfully" -ForegroundColor Green } else { Write-Host "⚠ $Description not found at $Source" -ForegroundColor Yellow } } # Function to copy individual files function Copy-FileWithOverwrite { param( [string]$Source, [string]$Destination, [string]$Description ) if (Test-Path $Source) { Write-Host "Copying $Description..." -ForegroundColor Yellow # Create destination directory if it doesn't exist $destDir = Split-Path $Destination -Parent if (-not (Test-Path $destDir)) { New-Item -ItemType Directory -Path $destDir -Force | Out-Null } Copy-Item -Path $Source -Destination $Destination -Force Write-Host "✓ $Description copied successfully" -ForegroundColor Green } else { Write-Host "⚠ $Description not found at $Source" -ForegroundColor Yellow } } # Migrate Scripts if ($MigrateScripts -or $MigrateAll) { Write-Host "`n--- Migrating Scripts ---" -ForegroundColor Cyan # Copy main scripts $scriptsToMigrate = @( "TrajectoryPlanner.cs", "TargetPlacement.cs", "SourceDestinationPublisher.cs", "TestData.cs" ) foreach ($script in $scriptsToMigrate) { $sourcePath = Join-Path $SourceProject "Assets\Scripts\$script" $targetPath = Join-Path $TargetProject "Assets\Scripts\Robot\$script" Copy-FileWithOverwrite -Source $sourcePath -Destination $targetPath -Description "Script: $script" } # Copy ROS2Demo scripts $ros2DemoSource = Join-Path $SourceProject "Assets\Scripts\ROS2Demo" $ros2DemoTarget = Join-Path $TargetProject "Assets\Scripts\ROS\Demo" Copy-DirectoryWithOverwrite -Source $ros2DemoSource -Destination $ros2DemoTarget -Description "ROS2 Demo Scripts" } # Migrate URDF files if ($MigrateURDF -or $MigrateAll) { Write-Host "`n--- Migrating URDF Files ---" -ForegroundColor Cyan $urdfSource = Join-Path $SourceProject "Assets\URDF\niryo_one" $urdfTarget = Join-Path $TargetProject "Assets\URDF\niryo_one" Copy-DirectoryWithOverwrite -Source $urdfSource -Destination $urdfTarget -Description "Niryo One URDF Files" } # Migrate Prefabs if ($MigratePrefabs -or $MigrateAll) { Write-Host "`n--- Migrating Prefabs ---" -ForegroundColor Cyan $prefabsSource = Join-Path $SourceProject "Assets\Prefabs" $prefabsTarget = Join-Path $TargetProject "Assets\Prefabs" if (Test-Path $prefabsSource) { Copy-DirectoryWithOverwrite -Source $prefabsSource -Destination $prefabsTarget -Description "Prefabs" } } # Migrate Scenes if ($MigrateScenes -or $MigrateAll) { Write-Host "`n--- Migrating Scenes ---" -ForegroundColor Cyan $scenesToMigrate = @( "TutorialScene.unity", "EmptyScene.unity" ) foreach ($scene in $scenesToMigrate) { $sourcePath = Join-Path $SourceProject "Assets\Scenes\$scene" $targetPath = Join-Path $TargetProject "Assets\Scenes\$scene" Copy-FileWithOverwrite -Source $sourcePath -Destination $targetPath -Description "Scene: $scene" # Also copy .meta files $sourceMetaPath = "$sourcePath.meta" $targetMetaPath = "$targetPath.meta" Copy-FileWithOverwrite -Source $sourceMetaPath -Destination $targetMetaPath -Description "Scene Meta: $scene.meta" } } # Migrate Materials Write-Host "`n--- Migrating Materials ---" -ForegroundColor Cyan $materialsSource = Join-Path $SourceProject "Assets\Materials" $materialsTarget = Join-Path $TargetProject "Assets\Materials" if (Test-Path $materialsSource) { Copy-DirectoryWithOverwrite -Source $materialsSource -Destination $materialsTarget -Description "Materials" } # Migrate Resources Write-Host "`n--- Migrating Resources ---" -ForegroundColor Cyan $resourcesSource = Join-Path $SourceProject "Assets\Resources" $resourcesTarget = Join-Path $TargetProject "Assets\Resources" if (Test-Path $resourcesSource) { Copy-DirectoryWithOverwrite -Source $resourcesSource -Destination $resourcesTarget -Description "Resources" } # Create updated assembly definition for migrated scripts Write-Host "`n--- Updating Assembly Definitions ---" -ForegroundColor Cyan $robotAsmdefContent = @" { "name": "ROS2NiryoControl.Robot", "rootNamespace": "ROS2NiryoControl.Robot", "references": [ "ROS2NiryoControl", "Unity.Robotics.ROSTCPConnector", "Unity.Robotics.ROSTCPConnector.Messages", "Unity.Robotics.UrdfImporter" ], "includePlatforms": [], "excludePlatforms": [], "allowUnsafeCode": false, "overrideReferences": false, "precompiledReferences": [], "autoReferenced": true, "defineConstraints": [], "versionDefines": [], "noEngineReferences": false } "@ $robotAsmdefPath = Join-Path $TargetProject "Assets\Scripts\Robot\ROS2NiryoControl.Robot.asmdef" Write-Output $robotAsmdefContent | Out-File -FilePath $robotAsmdefPath -Encoding UTF8 Write-Host "✓ Robot assembly definition created" -ForegroundColor Green # Create migration summary Write-Host "`n=== Migration Summary ===" -ForegroundColor Green Write-Host "Source Project: $SourceProject" -ForegroundColor White Write-Host "Target Project: $TargetProject" -ForegroundColor White Write-Host "" Write-Host "Migrated Components:" -ForegroundColor Yellow Write-Host "✓ Robot control scripts (TrajectoryPlanner, TargetPlacement, etc.)" -ForegroundColor White Write-Host "✓ Niryo One URDF files and meshes" -ForegroundColor White Write-Host "✓ ROS2 demo scripts" -ForegroundColor White Write-Host "✓ Materials and resources" -ForegroundColor White Write-Host "✓ Scene files (if available)" -ForegroundColor White Write-Host "✓ Assembly definitions updated" -ForegroundColor White Write-Host "" Write-Host "Next Steps:" -ForegroundColor Yellow Write-Host "1. Open Unity project and resolve any compilation errors" -ForegroundColor White Write-Host "2. Update script namespaces if needed" -ForegroundColor White Write-Host "3. Reconfigure prefab references in scenes" -ForegroundColor White Write-Host "4. Test robot URDF import and visualization" -ForegroundColor White Write-Host "5. Configure ROS TCP Endpoint connection" -ForegroundColor White Write-Host "`nMigration completed successfully!" -ForegroundColor Green