using System; using System.Collections.Generic; using System.Net.Http; using System.Threading; using System.Threading.Tasks; using Grpc.Core; using Grpc.Net.Client; using Robotc; using Empty = Google.Protobuf.WellKnownTypes.Empty; namespace Lebai.SDK { public partial class LebaiRobotClient { public static readonly Dictionary LebaiRobotClients = new(); private readonly HttpClient _httpClient; private RobotController.RobotControllerClient _robotControllerClient; private RobotPrivateController.RobotPrivateControllerClient _robotPrivateControllerClient; public LebaiRobotClient(string ip, int robotControllerClientPort = 5181, int robotPrivateControllerPort = 5182, GrpcChannelOptions grpcChannelOptions = null) { IP = ip; RobotControllerClientPort = robotControllerClientPort; RobotPrivateControllerPort = robotPrivateControllerPort; GrpcChannelOptions = grpcChannelOptions; _httpClient = new HttpClient {BaseAddress = new Uri($"http://{ip}")}; } private string IP { get; } private int RobotControllerClientPort { get; } private int RobotPrivateControllerPort { get; } private GrpcChannelOptions GrpcChannelOptions { get; } public Action OnRpcException { get; set; } private RobotController.RobotControllerClient RobotControllerClient => LazyInitializer.EnsureInitialized(ref _robotControllerClient, () => { var r = new RobotController.RobotControllerClient( GrpcChannel.ForAddress(new Uri($"http://{IP}:{RobotControllerClientPort}"), GrpcChannelOptions ?? new GrpcChannelOptions { MaxRetryAttempts = 5 }) ); return r; }); private RobotPrivateController.RobotPrivateControllerClient RobotPrivateControllerClient => LazyInitializer.EnsureInitialized(ref _robotPrivateControllerClient, () => new RobotPrivateController.RobotPrivateControllerClient( GrpcChannel.ForAddress(new Uri($"http://{IP}:{RobotPrivateControllerPort}"), GrpcChannelOptions ?? new GrpcChannelOptions { MaxRetryAttempts = 5 }))); public static LebaiRobotClient Get(string ip, int robotControllerClientPort = 5181, int robotPrivateControllerPort = 5182) { if (LebaiRobotClients.ContainsKey(ip)) return LebaiRobotClients[ip]; LebaiRobotClients[ip] = new LebaiRobotClient(ip); return LebaiRobotClients[ip]; } /// /// 启用/禁用 设备 /// /// /// public virtual async Task ConnectExternalIO(ExternalIOState externalIoState, CancellationToken cancellationToken = default) { await RobotPrivateControllerClient.ConnectExternalIOAsync(externalIoState, cancellationToken: cancellationToken); } /// /// 关闭电源 /// public virtual async Task PowerDown(CancellationToken cancellationToken = default) { await RobotControllerClient.PowerDownAsync(new Empty(), cancellationToken: cancellationToken); } /// /// 等待,单位毫秒 /// /// /// public virtual async Task Sleep(SleepRequest sleepRequest, CancellationToken cancellationToken = default) { await RobotControllerClient.SleepAsync(sleepRequest, cancellationToken: cancellationToken); } /// /// 同步,等待命令执行完成 /// public virtual async Task Sync(CancellationToken cancellationToken = default) { try { await RobotControllerClient.SyncAsync(new Empty(), cancellationToken: cancellationToken); } catch (RpcException e) { OnRpcException?.Invoke(e); } } public virtual async Task SyncFor(SyncRequest syncRequest, CancellationToken cancellationToken = default) { await RobotControllerClient.SyncForAsync(syncRequest, cancellationToken: cancellationToken); } /// /// 开启示教模式 /// public virtual async Task TeachMode(CancellationToken cancellationToken = default) { await RobotControllerClient.TeachModeAsync(new Empty(), cancellationToken: cancellationToken); } /// /// 关闭示教模式 /// public virtual async Task EndTeachMode(CancellationToken cancellationToken = default) { await RobotControllerClient.EndTeachModeAsync(new Empty(), cancellationToken: cancellationToken); } /// /// 设置速度因子(0-100) /// /// /// public virtual async Task SetVelocityFactor(Factor factor, CancellationToken cancellationToken = default) { await RobotControllerClient.SetVelocityFactorAsync(factor, cancellationToken: cancellationToken); } /// /// 获取速度因子(0-100) /// /// public virtual async Task GetVelocityFactor(CancellationToken cancellationToken = default) { return await RobotControllerClient.GetVelocityFactorAsync(new Empty(), cancellationToken: cancellationToken); } /// /// 设置重力方向 /// /// /// public virtual async Task SetGravity(Coordinate coordinate, CancellationToken cancellationToken = default) { await RobotControllerClient.SetGravityAsync(coordinate, cancellationToken: cancellationToken); } /// /// 获取重力方向 /// /// public virtual async Task GetGravity(CancellationToken cancellationToken = default) { return await RobotControllerClient.GetGravityAsync(new Empty(), cancellationToken: cancellationToken); } /// /// 设置负载 /// /// /// public virtual async Task SetPayload(Payload payload, CancellationToken cancellationToken = default) { await RobotControllerClient.SetPayloadAsync(payload, cancellationToken: cancellationToken); } /// /// 获取负载 /// /// public virtual async Task GetPayload(CancellationToken cancellationToken = default) { return await RobotControllerClient.GetPayloadAsync(new Empty(), cancellationToken: cancellationToken); } /// /// 设置负责质量 /// /// /// public virtual async Task SetPayloadMass(PayloadMass payloadMass, CancellationToken cancellationToken = default) { await RobotControllerClient.SetPayloadMassAsync(payloadMass, cancellationToken: cancellationToken); } /// /// 获取负责质量 /// /// public virtual async Task GetPayloadMass(CancellationToken cancellationToken = default) { return await RobotControllerClient.GetPayloadMassAsync(new Empty(), cancellationToken: cancellationToken); } /// /// 设置负载质心 /// /// /// public virtual async Task SetPayloadCog(PayloadCog payloadCog, CancellationToken cancellationToken = default) { await RobotControllerClient.SetPayloadCogAsync(payloadCog, cancellationToken: cancellationToken); } /// /// 获取负责质心 /// /// public virtual async Task GetPayloadCog(CancellationToken cancellationToken = default) { return await RobotControllerClient.GetPayloadCogAsync(new Empty(), cancellationToken: cancellationToken); } /// /// 设置TCP /// /// /// public virtual async Task SetTcp(PR pR, CancellationToken cancellationToken = default) { await RobotControllerClient.SetTcpAsync(pR, cancellationToken: cancellationToken); } /// /// 获取TCP /// /// public virtual async Task GetTcp(CancellationToken cancellationToken = default) { return await RobotControllerClient.GetTcpAsync(new Empty(), cancellationToken: cancellationToken); } /// /// 设置手爪幅度:0-100 double /// /// /// public virtual async Task SetClawAmplitude(Amplitude amplitude, CancellationToken cancellationToken = default) { await RobotControllerClient.SetClawAmplitudeAsync(amplitude, cancellationToken: cancellationToken); } /// /// 获得手爪幅度:0-100 double /// /// public virtual async Task GetClawAmplitude(CancellationToken cancellationToken = default) { return await RobotControllerClient.GetClawAmplitudeAsync(new Empty(), cancellationToken: cancellationToken); } /// /// 获得手爪目前是否夹紧物体状态1表示夹紧,0为松开 /// /// public virtual async Task GetClawHoldOn(CancellationToken cancellationToken = default) { return await RobotControllerClient.GetClawHoldOnAsync(new Empty(), cancellationToken: cancellationToken); } /// /// 设置手爪力度:0-100 double /// /// /// public virtual async Task SetClawForce(Force force, CancellationToken cancellationToken = default) { await RobotControllerClient.SetClawForceAsync(force, cancellationToken: cancellationToken); } /// /// 获得手爪称重结果 /// /// public virtual async Task GetClawWeight(CancellationToken cancellationToken = default) { return await RobotControllerClient.GetClawWeightAsync(new Empty(), cancellationToken: cancellationToken); } /// /// implement later /// /// public virtual async Task GetTcpForce(CancellationToken cancellationToken = default) { return await RobotControllerClient.GetTcpForceAsync(new Empty(), cancellationToken: cancellationToken); } /// /// 设置手爪 /// /// /// /// public virtual async Task SetClaw(ClawInfo clawInfo, CancellationToken cancellationToken = default) { return await RobotControllerClient.SetClawAsync(clawInfo, cancellationToken: cancellationToken); } /// /// 获取手爪 /// /// public virtual async Task GetClaw(CancellationToken cancellationToken = default) { return await RobotControllerClient.GetClawAsync(new Empty(), cancellationToken: cancellationToken); } /// /// 设置位置 /// /// /// public virtual async Task SetPos(JPose jPose, CancellationToken cancellationToken = default) { await RobotControllerClient.SetPosAsync(jPose, cancellationToken: cancellationToken); } /// /// implement later /// /// /// public virtual async Task SpeedJ(SpeedJRequest speedJRequest, CancellationToken cancellationToken = default) { await RobotControllerClient.SpeedJAsync(speedJRequest, cancellationToken: cancellationToken); } /// /// implement later /// /// /// public virtual async Task SpeedL(SpeedLRequest speedLRequest, CancellationToken cancellationToken = default) { await RobotControllerClient.SpeedLAsync(speedLRequest, cancellationToken: cancellationToken); } /// /// implement later /// /// /// public virtual async Task StopJ(StopJRequest stopJRequest, CancellationToken cancellationToken = default) { await RobotControllerClient.StopJAsync(stopJRequest, cancellationToken: cancellationToken); } /// /// implement later /// /// /// public virtual async Task StopL(StopLRequest stopLRequest, CancellationToken cancellationToken = default) { await RobotControllerClient.StopLAsync(stopLRequest, cancellationToken: cancellationToken); } /// /// 停止当前移动 /// public virtual async Task StopMove(CancellationToken cancellationToken = default) { await RobotControllerClient.StopMoveAsync(new Empty(), cancellationToken: cancellationToken); } /// /// 圆弧移动 /// /// /// public virtual async Task MoveC(MoveCRequest moveCRequest, CancellationToken cancellationToken = default) { await RobotControllerClient.MoveCAsync(moveCRequest, cancellationToken: cancellationToken); } /// /// 关节空间线性移动 /// /// /// public virtual async Task MoveJ(MoveJRequest moveJRequest, CancellationToken cancellationToken = default) { await RobotControllerClient.MoveJAsync(moveJRequest, cancellationToken: cancellationToken); } /// /// 笛卡尔空间线性移动 /// /// /// public virtual async Task MoveL(MoveLRequest moveLRequest, CancellationToken cancellationToken = default) { await RobotControllerClient.MoveLAsync(moveLRequest, cancellationToken: cancellationToken); } /// /// DEPRECIATED /// /// /// [Obsolete] public virtual async Task MoveLJ(MoveLRequest moveLRequest, CancellationToken cancellationToken = default) { await RobotControllerClient.MoveLJAsync(moveLRequest, cancellationToken: cancellationToken); } /// /// implement later /// /// /// public virtual async Task MoveP(MovePRequest movePRequest, CancellationToken cancellationToken = default) { await RobotControllerClient.MovePAsync(movePRequest, cancellationToken: cancellationToken); } /// /// pt move /// /// /// public virtual async Task MovePT(PVATRequest pVATRequest, CancellationToken cancellationToken = default) { await RobotControllerClient.MovePTAsync(pVATRequest, cancellationToken: cancellationToken); } /*public void MovePTStream(PVATRequest request,CancellationToken cancellationToken=default) { }*/ /// /// pvt move /// /// /// public virtual async Task MovePVT(PVATRequest pVATRequest, CancellationToken cancellationToken = default) { await RobotControllerClient.MovePVTAsync(pVATRequest, cancellationToken: cancellationToken); } /*public void MovePVTStream(PVATRequest request,CancellationToken cancellationToken=default) { RobotControllerClient.MovePVTStreamAsync(PVATRequest,cancellationToken:cancellationToken); }*/ /// /// pvat move /// /// /// public virtual async Task MovePVAT(PVATRequest pVATRequest, CancellationToken cancellationToken = default) { await RobotControllerClient.MovePVATAsync(pVATRequest, cancellationToken: cancellationToken); } /*public void MovePVATStream(stream stream PVATRequest,CancellationToken cancellationToken=default) { RobotControllerClient.MovePVATStreamAsync(PVATRequest,cancellationToken:cancellationToken); }*/ /// /// implement later /// /// /// public virtual async Task ServoC(ServoCRequest servoCRequest, CancellationToken cancellationToken = default) { await RobotControllerClient.ServoCAsync(servoCRequest, cancellationToken: cancellationToken); } /// /// implement later /// /// /// public virtual async Task ServoJ(ServoJRequest servoJRequest, CancellationToken cancellationToken = default) { await RobotControllerClient.ServoJAsync(servoJRequest, cancellationToken: cancellationToken); } /// /// 获取机器人所有状态数据 /// /// public virtual async Task GetRobotData(CancellationToken cancellationToken = default) { return await RobotControllerClient.GetRobotDataAsync(new Empty(), cancellationToken: cancellationToken); } /// /// 获取机器人状态 /// /// public virtual async Task GetRobotMode(CancellationToken cancellationToken = default) { return await RobotControllerClient.GetRobotModeAsync(new Empty(), cancellationToken: cancellationToken); } /// /// 获得实际关节位置 /// /// public virtual async Task GetActualJointPositions(CancellationToken cancellationToken = default) { return await RobotControllerClient.GetActualJointPositionsAsync(new Empty(), cancellationToken: cancellationToken); } /// /// 获得目标关节位置 /// /// public virtual async Task GetTargetJointPositions(CancellationToken cancellationToken = default) { return await RobotControllerClient.GetTargetJointPositionsAsync(new Empty(), cancellationToken: cancellationToken); } /// /// 获得实际关节速度 /// /// public virtual async Task GetActualJointSpeeds(CancellationToken cancellationToken = default) { return await RobotControllerClient.GetActualJointSpeedsAsync(new Empty(), cancellationToken: cancellationToken); } /// /// 获得目标关节速度 /// /// public virtual async Task GetTargetJointSpeeds(CancellationToken cancellationToken = default) { return await RobotControllerClient.GetTargetJointSpeedsAsync(new Empty(), cancellationToken: cancellationToken); } /// /// 获得末端在笛卡尔坐标系下的位姿 /// /// public virtual async Task GetActualTcpPose(CancellationToken cancellationToken = default) { return await RobotControllerClient.GetActualTcpPoseAsync(new Empty(), cancellationToken: cancellationToken); } /// /// 获得末端在笛卡尔坐标系下的目标位姿 /// /// public virtual async Task GetTargetTcpPose(CancellationToken cancellationToken = default) { return await RobotControllerClient.GetTargetTcpPoseAsync(new Empty(), cancellationToken: cancellationToken); } /// /// implement later /// /// public virtual async Task GetActualTcpSpeed(CancellationToken cancellationToken = default) { return await RobotControllerClient.GetActualTcpSpeedAsync(new Empty(), cancellationToken: cancellationToken); } /// /// implement later /// /// public virtual async Task GetTargetTcpSpeed(CancellationToken cancellationToken = default) { return await RobotControllerClient.GetTargetTcpSpeedAsync(new Empty(), cancellationToken: cancellationToken); } /// /// implement later /// /// public virtual async Task GetActualFlangePose(CancellationToken cancellationToken = default) { return await RobotControllerClient.GetActualFlangePoseAsync(new Empty(), cancellationToken: cancellationToken); } /// /// 获取关节扭矩 /// /// public virtual async Task GetJointTorques(CancellationToken cancellationToken = default) { return await RobotControllerClient.GetJointTorquesAsync(new Empty(), cancellationToken: cancellationToken); } /// /// 获取控制器温度 /// /// public virtual async Task GetControllerTemp(CancellationToken cancellationToken = default) { return await RobotControllerClient.GetControllerTempAsync(new Empty(), cancellationToken: cancellationToken); } /// /// 获取关节内部温度 /// /// /// public virtual async Task GetJointTemp(IntRequest intRequest, CancellationToken cancellationToken = default) { return await RobotControllerClient.GetJointTempAsync(intRequest, cancellationToken: cancellationToken); } /// /// implement later /// /// public virtual async Task GetToolCurrent(CancellationToken cancellationToken = default) { return await RobotControllerClient.GetToolCurrentAsync(new Empty(), cancellationToken: cancellationToken); } /// /// 设置数字输出端口的值 /// /// /// public virtual async Task SetDIO(DIO dIO, CancellationToken cancellationToken = default) { await RobotControllerClient.SetDIOAsync(dIO, cancellationToken: cancellationToken); } /// /// 设置扩展数字输出端口的值 /// /// /// public virtual async Task SetExtraDIO(DIO dIO, CancellationToken cancellationToken = default) { await RobotControllerClient.SetExtraDIOAsync(dIO, cancellationToken: cancellationToken); } /// /// 获得数字输入端口的值 /// /// /// /// public virtual async Task GetDIO(IOPin iOPin, CancellationToken cancellationToken = default) { return await RobotControllerClient.GetDIOAsync(iOPin, cancellationToken: cancellationToken); } /// /// 获得扩展数字数如端口的值 /// /// /// /// public virtual async Task GetExtraDIO(IOPin iOPin, CancellationToken cancellationToken = default) { return await RobotControllerClient.GetExtraDIOAsync(iOPin, cancellationToken: cancellationToken); } /// /// 设置TCP数字输出端口的值 /// /// /// public virtual async Task SetTcpDIO(DIO dIO, CancellationToken cancellationToken = default) { await RobotControllerClient.SetTcpDIOAsync(dIO, cancellationToken: cancellationToken); } /// /// 获得TCP数字输入端口的值 /// /// /// /// public virtual async Task GetTcpDIO(IOPin iOPin, CancellationToken cancellationToken = default) { return await RobotControllerClient.GetTcpDIOAsync(iOPin, cancellationToken: cancellationToken); } /// /// 设置模拟输出端口的值 /// /// /// public virtual async Task SetAIO(AIO aIO, CancellationToken cancellationToken = default) { await RobotControllerClient.SetAIOAsync(aIO, cancellationToken: cancellationToken); } /// /// 获得模拟输入端口的值 /// /// /// public virtual async Task SetExtraAIO(AIO aIO, CancellationToken cancellationToken = default) { await RobotControllerClient.SetExtraAIOAsync(aIO, cancellationToken: cancellationToken); } /// /// 获得模拟输入端口的值 /// /// /// /// public virtual async Task GetAIO(IOPin iOPin, CancellationToken cancellationToken = default) { return await RobotControllerClient.GetAIOAsync(iOPin, cancellationToken: cancellationToken); } /// /// 获得扩展模拟输入端口的值 /// /// /// /// public virtual async Task GetExtraAIO(IOPin iOPin, CancellationToken cancellationToken = default) { return await RobotControllerClient.GetExtraAIOAsync(iOPin, cancellationToken: cancellationToken); } /// /// 设置模拟输入端口工作模式:0:电压,1:电流 /// /// /// public virtual async Task SetAInMode(AIO aIO, CancellationToken cancellationToken = default) { await RobotControllerClient.SetAInModeAsync(aIO, cancellationToken: cancellationToken); } /// /// 设置扩展模拟输入端口工作模式:0:电压,1:电流 /// /// /// public virtual async Task SetExtraAInMode(AIO aIO, CancellationToken cancellationToken = default) { await RobotControllerClient.SetExtraAInModeAsync(aIO, cancellationToken: cancellationToken); } /// /// 获得模拟输入端口工作模式:0:电压,1:电流 /// /// /// /// public virtual async Task GetAInMode(IOPin iOPin, CancellationToken cancellationToken = default) { return await RobotControllerClient.GetAInModeAsync(iOPin, cancellationToken: cancellationToken); } /// /// 获得扩展模拟输入端口工作模式:0:电压,1:电流 /// /// /// /// public virtual async Task GetExtraAInMode(IOPin iOPin, CancellationToken cancellationToken = default) { return await RobotControllerClient.GetExtraAInModeAsync(iOPin, cancellationToken: cancellationToken); } /// /// 设置模拟输出端口工作模式:0:电压,1:电流 /// /// /// public virtual async Task SetAOutMode(AIO aIO, CancellationToken cancellationToken = default) { await RobotControllerClient.SetAOutModeAsync(aIO, cancellationToken: cancellationToken); } /// /// 设置扩展模拟输出端口工作模式:0:电压,1:电流 /// /// /// public virtual async Task SetExtraAOutMode(AIO aIO, CancellationToken cancellationToken = default) { await RobotControllerClient.SetExtraAOutModeAsync(aIO, cancellationToken: cancellationToken); } /// /// 获得模拟输出端口工作模式:0:电压,1:电流 /// /// /// /// public virtual async Task GetAOutMode(IOPin iOPin, CancellationToken cancellationToken = default) { return await RobotControllerClient.GetAOutModeAsync(iOPin, cancellationToken: cancellationToken); } /// /// 获得扩展模拟输出端口工作模式:0:电压,1:电流 /// /// /// /// public virtual async Task GetExtraAOutMode(IOPin iOPin, CancellationToken cancellationToken = default) { return await RobotControllerClient.GetExtraAOutModeAsync(iOPin, cancellationToken: cancellationToken); } /// /// 开启/启动系统 /// public virtual async Task StartSys(CancellationToken cancellationToken = default) { await RobotControllerClient.StartSysAsync(new Empty(), cancellationToken: cancellationToken); } /// /// 关闭/停止系统 /// public virtual async Task StopSys(CancellationToken cancellationToken = default) { await RobotControllerClient.StopSysAsync(new Empty(), cancellationToken: cancellationToken); } /// /// 程序停止 /// public virtual async Task Stop(CancellationToken cancellationToken = default) { await RobotControllerClient.StopAsync(new Empty(), cancellationToken: cancellationToken); } /// /// 急停 /// public virtual async Task EStop(CancellationToken cancellationToken = default) { await RobotControllerClient.EStopAsync(new Empty(), cancellationToken: cancellationToken); } /// /// 获取kdl参数 /// /// public virtual async Task GetKDL(CancellationToken cancellationToken = default) { return await RobotControllerClient.GetKDLAsync(new Empty(), cancellationToken: cancellationToken); } /// /// 查询系统里面的日志信息 /// /// public virtual async Task GetLogs(CancellationToken cancellationToken = default) { return await RobotControllerClient.GetLogsAsync(new Empty(), cancellationToken: cancellationToken); } /// /// 获得当前正在执行的命令id,如果没有在执行的命令,则返回-1 /// public virtual async Task GetCurrentCmd(CancellationToken cancellationToken = default) { await RobotControllerClient.GetCurrentCmdAsync(new Empty(), cancellationToken: cancellationToken); } /* // 获得指定命令id的执行结果:-1: 未执行;0: 已执行 public CmdStatus GetCmdExecStatus(void cmdId,CancellationToken cancellationToken=default) { return await nt.GetCmdExecStatus(cmdId,cancellationToken:cancellationToken); }*/ /// /// 开始微调: 如果当前有其他微调再传入新的微调命令会终止当前的微调进行新的微调 /// /// public virtual async Task StartFineTuning(FineTuning fineTuning, CancellationToken cancellationToken = default) { await RobotControllerClient.StartFineTuningAsync(fineTuning, cancellationToken: cancellationToken); } /// /// 停止微调 /// public virtual async Task StopFineTuning(CancellationToken cancellationToken = default) { await RobotControllerClient.StopFineTuningAsync(new Empty(), cancellationToken: cancellationToken); } /// /// 暂停机器人 /// public virtual async Task Pause(CancellationToken cancellationToken = default) { await RobotControllerClient.PauseAsync(new Empty(), cancellationToken: cancellationToken); } /// /// 恢复机器人 /// public virtual async Task Resume(CancellationToken cancellationToken = default) { await RobotControllerClient.ResumeAsync(new Empty(), cancellationToken: cancellationToken); } /// /// 机器人正解 /// /// /// /// public virtual async Task KinematicsForward(Joint joint, CancellationToken cancellationToken = default) { return await RobotControllerClient.KinematicsForwardAsync(joint, cancellationToken: cancellationToken); } /// /// 机器人反解 /// /// /// /// public virtual async Task KinematicsInverse(Vector vector, CancellationToken cancellationToken = default) { return await RobotControllerClient.KinematicsInverseAsync(vector, cancellationToken: cancellationToken); } /// /// TCP示教添加 /// /// /// /// public virtual async Task CalcTcpTranslation(CalcTcpParam calcTcpParam, CancellationToken cancellationToken = default) { return await RobotControllerClient.CalcTcpTranslationAsync(calcTcpParam, cancellationToken: cancellationToken); } /// /// 测试命令,以给定的RPY数据执行线性移动 /// /// /// public virtual async Task MoveLRPY(MoveLRPYRequest moveLRPYRequest, CancellationToken cancellationToken = default) { await RobotControllerClient.MoveLRPYAsync(moveLRPYRequest, cancellationToken: cancellationToken); } /// /// 设置LED灯状态 /// /// /// public virtual async Task SetLED(LEDStatus lEDStatus, CancellationToken cancellationToken = default) { await RobotControllerClient.SetLEDAsync(lEDStatus, cancellationToken: cancellationToken); } /// /// 设置声音 /// /// public virtual async Task SetVoice(VoiceStatus voiceStatus, CancellationToken cancellationToken = default) { await RobotControllerClient.SetVoiceAsync(voiceStatus, cancellationToken: cancellationToken); } /// /// 设置风扇 /// /// /// public virtual async Task SetFan(FanStatus fanStatus, CancellationToken cancellationToken = default) { await RobotControllerClient.SetFanAsync(fanStatus, cancellationToken: cancellationToken); } /// /// 获取灯板状态 /// /// public virtual async Task GetLampStatus(CancellationToken cancellationToken = default) { return await RobotControllerClient.GetLampStatusAsync(new Empty(), cancellationToken: cancellationToken); } /// /// Lua 状态查询 /// /// public virtual async Task GetLuaState(CancellationToken cancellationToken = default) { return await RobotControllerClient.GetLuaStateAsync(new Empty(), cancellationToken: cancellationToken); } /// /// 设置外置数字输出 /// /// /// /// public virtual async Task SetExternalDO(ExternalDigital externalDigital, CancellationToken cancellationToken = default) { return await RobotControllerClient.SetExternalDOAsync(externalDigital, cancellationToken: cancellationToken); } /// /// 获取外置数字输出 /// /// /// /// public virtual async Task GetExternalDO(ExternalPin externalPin, CancellationToken cancellationToken = default) { return await RobotControllerClient.GetExternalDOAsync(externalPin, cancellationToken: cancellationToken); } /// /// 获取外置数字输入 /// /// /// /// public virtual async Task GetExternalDI(ExternalPin externalPin, CancellationToken cancellationToken = default) { return await RobotControllerClient.GetExternalDIAsync(externalPin, cancellationToken: cancellationToken); } /// /// 设置外置模拟输出 /// /// /// /// public virtual async Task SetExternalAO(ExternalAnalog externalAnalog, CancellationToken cancellationToken = default) { return await RobotControllerClient.SetExternalAOAsync(externalAnalog, cancellationToken: cancellationToken); } /// /// 获取外置模拟输出 /// /// /// /// public virtual async Task GetExternalAO(ExternalPin externalPin, CancellationToken cancellationToken = default) { return await RobotControllerClient.GetExternalAOAsync(externalPin, cancellationToken: cancellationToken); } /// /// 获取外置模拟输入 /// /// /// /// public virtual async Task GetExternalAI(ExternalPin externalPin, CancellationToken cancellationToken = default) { return await RobotControllerClient.GetExternalAIAsync(externalPin, cancellationToken: cancellationToken); } /// /// 获取某个外置io的全部io信息 /// /// /// /// public virtual async Task GetExternalIOs(ExternalDevice externalDevice, CancellationToken cancellationToken = default) { return await RobotControllerClient.GetExternalIOsAsync(externalDevice, cancellationToken: cancellationToken); } /// /// 设置某个外置io的全部io信息 /// /// /// /// public virtual async Task SetExternalDOs(ExternalDigitals externalDigitals, CancellationToken cancellationToken = default) { return await RobotControllerClient.SetExternalDOsAsync(externalDigitals, cancellationToken: cancellationToken); } /// /// 获取外置数字输出 /// /// /// /// public virtual async Task GetExternalDOs(ExternalPins externalPins, CancellationToken cancellationToken = default) { return await RobotControllerClient.GetExternalDOsAsync(externalPins, cancellationToken: cancellationToken); } /// /// 获取外置数字输入 /// /// /// /// public virtual async Task GetExternalDIs(ExternalPins externalPins, CancellationToken cancellationToken = default) { return await RobotControllerClient.GetExternalDIsAsync(externalPins, cancellationToken: cancellationToken); } /// /// 设置外置模拟输出 /// /// /// /// public virtual async Task SetExternalAOs(ExternalAnalogs externalAnalogs, CancellationToken cancellationToken = default) { return await RobotControllerClient.SetExternalAOsAsync(externalAnalogs, cancellationToken: cancellationToken); } /// /// 获取外置模拟输出 /// /// /// /// public virtual async Task GetExternalAOs(ExternalPins externalPins, CancellationToken cancellationToken = default) { return await RobotControllerClient.GetExternalAOsAsync(externalPins, cancellationToken: cancellationToken); } /// /// 获取外置模拟输入 /// /// /// /// public virtual async Task GetExternalAIs(ExternalPins externalPins, CancellationToken cancellationToken = default) { return await RobotControllerClient.GetExternalAIsAsync(externalPins, cancellationToken: cancellationToken); } /// /// 设置信号量 /// /// /// /// public virtual async Task SetSignal(SignalValue signalValue, CancellationToken cancellationToken = default) { return await RobotControllerClient.SetSignalAsync(signalValue, cancellationToken: cancellationToken); } /// /// 获取信号量 /// /// /// /// public virtual async Task GetSignal(SignalValue signalValue, CancellationToken cancellationToken = default) { return await RobotControllerClient.GetSignalAsync(signalValue, cancellationToken: cancellationToken); } /// /// 添加信号量 /// /// /// /// public virtual async Task AddSignal(SignalValue signalValue, CancellationToken cancellationToken = default) { return await RobotControllerClient.AddSignalAsync(signalValue, cancellationToken: cancellationToken); } /* public stream RegisterSignals(stream stream SignalList,CancellationToken cancellationToken=default) { return await RobotControllerClient.RegisterSignals().RequestStream.WriteAsync(cancellationToken:cancellationToken); }*/ /// /// 初始化配置 /// /// /// public virtual async void Init(Configuration configuration, CancellationToken cancellationToken = default) { await RobotPrivateControllerClient.InitAsync(configuration, cancellationToken: cancellationToken); } /// /// 获取机器人基础信息 /// /// public virtual async Task GetRobotInfo(CancellationToken cancellationToken = default) { return await RobotPrivateControllerClient.GetRobotInfoAsync(new Empty(), cancellationToken: cancellationToken); } /// /// 设置机器人安装方向 /// /// /// /// public virtual async Task SetInstallDirection(InstallDirection installDirection, CancellationToken cancellationToken = default) { return await RobotPrivateControllerClient.SetInstallDirectionAsync(installDirection, cancellationToken: cancellationToken); } /// /// 设置碰撞检测 /// /// /// /// public virtual async Task SetCollisionDetector(CollisionDetector collisionDetector, CancellationToken cancellationToken = default) { return await RobotPrivateControllerClient.SetCollisionDetectorAsync(collisionDetector, cancellationToken: cancellationToken); } /// /// 设置关节配置 /// /// /// /// public virtual async Task SetJointConfig(JointConfigs jointConfigs, CancellationToken cancellationToken = default) { return await RobotPrivateControllerClient.SetJointConfigAsync(jointConfigs, cancellationToken: cancellationToken); } /// /// 设置笛卡尔空间的配置 /// /// /// /// public virtual async Task SetCartesianConfig(CartesianConfig cartesianConfig, CancellationToken cancellationToken = default) { return await RobotPrivateControllerClient.SetCartesianConfigAsync(cartesianConfig, cancellationToken: cancellationToken); } /// /// 开启DDS /// /// /// /// public virtual async Task EnableDDS(TrueOrFalse trueOrFalse, CancellationToken cancellationToken = default) { return await RobotPrivateControllerClient.EnableDDSAsync(trueOrFalse, cancellationToken: cancellationToken); } /// /// 设置碰撞检测力矩差阈值 /// /// /// /// public virtual async Task SetCollisionTorqueDiff(CollisionTorqueDiff collisionTorqueDiff, CancellationToken cancellationToken = default) { return await RobotPrivateControllerClient.SetCollisionTorqueDiffAsync(collisionTorqueDiff, cancellationToken: cancellationToken); } // 注册通知事件 /*public virtual async stream Notification RegisterNotification(google.protobuf.Empty){ await RobotPrivateControllerClient.RegisterNotification(new Empty(),cancellationToken:cancellationToken); }*/ public virtual async Task RobotDriverInfo(CancellationToken cancellationToken = default) { return await RobotPrivateControllerClient.RobotDriverInfoAsync(new Empty(), cancellationToken: cancellationToken); } /*// 机器人OTA单个设备更新接口 public virtual async stream OTAResult RobotOTA(OTAData){ await RobotPrivateControllerClient.RobotOTAAsync(cancellationToken:cancellationToken); }*/ /// /// 通知灯板、法兰、关节切换分区 /// /// /// /// public virtual async Task SwitchOtaPartition(OTACmd otaCmd, CancellationToken cancellationToken = default) { return await RobotPrivateControllerClient.SwitchOtaPartitionAsync(otaCmd, cancellationToken: cancellationToken); } /*// 机器人OTA批量更新接口 public virtual async stream OTAResults RobotOTABatch(OTADatas){ await RobotPrivateControllerClient.RobotOTABatchAsync(cancellationToken:cancellationToken); }*/ /// /// 重置 /// /// public virtual async Task Reset(CancellationToken cancellationToken = default) { return await RobotPrivateControllerClient.ResetAsync(new Empty(), cancellationToken: cancellationToken); } /// /// 以给定角度置零 /// /// /// /// public virtual async Task InitZero(Zero zero, CancellationToken cancellationToken = default) { return await RobotPrivateControllerClient.InitZeroAsync(zero, cancellationToken: cancellationToken); } /// /// 以零位置零 /// /// public virtual async Task SetZero(CancellationToken cancellationToken = default) { return await RobotPrivateControllerClient.SetZeroAsync(new Empty(), cancellationToken: cancellationToken); } /// /// 获取机器人电压V /// /// public virtual async Task GetVoltage(CancellationToken cancellationToken = default) { return await RobotPrivateControllerClient.GetVoltageAsync(new Empty(), cancellationToken: cancellationToken); } /// /// 设置单关节伺服参数 /// /// /// /// public virtual async Task SetServoParam(JointServoParam jointServoParam, CancellationToken cancellationToken = default) { return await RobotPrivateControllerClient.SetServoParamAsync(jointServoParam, cancellationToken: cancellationToken); } /// /// 获取当前所有关节伺服参数 /// /// public virtual async Task GetServoParams(CancellationToken cancellationToken = default) { return await RobotPrivateControllerClient.GetServoParamsAsync(new Empty(), cancellationToken: cancellationToken); } /// /// 调试设置 /// /// /// /// public virtual async Task SetDebugParams(DebugParams debugParams, CancellationToken cancellationToken = default) { return await RobotPrivateControllerClient.SetDebugParamsAsync(debugParams, cancellationToken: cancellationToken); } /// /// 更改DH参数(三轴平行6参数) /// /// /// /// public virtual async Task FixDHParams(FixDHRequest fixDhRequest, CancellationToken cancellationToken = default) { return await RobotPrivateControllerClient.FixDHParamsAsync(fixDhRequest, cancellationToken: cancellationToken); } /// /// 设置LED样式 /// /// /// /// public virtual async Task SetLEDStyle(LEDStyle ledStyle, CancellationToken cancellationToken = default) { return await RobotPrivateControllerClient.SetLEDStyleAsync(ledStyle, cancellationToken: cancellationToken); } /// /// 获取LED样式 /// /// public virtual async Task GetLEDStyles(CancellationToken cancellationToken = default) { return await RobotPrivateControllerClient.GetLEDStylesAsync(new Empty(), cancellationToken: cancellationToken); } /*// 注册命令状态事件 public virtual async stream LuaEvent RegisterLuaEvent(){ await RobotPrivateControllerClient.RegisterLuaEventAsync(new Empty,cancellationToken:cancellationToken); }*/ /// /// 当推送 ALERT/CONFIRM/INPUT/SELECT,用户在前端确定后调用该接口 /// /// /// /// public virtual async Task ConfirmCallback(ConfirmInput confirmInput, CancellationToken cancellationToken = default) { return await RobotPrivateControllerClient.ConfirmCallbackAsync(confirmInput, cancellationToken: cancellationToken); } /// /// 获取 Lua 上次执行到的机器人位置 /// /// public virtual async Task GetLastPose(CancellationToken cancellationToken = default) { return await RobotPrivateControllerClient.GetLastPoseAsync(new Empty(), cancellationToken: cancellationToken); } /// /// 配置Modbus外部IO设备 /// /// /// /// public virtual async Task SetModbusExternalIO(ModbusExternalIOs modbusExternalIOs, CancellationToken cancellationToken = default) { return await RobotPrivateControllerClient.SetModbusExternalIOAsync(modbusExternalIOs, cancellationToken: cancellationToken); } /// /// 修改按钮配置 /// /// /// /// public virtual async Task SetButtonConfig(ButtonConfig buttonConfig, CancellationToken cancellationToken = default) { return await RobotPrivateControllerClient.SetButtonConfigAsync(buttonConfig, cancellationToken: cancellationToken); } /// /// 设置绑定设备开关, true: 不限制设备绑定; false:限制设备绑定逻辑 /// /// /// /// public virtual async Task SetBreakACup(TrueOrFalse trueOrFalse, CancellationToken cancellationToken = default) { return await RobotPrivateControllerClient.SetBreakACupAsync(trueOrFalse, cancellationToken: cancellationToken); } /*// PVAT数据记录接口,用户记录pvat数据 public virtual async stream RecordPVATResponse RecordPVAT(RecordPVATRequest){ await RobotPrivateControllerClient.RecordPVATAsync(cancellationToken:cancellationToken); }*/ /// /// 停止记录pvat数据 /// /// public virtual async Task StopRecordPVAT(CancellationToken cancellationToken = default) { return await RobotPrivateControllerClient.StopRecordPVATAsync(new Empty(), cancellationToken: cancellationToken); } /*// 语音升级 public virtual async stream VoiceResult,cancellationToken:cancellationToken);//yvoi UpgradeVoiceFile(VoiceFile){ await RobotPrivateControllerClient.UpgradeVoiceFileAsync(cancellationToken:cancellationToken); }*/ /// /// 获取当前 DH 参数 /// /// /// /// public virtual async Task GetDHParams(DHRequest dhRequest, CancellationToken cancellationToken = default) { return await RobotPrivateControllerClient.GetDHParamsAsync(dhRequest, cancellationToken: cancellationToken); } /// /// 设置 DH 参数并返回设置后的结果 /// /// /// /// public virtual async Task SetDHParams(DHParams dhParams, CancellationToken cancellationToken = default) { return await RobotPrivateControllerClient.SetDHParamsAsync(dhParams, cancellationToken: cancellationToken); } /// /// 写伺服控制参数 /// /// /// /// public virtual async Task WriteExtraServoParam(ExtraServoParam param, CancellationToken cancellationToken = default) { return await RobotPrivateControllerClient.WriteExtraServoParamAsync(param, cancellationToken: cancellationToken); } /// /// 读取伺服控制参数 /// /// /// /// public virtual async Task ReadExtraServoParam(ExtraServoParam param, CancellationToken cancellationToken = default) { return await RobotPrivateControllerClient.ReadExtraServoParamAsync(param, cancellationToken: cancellationToken); } /// /// 写多个伺服控制参数 /// /// /// /// public virtual async Task WriteExtraServoParams(ExtraServoParam param, CancellationToken cancellationToken = default) { return await RobotPrivateControllerClient.WriteExtraServoParamsAsync(param, cancellationToken: cancellationToken); } /// /// 读取多个伺服控制参数 /// /// public virtual async Task ReadExtraServoParams( CancellationToken cancellationToken = default) { return await RobotPrivateControllerClient.ReadExtraServoParamsAsync(new Empty(), cancellationToken: cancellationToken); } /// /// 重置伺服控制参数 /// /// public virtual async Task ResetExtraServoParams( CancellationToken cancellationToken = default) { return await RobotPrivateControllerClient.ResetExtraServoParamsAsync(new Empty(), cancellationToken: cancellationToken); } /// /// 写“主动消回差”参数 /// /// /// /// public virtual async Task WriteJointBacklash(JointBacklash param, CancellationToken cancellationToken = default) { return await RobotPrivateControllerClient.WriteJointBacklashAsync(param, cancellationToken: cancellationToken); } /// /// 读取“主动消回差”参数 /// /// /// /// public virtual async Task ReadJointBacklash(JointBacklash param, CancellationToken cancellationToken = default) { return await RobotPrivateControllerClient.ReadJointBacklashAsync(param, cancellationToken: cancellationToken); } /// /// 写“主动消回差”参数 /// /// /// /// public virtual async Task WriteJointBacklashes(JointBacklash param, CancellationToken cancellationToken = default) { return await RobotPrivateControllerClient.WriteJointBacklashesAsync(param, cancellationToken: cancellationToken); } /// /// 读取多个“主动消回差”参数 /// /// public virtual async Task ReadJointBacklashes(CancellationToken cancellationToken = default) { return await RobotPrivateControllerClient.ReadJointBacklashesAsync(new Empty(), cancellationToken: cancellationToken); } /// /// 重置“主动消回差”参数 /// /// public virtual async Task ResetJointBacklashes(CancellationToken cancellationToken = default) { return await RobotPrivateControllerClient.ResetJointBacklashesAsync(new Empty(), cancellationToken: cancellationToken); } /// /// 启用主动消回差 /// /// /// /// public virtual async Task WriteEnableJointBacklashes(EnableJointBacklash param, CancellationToken cancellationToken = default) { return await RobotPrivateControllerClient.WriteEnableJointBacklashesAsync(param, cancellationToken: cancellationToken); } /// /// 是否启用主动消回差 /// /// public virtual async Task ReadEnableJointBacklashes( CancellationToken cancellationToken = default) { return await RobotPrivateControllerClient.ReadEnableJointBacklashesAsync(new Empty(), cancellationToken: cancellationToken); } /// /// 重置主动消回差 /// /// public virtual async Task ResetEnableJointBacklashes( CancellationToken cancellationToken = default) { return await RobotPrivateControllerClient.ResetEnableJointBacklashesAsync(new Empty(), cancellationToken: cancellationToken); } /// /// 写关节回差参数 /// /// /// /// public virtual async Task WriteJointBacklashParam(JointBacklashParam param, CancellationToken cancellationToken = default) { return await RobotPrivateControllerClient.WriteJointBacklashParamAsync(param, cancellationToken: cancellationToken); } /// /// 读取关节回差参数 /// /// /// /// public virtual async Task ReadJointBacklashParam(JointBacklashParam param, CancellationToken cancellationToken = default) { return await RobotPrivateControllerClient.ReadJointBacklashParamAsync(param, cancellationToken: cancellationToken); } /// /// 写多个关节回差参数 /// /// /// /// public virtual async Task WriteJointBacklashParams(JointBacklashParam param, CancellationToken cancellationToken = default) { return await RobotPrivateControllerClient.WriteJointBacklashParamsAsync(param, cancellationToken: cancellationToken); } /// /// 读多个关节回差参数 /// /// public virtual async Task ReadJointBacklashParams( CancellationToken cancellationToken = default) { return await RobotPrivateControllerClient.ReadJointBacklashParamsAsync(new Empty(), cancellationToken: cancellationToken); } /// /// 重置关节回差参数 /// /// public virtual async Task ResetJointBacklashParams( CancellationToken cancellationToken = default) { return await RobotPrivateControllerClient.ResetJointBacklashParamsAsync(new Empty(), cancellationToken: cancellationToken); } /// /// 启用关节限位检测 /// /// /// /// public virtual async Task EnableJointLimit(TrueOrFalse param, CancellationToken cancellationToken = default) { return await RobotPrivateControllerClient.EnableJointLimitAsync(param, cancellationToken: cancellationToken); } /// /// 切换模拟环境 /// /// /// /// public virtual async Task SwitchSimulate(TrueOrFalse param, CancellationToken cancellationToken = default) { return await RobotPrivateControllerClient.SwitchSimulateAsync(param, cancellationToken: cancellationToken); } #if NET5_0||NET6_0 /// /// 获取机器人概要数据流 /// /// public IAsyncEnumerable GetRobotBriefDataStream(CancellationToken cancellationToken = default) { return RobotControllerClient.GetRobotBriefData().ResponseStream .ReadAllAsync(cancellationToken); } /// /// 获取机器人的IO数据流 /// /// public virtual IAsyncEnumerable GetRobotIODataStream(CancellationToken cancellationToken = default) { return RobotControllerClient.GetRobotIOData().ResponseStream .ReadAllAsync(cancellationToken); } /// /// 获取机器人的IO数据流 /// /// public virtual AsyncDuplexStreamingCall GetRobotIOData( CancellationToken cancellationToken = default) { return RobotControllerClient.GetRobotIOData(cancellationToken: cancellationToken); } #endif /*// 连接/断开 MODBUS 设备 public virtual async Task ConnectExternalIO(ExternalIOState param){ return await RobotPrivateControllerClient.ConnectExternalIOAsync(param,cancellationToken:cancellationToken); }*/ } }