feat: 创建工程
parent
f585aebad4
commit
6b93d354d0
|
@ -0,0 +1,16 @@
|
|||
|
||||
Microsoft Visual Studio Solution File, Format Version 12.00
|
||||
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BenzObstacleDetect", "BenzObstacleDetect\BenzObstacleDetect.csproj", "{D158026B-CF72-4CB7-85D1-D6DF91F9D71E}"
|
||||
EndProject
|
||||
Global
|
||||
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
||||
Debug|Any CPU = Debug|Any CPU
|
||||
Release|Any CPU = Release|Any CPU
|
||||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{D158026B-CF72-4CB7-85D1-D6DF91F9D71E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
||||
{D158026B-CF72-4CB7-85D1-D6DF91F9D71E}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
||||
{D158026B-CF72-4CB7-85D1-D6DF91F9D71E}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
||||
{D158026B-CF72-4CB7-85D1-D6DF91F9D71E}.Release|Any CPU.Build.0 = Release|Any CPU
|
||||
EndGlobalSection
|
||||
EndGlobal
|
|
@ -1,5 +1,8 @@
|
|||
## 忽略 Visual Studio 临时文件、用户设置以及编译输出目录
|
||||
|
||||
# idea
|
||||
.idea/
|
||||
|
||||
# Visual Studio 相关文件
|
||||
.vs/
|
||||
*.suo
|
||||
|
|
|
@ -0,0 +1,30 @@
|
|||
<Project Sdk="Microsoft.NET.Sdk.Worker">
|
||||
|
||||
<PropertyGroup>
|
||||
<TargetFramework>net472</TargetFramework>
|
||||
<LangVersion>9</LangVersion>
|
||||
<Nullable>enable</Nullable>
|
||||
<Authors>Autolabor</Authors>
|
||||
<ImplicitUsings>disable</ImplicitUsings>
|
||||
<RootNamespace>Autolabor.Benz.ObstacleDetection</RootNamespace>
|
||||
<UserSecretsId>dotnet-BenzObstacleDetect-E0768EF0-F5A4-4FC1-983F-62D3BEA23B87</UserSecretsId>
|
||||
<AllowUnsafeBlocks>true</AllowUnsafeBlocks> <!-- 允许 unsafe 代码 -->
|
||||
</PropertyGroup>
|
||||
|
||||
<ItemGroup>
|
||||
<!-- 微软-主机构建扩展包 -->
|
||||
<PackageReference Include="Autolabor.Robobase" Version="0.3.631" />
|
||||
<PackageReference Include="Autolabor.Robobase.CodeGuard" Version="0.1.24">
|
||||
<PrivateAssets>all</PrivateAssets>
|
||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||
</PackageReference>
|
||||
<PackageReference Include="Autolabor.Robobase.Component" Version="0.2.1827" />
|
||||
<PackageReference Include="Autolabor.SerialBase" Version="0.1.239" />
|
||||
<PackageReference Include="Microsoft.Extensions.Hosting" Version="9.0.2" />
|
||||
<PackageReference Include="System.Security.Permissions" Version="9.0.2" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<!-- 支持动态类型-->
|
||||
<Reference Include="Microsoft.CSharp"/>
|
||||
</ItemGroup>
|
||||
</Project>
|
|
@ -0,0 +1,116 @@
|
|||
using System;
|
||||
using System.Net;
|
||||
using Autolabor.Robobase;
|
||||
using Autolabor.Robobase.Component.Algorithm.LidarDetection;
|
||||
using Autolabor.Robobase.Component.Algorithm.LidarDetection.DataType;
|
||||
using Autolabor.Robobase.Component.Business.Benz;
|
||||
using Autolabor.Robobase.Component.Driver;
|
||||
using Autolabor.Robobase.Component.Driver.SerialRelay;
|
||||
using Autolabor.Robobase.Component.Tools;
|
||||
using Autolabor.Robobase.Geometry;
|
||||
using Autolabor.Robobase.Tools.DataRender;
|
||||
|
||||
namespace Autolabor.Benz.ObstacleDetection
|
||||
{
|
||||
[Serializable]
|
||||
public class Detection : GroupComponent
|
||||
{
|
||||
// 驱动层组件
|
||||
private Ld19DriverNew _lidarDriver;
|
||||
private SerialRelayDriver _serialRelay;
|
||||
|
||||
// 算法层组件
|
||||
private LidarRoiFilter _lidarRoiFilter;
|
||||
private ObstacleDetector _obstacleDetector;
|
||||
private BenzObstacleControl _benzObstacleController;
|
||||
|
||||
// 显示组件
|
||||
private DataRender<Pose2D[]> _lidarRender;
|
||||
private DataRender<Pose2D[]> _obstacleRender;
|
||||
|
||||
// 模拟器配置
|
||||
private int _FrontLidarRpcPort = 50120;
|
||||
private int _FrontLidarListenPort = 40120;
|
||||
private IPAddress _serverIp = IPAddress.Loopback;
|
||||
|
||||
// 配置过滤区域
|
||||
private LidarRoi[] _lidarRois;
|
||||
|
||||
public Detection()
|
||||
{
|
||||
// 2. 创建各个功能组件
|
||||
// 驱动组件
|
||||
_lidarDriver = new Ld19DriverNew();
|
||||
_serialRelay = new SerialRelayDriver();
|
||||
|
||||
// 算法组件
|
||||
_obstacleDetector = new ObstacleDetector();
|
||||
_benzObstacleController = new BenzObstacleControl();
|
||||
_lidarRoiFilter = new LidarRoiFilter();
|
||||
|
||||
// 显示组件
|
||||
_lidarRender = DataRenderFactory.Make<Pose2D[]>("Benz","lidar",false,true);
|
||||
_obstacleRender = DataRenderFactory.Make<Pose2D[]>("Benz","obstacle",false,true);
|
||||
|
||||
// 3. 添加组件到容器
|
||||
Add(_lidarDriver);
|
||||
Add(_serialRelay);
|
||||
Add(_lidarRoiFilter);
|
||||
Add(_obstacleDetector);
|
||||
Add(_benzObstacleController);
|
||||
Add(_lidarRender);
|
||||
Add(_obstacleRender);
|
||||
|
||||
// 4. 配置组件
|
||||
// 激光雷达配置
|
||||
_lidarDriver.SetProperty("lidar.port", "/dev/tty.usbserial-2120");
|
||||
_lidarDriver.SetProperty("lidar.x", 0.0);
|
||||
_lidarDriver.SetProperty("lidar.y", 0.0);
|
||||
_lidarDriver.SetProperty("lidar.originName", "frontLidarOrigin");
|
||||
_lidarDriver.SetProperty("lidar.rotation", Math.PI / 2.0);
|
||||
_lidarDriver.SetProperty("lidar.startRad", -Math.PI); // 要提取的数据范围
|
||||
_lidarDriver.SetProperty("lidar.rangeRad", 2.0 * Math.PI);
|
||||
_lidarDriver.SetProperty("lidar.display.interval", 1000);
|
||||
_lidarDriver.SetProperty("lidar.intensityLevel", 200.0);
|
||||
_lidarDriver.SetProperty("sim.lidar.server.ip", _serverIp);
|
||||
_lidarDriver.SetProperty("sim.lidar.rpc.port", _FrontLidarRpcPort);
|
||||
_lidarDriver.SetProperty("sim.lidar.listen.port", _FrontLidarListenPort);
|
||||
|
||||
// 串口继电器配置
|
||||
_serialRelay.SetProperty("serial.relay.port", "/dev/tty.usbserial-AC012VIB");
|
||||
|
||||
// 创建感兴趣区
|
||||
_lidarRois = new[]
|
||||
{
|
||||
LidarRoiFactory.Make(0.6, 0.5, 0.1, -0.5),
|
||||
};
|
||||
// 配置过滤器
|
||||
_lidarRoiFilter.SetProperty("roiArray", _lidarRois);
|
||||
// 障碍物检测器配置
|
||||
_obstacleDetector.SetProperty("MinClusterDistance", 0.05);
|
||||
_obstacleDetector.SetProperty("MinClusterSize", 3);
|
||||
_obstacleDetector.SetProperty("MaxPrjDistance", 0.05);
|
||||
_obstacleDetector.SetProperty("GuessDistance", 1.0);
|
||||
// 配置发现和丢失次数
|
||||
_benzObstacleController.SetProperty("FoundObstacleThreshold", 3);
|
||||
_benzObstacleController.SetProperty("LostObstacleThreshold", 5);
|
||||
|
||||
// 5. 连接组件
|
||||
// 雷达数据流向避障检测
|
||||
_lidarDriver.OutputLocalLidarPose2D.Connect(_lidarRoiFilter.InputLidarPoints);
|
||||
_lidarRoiFilter.OutputFilteredPoints.Connect(_obstacleDetector.InputLidarPoints);
|
||||
// 雷达诊断信号连接到奔驰障碍物控制器
|
||||
_lidarDriver.OutputLidarDiagnostic.Connect(_benzObstacleController.InputDiagnostics);
|
||||
// 避障检测结果流向奔驰避障控制器
|
||||
_obstacleDetector.OutputObstacles.Connect(_benzObstacleController.InputObstacles);
|
||||
// 奔驰避障控制器输出到继电器
|
||||
_benzObstacleController.OutputRelayControl.Connect(_serialRelay.InputRelayControl);
|
||||
_benzObstacleController.OutputRelayQuery.Connect(_serialRelay.InputRelayQuery);
|
||||
_serialRelay.OutputRelayFeedback.Connect(_benzObstacleController.InputRelayStatus);
|
||||
|
||||
// 连接到绘图
|
||||
_lidarDriver.OutputLocalLidarPose2D.Connect(_lidarRender.Input);
|
||||
_obstacleDetector.OutputObstaclePoses.Connect(_obstacleRender.Input);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
using Autolabor.Benz.ObstacleDetection;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
|
||||
var builder = Host.CreateApplicationBuilder(args);
|
||||
builder.Services.AddHostedService<Worker>();
|
||||
|
||||
var host = builder.Build();
|
||||
host.Run();
|
|
@ -0,0 +1,12 @@
|
|||
{
|
||||
"$schema": "http://json.schemastore.org/launchsettings.json",
|
||||
"profiles": {
|
||||
"BenzObstacleDetect": {
|
||||
"commandName": "Project",
|
||||
"dotnetRunMessages": true,
|
||||
"environmentVariables": {
|
||||
"DOTNET_ENVIRONMENT": "Development"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,43 @@
|
|||
using System;
|
||||
using System.Threading;
|
||||
using System.Threading.Tasks;
|
||||
using Autolabor.Robobase;
|
||||
using Microsoft.Extensions.Hosting;
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace Autolabor.Benz.ObstacleDetection
|
||||
{
|
||||
public class Worker : BackgroundService
|
||||
{
|
||||
private readonly ILogger<Worker> _logger;
|
||||
|
||||
public Worker(ILogger<Worker> logger)
|
||||
{
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
|
||||
{
|
||||
|
||||
// 创建用户配置文件
|
||||
var app = Kits.GetAutolaborDataPath();
|
||||
var path = System.IO.Path.Combine(app, "BenzObstacleDetection.bin");
|
||||
UserDataManager.Initialize(path);
|
||||
|
||||
// 输出日志
|
||||
TestKit.Logger.Trace("BenzObstacleDetection start");
|
||||
// 启动顶层组件
|
||||
var detection = new Detection();
|
||||
detection.Enable = true;
|
||||
// while (!stoppingToken.IsCancellationRequested)
|
||||
// {
|
||||
// if (_logger.IsEnabled(LogLevel.Information))
|
||||
// {
|
||||
// _logger.LogInformation("Worker running at: {time}", DateTimeOffset.Now);
|
||||
// }
|
||||
//
|
||||
// await Task.Delay(1000, stoppingToken);
|
||||
// }
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue