Skip to main content
Glama

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

  • MCP tool handler for 'generate_bezier_path'. Converts input control points to list format, delegates Bezier curve generation to AdvancedTrajectoryPlanner, converts output back to dict format, and returns JSON.
    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)}")
  • Static method in BezierCurveGenerator class that implements the core Bezier curve point generation by sampling parameter t from 0 to 1 and computing weighted sum using binomial coefficients (Bernstein basis). Relies on calculate_bezier_point helper.
    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
  • Helper function that computes a single point on the Bezier curve using the de Casteljau/Bernstein polynomial formula for position components (x,y,z). Used by generate_bezier_curve.
    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

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