简介
EliteDriver 是用于与机器人进行数据交互的主要类。它负责建立所有必要的套接字连接,并处理与机器人的数据交换。EliteDriver 会向机器人发送控制脚本,机器人在运行控制脚本后,会和 EliteDriver 建立通讯,接收运动数据,并且必要时会发送运动结果。
导入
from elite_cs_sdk import EliteDriver, EliteDriverConfig构造函数
构造函数
def __init__(config: EliteDriverConfig)- 功能创建 EliteDriver 对象,并初始化与机器人通信的必要连接。
以下情况此函数会抛出异常:- TCP server 创建失败,通常是因为端口被占用导致的。
- 连接机器人的primary port失败。
- 参数
- config:配置,参考配置
运动控制
控制关节位置
def writeServoj(pos: list, timeout_ms: int, cartesian = False, queue_mode = False) -> bool- 功能 向机器人发送伺服运动的指令。
- 参数
- pos:目标点位
- timeout_ms:设置机器人读取下一条指令的超时时间,小于等于0时会无限等待。
- cartesian:如果发送的点是笛卡尔的,则为true,如果是基于关节的,则为false。
- queue_mode:如果使用队列模式,为true,否则为false。队列模式:此模式下,会把控制指令放到一个队列中然后依次执行,并且在开始运动前会预存指定数量的指令。注意,此行为会造成一定的延迟。
- 返回值:指令发送成功返回 true,失败返回 false。
控制末端速度
def writeSpeedl(vel: list, timeout_ms: int) -> bool- 功能 向机器人发送线速度控制指令。
- 参数
- vel:线速度 [x, y, z, rx, ry, rz]。
- timeout_ms:设置机器人读取下一条指令的超时时间,小于等于0时会无限等待。
- 返回值:指令发送成功返回 true,失败返回 false。
使机器人空闲
def writeIdle(timeout_ms: int) -> bool- 功能发送空闲指令,如果机器人正在运动会使机器人停止运动。
- 参数
- timeout_ms:设置机器人读取下一条指令的超时时间,小于等于0时会无限等待。
- 返回值:指令发送成功返回 true,失败返回 false。
Freedrive
def writeFreedrive(action: FreedriveAction, timeout_ms: int) -> bool- 功能发送Freedrive模式的指令,如:开启Freedrive,停止Freedrive。
- 参数
- action:Freedrive动作,有:开启(START)、停止(END)、空操作(NOOP)
- timeout_ms:设置机器人读取下一条指令的超时时间,小于等于0时会无限等待。
- 注意:写入
START动作之后,需要在超时时间内写入下一条指令,可以写入NOOP。
轨迹运动
设置轨迹运动结果回调
def setTrajectoryResultCallback(cb: Callable[[TrajectoryMotionResult]])- 功能注册轨迹完成时的回调函数。 控制机器人的一种方式是将路点一次性发给机器人,当执行完成时,这里注册的回调函数将被触发。
- 参数
- cb:执行完成时的回调函数
写入轨迹路点
def writeTrajectoryPoint(positions : list, time : float, blend_radius: float, cartesian: bool) -> bool- 功能向专门的socket写入轨迹路点。
- 参数
- positions:路点
- time:到达路点的时间
- blend_radius:两个路点的转接半径
- cartesian:如果发送的点是笛卡尔的,则为true,如果是基于关节的,则为false
- 返回值:指令发送成功返回 true,失败返回 false。
轨迹控制动作
def writeTrajectoryControlAction(action: TrajectoryControlAction, point_number: int, timeout_ms: int) -> bool- 功能发送轨迹控制指令。
- 参数
- action:轨迹控制的动作。
- point_number:路点的数量。
- timeout_ms:设置机器人读取下一条指令的超时时间,小于等于0时会无限等待。
- 返回值:指令发送成功返回 true,失败返回 false。
- 注意:写入
START动作之后,需要在超时时间内写入下一条指令,可以写入NOOP。
详细使用可以参考案例:
机器人配置
力传感器去皮
def zeroFTSensor() -> bool- 功能将力/力矩传感器测量的施加在工具 TCP 上的力/力矩值清零(去皮),所述力/力矩值为 get_tcp_force(True) 脚本指令获取的施加在工具 TCP 上的力/力矩矢量,该矢量已进行负载补偿等处理。 该指令执行后,当前的力/力矩测量值会被作为力/力矩参考值保存,后续所有的力/力矩测量值都会减去该力/力矩参考值(去皮)。 请注意,上述力/力矩参考值会在该指令执行时更新,在控制器重启后将重置为 0。
- 返回值:指令发送成功返回 true,失败返回 false。
设置末端负载
def setPayload(mass: float, cog: list) -> bool- 功能该命令用于设置机器人载荷的质量、重心和转动惯量。
- 参数
- mass:负载质量
- cog:有效载荷的重心坐标(相对于法兰框架)。
- 返回值:指令发送成功返回 true,失败返回 false。
设置工具电压
def setToolVoltage(vol: ToolVoltage) -> bool- 功能设置工具电压
- 参数
- vol:工具电压
- 返回值:指令发送成功返回 true,失败返回 false。
开启力控模式
def startForceMode(reference_frame: list, selection_vector: list, wrench: list, mode: ForceMode, limits: list) -> bool- 功能开启力控模式。
- 参数
- reference_frame:定义力控参考坐标系的位姿矢量,该位姿矢量是相对于基座坐标系定义的。格式为 [X,Y,Z,Rx,Ry,Rz],其中 X、Y、Z 表示位置,单位为 m;Rx、Ry、Rz 表示位姿,单位为 rad。Rx、Ry、Rz 采用标准 RPY 角定义。selection_vector:由 0 和 1 组成的六维矢量,用于定义力控坐标系中的力控轴,1表示力控轴,0 表示非力控轴。
- selection_vector:由 0 和 1 组成的六维矢量,用于定义力控坐标系中的力控轴,1表示力控轴,0 表示非力控轴。
- wrench:机器人施加于环境的目标力/力矩。机器人将沿/绕力控轴调整位姿以便达到指定的目标力/力矩。格式为 [Fx,Fy,Fz,Mx,My,Mz],其中 Fx、Fy、Fz 表示沿力控轴方向施加的力,单位为 N;Mx、My、Mz 表示绕力控轴方向施加的力矩,单位为 Nm。该值对非力控轴无效。由于关节安全限制,实际施加的力/力矩可能低于设置的目标力/力矩。在单独的线程中使用 get_tcp_force 脚本指令可读取实际施加于环境的力/力矩。
- mode:力控模式参数,integer 型数据,范围为 0 到 3,用于定义力控模式,即:力控坐标系如何定义或者如何由力控参考坐标系变换获得。
- 0:固定模式。力控坐标系为力控参考坐标系。
- 1:点模式。力控坐标系的 Y 轴由机器人 TCP 原点指向力控参考坐标系的原点。
- 2:运动模式。力控坐标系的 X 轴为 TCP 移动方向矢量在力控参考坐标系的 X-Y 平面内的投影。
- limits:速度限制参数,六维矢量,float 型数据。格式为[Vx,Vy,Vz,ωx,ωy,ωz],其中 Vx、Vy、Vz 表示沿该轴允许的最大 TCP 速度,单位为m/s;ωx、ωy、ωz 表示绕该轴允许的最大 TCP 速度,单位为 rad/s。该速度限制参数对非力控轴无效,非力控轴仍执行该轴上的原始轨迹。
- 返回值:指令发送成功返回 true,失败返回 false。
关闭力控模式
def endForceMode() -> bool- 功能关闭力控模式
- 返回值:指令发送成功返回 true,失败返回 false。
其余
停止外部控制
def stopControl(wait_ms = 10000) -> bool- 功能发送停止指令到机器人,机器人将退出控制脚本,并且将停止接收来自PC的指令。
- 参数
- wait_ms: 阻塞等待机器人断开连接的时间(毫秒)。范围:> 5ms。
- 返回值指令发送成功返回 true,失败返回 false。以下情况会返回false:
- 已经与机器人断开连接。
- 等待时间内未与机器人断开连接。
是否与机器人连接
def isRobotConnected() -> bool- 功能
是否和机器人连接上 - 返回值:已连接返回 true,未连接返回 false。
发送脚本
def sendScript(script: str) -> bool- 功能向机器人的30001端口发送可执行脚本
- 参数
- script:待发送的脚本。
- 返回值:发送成功返回 true,失败返回 false。
发送控制脚本
def sendExternalControlScript() -> bool- 功能 向机器人发送外部控制脚本。可用于建立或恢复与机器人的控制。
- 返回值:发送成功返回 true,失败返回 false。
获取机器人Primary端口的数据包
def getPrimaryPackage(pkg: PrimaryPackage, timeout_ms: int)- 功能 获取机器人30001的数据包
- 参数
- pkg:待获取的数据包(参考PrimaryPort)
- timeout_ms:获取超时时间。
- 返回值:获取成功返回 true,失败返回 false。
重新连接机器人Primary端口
def primaryReconnect() -> bool- 功能 重新建立连接到机器人的30001端口。
- 返回值:成功返回 true,失败返回 false。
注册机器人异常回调
def registerRobotExceptionCallback(cb: Callable[[RobotExceptionSharedPtr]])- 功能 注册机器人异常回调函数。当从机器人的 primary 端口接收到异常报文时,将调用该回调函数。回调函数接收一个 RobotExceptionSharedPtr 类型的参数,表示发生的异常信息。
- 参数
- registerRobotExceptionCallback: 回调函数,用于处理接收到的机器人异常。参数为机器人异常的共享指针(参考:RobotException)。
启用工具RS485通讯
def startToolRs485(config: SerialConfig, tcp_port = 54321) -> SerialCommunication- 功能 启用工具RS485通讯。此接口会在机器人控制器上启动一个 socat 进程,将工具RS485串口的数据转发到指定的 TCP/IP 端口。
- 参数
- config:串口配置。详情可查看:串口通讯
- tcp_port:TCP 端口。
- 返回值:一个可以操作串口的对象,其本质是一个 TCP 客户端。详情可查看:串口通讯
停止工具RS485通讯
def endToolRs485(comm: SerialCommunication) -> bool- 功能 停止工具RS485通讯。
- 参数
- 返回值:成功停止工具RS485通讯。
启用工具RS485通讯
def startBoardRs485(config: SerialConfig, tcp_port = 54321) -> SerialCommunication- 功能 启用控制柜RS485通讯。此接口会在机器人控制器上启动一个 socat 进程,将控制柜RS485串口的数据转发到指定的 TCP/IP 端口。
- 参数
- config:串口配置。详情可查看:串口通讯
- tcp_port:TCP 端口。
- 返回值:一个可以操作串口的对象,其本质是一个 TCP 客户端。详情可查看:串口通讯
停止工具RS485通讯
def endBoardRs485(comm: SerialCommunication) -> bool- 功能 停止控制柜RS485通讯。
- 参数
- 返回值:成功停止主板RS485通讯。