Skip to main content
Glama
nonead

nUR MCP Server

by nonead

generate_bezier_path

Generate smooth Bezier curve paths for robot motion planning by specifying control points and desired point density.

Instructions

生成贝塞尔曲线路径

参数:
- control_points: 控制点列表,格式为[{"x": 0, "y": 0, "z": 0, "rx": 0, "ry": 0, "rz": 0}, ...]
- num_points: 生成的路径点数量

返回:
- 路径点列表

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
control_pointsYes
num_pointsNo

Implementation Reference

  • The main MCP tool handler for 'generate_bezier_path'. Converts 6D control points from dicts to lists, calls AdvancedTrajectoryPlanner.generate_bezier_curve, converts back to dicts and wraps in return_msg.
    @mcp.tool()
    def generate_bezier_path(control_points: list, num_points: int = 50):
        """
        生成贝塞尔曲线路径
        
        参数:
        - control_points: 控制点列表,格式为[{"x": 0, "y": 0, "z": 0, "rx": 0, "ry": 0, "rz": 0}, ...]
        - num_points: 生成的路径点数量
        
        返回:
        - 路径点列表
        """
        try:
            if advanced_trajectory_planner is None:
                return return_msg("高级轨迹规划器未初始化")
            
            # 转换控制点格式
            points = [
                [p["x"], p["y"], p["z"], p["rx"], p["ry"], p["rz"]]
                for p in control_points
            ]
            
            # 生成贝塞尔曲线
            path = advanced_trajectory_planner.generate_bezier_curve(
                control_points=points,
                num_points=num_points
            )
            
            # 转换回字典格式
            result_path = []
            for point in path:
                result_path.append({
                    "x": point[0],
                    "y": point[1],
                    "z": point[2],
                    "rx": point[3],
                    "ry": point[4],
                    "rz": point[5]
                })
            
            return return_msg({"path": result_path})
        except Exception as e:
            logger.error(f"生成贝塞尔路径失败: {str(e)}")
            return return_msg(f"生成贝塞尔路径失败: {str(e)}")
  • Input/output schema defined by type annotations (control_points: list of dicts with x,y,z,rx,ry,rz; num_points: int=50) and docstring describing parameters and return (path: list of points).
    def generate_bezier_path(control_points: list, num_points: int = 50):
        """
        生成贝塞尔曲线路径
        
        参数:
        - control_points: 控制点列表,格式为[{"x": 0, "y": 0, "z": 0, "rx": 0, "ry": 0, "rz": 0}, ...]
        - num_points: 生成的路径点数量
        
        返回:
        - 路径点列表
        """
  • Tool registration via @mcp.tool() decorator on the handler function, which auto-registers with name 'generate_bezier_path' based on function name.
    @mcp.tool()
  • Initializes the global advanced_trajectory_planner instance (AdvancedTrajectoryPlanner()) called by the tool handler. Invoked in main().
    def initialize_extended_modules():
        """初始化所有扩展模块"""
        global multi_robot_coordinator, advanced_trajectory_planner
        global advanced_data_recorder, advanced_data_analyzer
    
        try:
            # 初始化多机器人协调器
            multi_robot_coordinator = AdvancedMultiRobotCoordinator()
            logger.info("高级多机器人协调器初始化成功")
    
            # 初始化高级轨迹规划器
            advanced_trajectory_planner = AdvancedTrajectoryPlanner()
            logger.info("高级轨迹规划器初始化成功")
    
            # 初始化高级数据记录器
            advanced_data_recorder = AdvancedDataRecorder()
            logger.info("高级数据记录器初始化成功")
    
            # 获取数据分析器实例(单例)
            advanced_data_analyzer = get_data_analyzer()
            logger.info("高级数据分析器初始化成功")
    
            return True
        except Exception as e:
            logger.error(f"初始化扩展模块失败: {str(e)}")
            return False
  • Core helper implementing Bezier curve generation via static method generate_bezier_curve, using calculate_bezier_point (Bernstein basis). Called internally by AdvancedTrajectoryPlanner (likely delegated). Handles position only (3D).
    class BezierCurveGenerator:
        """贝塞尔曲线生成器"""
        
        @staticmethod
        def calculate_bezier_point(t: float, points: List[List[float]]) -> List[float]:
            """
            计算贝塞尔曲线上的点
            
            Args:
                t: 参数 (0-1)
                points: 控制点列表
                
            Returns:
                List[float]: 曲线上的点 [x, y, z]
            """
            n = len(points) - 1
            result = [0.0, 0.0, 0.0]
            
            for i in range(n + 1):
                binomial = math.comb(n, i)
                weight = binomial * (t ** i) * ((1 - t) ** (n - i))
                
                result[0] += weight * points[i][0]
                result[1] += weight * points[i][1]
                result[2] += weight * points[i][2]
            
            return result
        
        @staticmethod
        def generate_bezier_curve(control_points: List[List[float]], 
                                 num_points: int = 100) -> List[List[float]]:
            """
            生成贝塞尔曲线
            
            Args:
                control_points: 控制点列表
                num_points: 生成的点数量
                
            Returns:
                List[List[float]]: 曲线上的点列表
            """
            curve_points = []
            for i in range(num_points):
                t = i / (num_points - 1) if num_points > 1 else 0.0
                point = BezierCurveGenerator.calculate_bezier_point(t, control_points)
                curve_points.append(point)
            
            return curve_points

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/nonead/nUR-MCP-SERVER'

If you have feedback or need assistance with the MCP directory API, please join our Discord server