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
| Name | Required | Description | Default |
|---|---|---|---|
| control_points | Yes | ||
| num_points | No |
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