draw_circle
Command a Universal Robot to draw a circle by specifying center position, radius, and plane orientation. The robot executes the circular motion precisely.
Instructions
命令指定IP的机器人,给定圆心位置和半径,在水平或竖直方向画一个圆 center:圆心的TCP位置 r:半径(米) coordinate:圆所在的平面。z:圆形所在的平面与基座所在平面垂直,其它:圆形所在的平面与基座所在平面平行。默认值:z。
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| ip | Yes | ||
| center | Yes | ||
| r | Yes | ||
| coordinate | No | z |
Implementation Reference
- The 'draw_circle' tool handler function. It is registered via @mcp.tool() decorator on line 685. It receives an IP, center position, radius, and coordinate plane, then generates URScript move commands (movep + movec) to draw a circle. The circle is drawn either in the Z-plane (vertical, relative to base) or another plane (horizontal). It sends the generated program to the robot via RealTimeClient.SendProgram.
@mcp.tool() def draw_circle(ip: str, center: list, r: float, coordinate="z"): """命令指定IP的机器人,给定圆心位置和半径,在水平或竖直方向画一个圆 center:圆心的TCP位置 r:半径(米) coordinate:圆所在的平面。z:圆形所在的平面与基座所在平面垂直,其它:圆形所在的平面与基座所在平面平行。默认值:z。""" try: if '连接失败' in link_check(ip): return return_msg(f"与机器人的连接已断开。") wp_1 = [center[0], center[1], center[2], center[3], center[4], center[5]] wp_2 = [center[0], center[1], center[2], center[3], center[4], center[5]] wp_3 = [center[0], center[1], center[2], center[3], center[4], center[5]] wp_4 = [center[0], center[1], center[2], center[3], center[4], center[5]] cmd = '' if coordinate.lower() == "z": wp_1[2] = wp_1[2] + r wp_2[1] = wp_2[1] + r wp_3[2] = wp_3[2] - r wp_4[1] = wp_4[1] - r else: wp_1[0] = wp_1[0] - r wp_2[1] = wp_2[1] + r wp_3[0] = wp_3[0] + r wp_4[1] = wp_4[1] - r cmd = ( f"def my_program():\n" f" movep(p{str(wp_1)}, a=1, v=0.25, r=0.025)\n" f" movec(p{str(wp_2)}, p{str(wp_3)}, a=1, v=0.25, r=0.025, mode=0)\n" f" movec(p{str(wp_4)}, p{str(wp_1)}, a=1, v=0.25, r=0.025, mode=0)\nend\nmy_program()") logger.info(f"draw_circle 发送脚本:{cmd}") robot_list[ip].robotConnector.RealTimeClient.SendProgram(cmd) time.sleep(1) return return_msg(f"命令已发送:{cmd}") except Exception as e: logger.error(f"命令发送失败: {str(e)}") return return_msg(f"命令发送失败: {str(e)}") - src/nonead_universal_robots_mcp/server.py:685-686 (registration)Registration of 'draw_circle' as an MCP tool using the @mcp.tool() decorator, which is applied to the draw_circle function defined on line 686.
@mcp.tool() def draw_circle(ip: str, center: list, r: float, coordinate="z"): - Helper function return_msg used by draw_circle to format the JSON response string.
def return_msg(txt: str): return json.dumps(txt, indent=2, ensure_ascii=False) - Helper function link_check used by draw_circle to verify the robot connection before sending commands.
def link_check(ip): """检查连接状态,若连接断开或不存在,则建立连接""" if robot_list.get(ip, "unknown") == "unknown" or not robot_list[ ip].robotConnector.RTDE.isRunning(): return connect_ur(ip) return '连接成功' - The FastMCP server instance (mcp) that provides the @mcp.tool() decorator used to register draw_circle.
mcp = FastMCP( "nUR_MCP_SERVER", description="Control UR robots through the Model Context Protocol" )