CS机器人 C# SDK快速使用方法

一、简介

C# SDK仓存放于 C# SDK-GITEE 网址下
仓库主要目录包含:
  • src:C# 封装库(基于 P/InvokeSafeHandle
  • example:C# 示例程序
C# 调用链:
C# -> C 封装层 (libelite_cs_series_sdk_c) -> C++ SDK

二、运行示例

通用格式:
dotnet run --project example -- <mode> <args...>
当前支持模式(见 Program.cs):
  • primary_client
  • dashboard_client
  • driver
  • speedl
  • trajectory
  • servoj_plan
  • rtsi_client
  • serial
  • connect_robot_test
比如在控制台下进入C# SDK所在目录,执行下行命令
# Dashboard
dotnet run --project example -- dashboard_client 172.16.102.156
此外,在VS STUDIO上,也可以直接运行对应的项。如下图所示,打开对应项目的cs文件,修改其中的IP为机器人的真实ip后
点击上方选项栏里的运行按钮
运行结果如下图所示:

三、外部C#项目


3.1 通过 NuGet 包引用

此步骤需要先按构建指南生成 NuGet 包。
执行 dotnet pack 时,NuGet 包会把当前 .native-out/ 下已经准备好的 native 运行库一并打进去。 外部项目通过包引用后,构建阶段只会把包内的 native 库复制到输出目录,不会再次编译 C 库。
进入项目目录:
cd myproject/
从本地添加对应功能包:
dotnet add package elite_cs_sdk --version 0.1.1 --source /xxxxx/nupkg
--source 后面的参数为 Elite_Robots_CS_SDK_CSharp 项目生成的本地 nupkg 目录。 如果需要分发多个平台,请先准备好对应平台的 native 输出,再执行 dotnet pack
代码示例:
using EliteRobots.CSharp; // 所有接口统一命名空间

var ip = args.Length > 0 ? args[0] : "172.16.102.156"; // 机器人默认 IP,需修改成自己的机器人 IP

using var dash = new DashboardClientInterface();
if (!dash.connect(ip))
{
    Console.WriteLine("connect failed");
    return;
}
Console.WriteLine($"RobotMode: {dash.robotMode()}");
dash.disconnect();
编译项目:
dotnet build
运行示例:
dotnet run

3.2 Windows 下使用 Visual Studio

此方式需要以下两个dll库文件
  • elite_cs_sdk.dll:C# 封装层
  • elite_cs_series_sdk_c.dll:原生 C 封装层
推荐做法:
  1. 在 Visual Studio 中新建一个 .NET 8 控制台项目。
  2. 右键项目,选择“添加引用”,浏览并添加本仓库构建输出目录中的 elite_cs_sdk.dll
  3. elite_cs_series_sdk_c.dll 复制到你的目标项目输出目录,或配置为生成时自动复制到 bin/Debug/net8.0/bin/Release/net8.0/
  4. 确保运行目录里最终同时存在你的程序、elite_cs_sdk.dll 和所需 native DLL。
一个简单的目录示例:
MyApp/bin/Debug/net8.0/
  MyApp.exe
  MyApp.dll
  elite_cs_sdk.dll
  elite_cs_series_sdk_c.dll
代码示例可以参考example下使用案例(需修改配方和脚本读取路径)
如果运行时提示 DllNotFoundException: elite_cs_series_sdk_c,通常表示 native DLL 没有被复制到程序运行目录。
另可选做法:
修改项目的csproj文件,添加下面的ItemGroup标签
  <ItemGroup>
    <Reference Include="elite_cs_sdk">
      <HintPath>libs\elite_cs_sdk.dll</HintPath>
    </Reference>
  </ItemGroup>

  <ItemGroup>
    <Content Include="libs\*.dll">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
  </ItemGroup>

四、常见问题


4.1
DllNotFoundException: elite_cs_series_sdk_c

  • 如果你是直接构建本仓库:
    • 先重新执行 dotnet build,确认自动 bootstrap 处于启用状态
    • 如果自动 bootstrap 失败,重点检查:
      • gitcmake、C/C++ 编译器是否已安装
      • 机器是否能访问 native 封装仓库
      • native 封装在需要 ELITE_AUTO_FETCH_SDK=ON 时,是否能继续访问上游 SDK 仓库
      • 如果仓库地址是自动推导的,当前仓库的 origin 是否确实对应正确的 owner 或 fork
      • 如果当前网络无法访问 GitHub,确认 Gitee 是否可访问
  • 如果你是在其他项目里通过 NuGet 包引用:
    • 确认打包前 .native-out/ 下已经准备好了对应平台的 native 运行库
    • 如果你更新了包但仍在使用旧缓存,请升级包版本后重新添加引用
    • 确认 native 库文件已经被复制到项目输出目录

4.2 串口示例报 SSH connection failed: Connection refused

  • startToolRs485 依赖控制器 SSH。
  • 检查控制器 SSH 服务是否开启、22 端口是否可达、防火墙/路由是否阻断。

4.3 Windows 下出现 NMAKE fatal error U1052: 未找到文件 "Makefile"

  • 这通常不是根因,而是前面的 cmake 配置步骤已经失败,后续 cmake --build 又继续执行导致的二次报错。
  • 重点检查:
    • 是否安装了 Visual Studio 的 C++ 构建工具,或 Ninja
    • cmake 是否能找到可用的 C/C++ 编译器
    • native 封装仓库及其上游依赖仓库是否可访问
  • 更新到包含最新 bootstrap 脚本的版本后,构建会直接显示真实的 cmake configure 失败原因,而不是只显示 NMAKE 错误。

4.4 RtUtils FIFO 调度警告

  • 这是实时调度优化提示,通常不是致命错误,可忽略。

4.5 Windows 下报 Could NOT find Boost

  • 这通常表示上游 C++ SDK 的依赖没有通过 vcpkg 或其他前缀路径传给 cmake
  • 如果你已经通过 vcpkg 安装了 boost,请显式设置:
    • VCPKG_ROOT
    • CMAKE_TOOLCHAIN_FILE
    • 需要时再设置 VCPKG_TARGET_TRIPLET
  • 如果不是 vcpkg 安装的依赖,可以改为设置 CMAKE_PREFIX_PATH