【睿尔曼-RealMan】睿尔曼复合机器人
Forrest 2023-11-18
AGV复合机器人是一种具备移动机器人和协作机械臂二者功能的新型机器人,复合机器人可配备多种传感器,如激光雷达、视觉传感器、磁导航传感器、超声测距传感器、碰撞传感器、红外传感器、IMU传感器等。根据移动底盘的不同,可实现室内外不同场景下的巡检、采摘、仓储转运等任务。
本文以睿尔曼超轻量仿人机械臂+云迹全向底盘实现集成开发一台AGV复合机器人,并将集成过程作记录。
复合机器人实物示意图:
协作机械臂
根据场景要求,选择睿尔曼超轻量仿人六轴机械臂作为复合机械臂的操作机械臂,并且在机械臂末端集成执行器。
主要参数如下:
移动底盘
根据工作场景要求,选择“云迹水滴2”作为移动底盘,实现建图、导航、避障功能,同时底盘具备自主回充功能。
主要参数如下:
接线说明:机械臂、移动底盘、NX主控通过网线连接至小型交换机,用于各模块之间通信;NX主控、交换机的供电从移动底盘分别通过1个稳压模块完成;末端执行器安装并连接至机械臂末端,与机械臂进行通信,且机械臂供电给末端执行器。
复合机器人硬件完成搭建之后进行软件的适配,机器人各模块之间采用TCP/IP的通信方式。主要实现方式为机械臂和底盘均为Socket通信的服务端,NX主控作为客户端,创建连接且分别连接机械臂与移动底盘,连接成功之后机械臂、移动底盘的控制指令与返回值接收都在NX主控完成。
移动底盘API资料
移动底盘提供一套软件API手册,其中包含机器人地图查询、状态查询、点位创建等等接口,如下所示:
/api/move?marker=target_name
// 调用移动接口,移动至代号为"target_name"的目标点
返回: { "type": "response", "command": "/api/move", "uuid": "", "status": "OK", "error_message": "", "task_id": "xxx" // (软件版本0.7.3之后新增) 32个字节的uuid,例如:436253D1D6284ACC}
/api/move/cancel
// 取消当前正在进行的移动指令
返回: { "type": "response", "command": "/api/move/cancel", "uuid": "", "status": "OK", "error_message": "" }
/api/robot_status// 获得机器人当前的全局状态
成功时返回:{ "type": "response", "command": "/api/robot_status", "uuid": "", "status": "OK", "error_message": "", "results": { "move_target": "target_name", // 移动指令指定的目标点位名称 "move_status": "running", // 移动指令的执行状态。详细解释见后边 "running_status": "running", // v0.7.12新增,移动任务的具体状态, 详细见后面解释 "move_retry_times": 3, //此次数每增加1,表示机器人进行了新一轮的路径重试;路径规划一 "charge_state": bool, //true->充电中状态。false->未充电状态。 "soft_estop_state": bool, // 通过API接口设置的软急停状态, true->急停中,false->非 "hard_estop_state": bool, // 通过硬件急停按钮设置的硬急停状态, true->急停中,fals "estop_state": bool, // hard_estop_state || sofpt_estop_state, true->急停中 "power_percent": 100, //电量百分比,单位:% "current_pose": { "x": 11.0, // 单位:m "y": 11.0, // 单位:m "theta": 0.5, //单位:rad } "current_floor": 16, "chargepile_id": "1234", // v0.9.6新增。充电状态下表示当前正在充电的充电桩ID,非充 "error_code": "00000000" // v0.7.7新增,16进制错误码,总共8个字节表示,非0表示机 }
失败时返回:{ "type": "response", "command": "/api/robot_status",
"uuid": "", "status": "UNKNOWN_ERROR", "error_message": "Can't catch current robot status" "results" }失败时请检查地图是否设置正确或者硬件是否有故障。
其他指令可以通过"WATER(⽔滴)软件API⼿册"查看,下面我们用Python做程序与移动底盘进行通信,实现控制底盘。
机械臂JSON协议资料
机械臂的控制可以直接发送JSON协议指令和使用API进行通信,如下所示:
(1)查询机械臂状态
(2)MoveJ:关节运动
(3)MoveL:直线运动
Python实现Socket通信
首先来看一下如何用Python实现Socket通信,Python 提供了两个级别访问的网络服务:
1.低级别的网络服务支持基本的 Socket,它提供了标准的 BSD Sockets API,可以访问底层操作系统Socket接口的全部方法。
2.高级别的网络服务模块 SocketServer,它提供了服务器中心类,可以简化网络服务器的开发。
本文中仅对Socket进行讲述。注意:在使用Socket创建连接时,使用完毕之后必须调用close()方法关闭连接。
撰写评论