[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CWSTCHCD9RVTA252C3C0XB":3,"skill-same:01M6CWSTCHCD9RVTA252C3C0XB":76},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":17,"publishedAt":25,"linkOnly":26,"markdownContent":27,"markdownBody":28,"frontMatter":29,"refName":32,"commitSha":33,"skillDirectory":5,"forksCount":34,"repositoryHtmlUrl":35,"repositoryHomepageUrl":6,"ownerHtmlUrl":36,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":37,"install":38,"resources":51},"01M6CWSTCHCD9RVTA252C3C0XB","control-systems",null,"Control systems analysis and design","ffsshhttiikk\u002Fopencode-agents-skills","ffsshhttiikk","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F226346827?v=4","01M6CWD9RR3Y7VRQX3MXYC8FYH","01M6CWD9WVPYAZW0J82G1VKGHY",3,"MIT","https:\u002F\u002Fgithub.com\u002Fffsshhttiikk\u002Fopencode-agents-skills\u002Fblob\u002Fmain\u002Fcontrol-systems\u002FSKILL.md",[],[18,19,20,21,22,23,24],"control systems","design","automation","engineering","analysis","opencode","specialists","2026-11-10 10:12:30",false,"---\nname: control-systems\ndescription: Control systems analysis and design\nlicense: MIT\ncompatibility: opencode\nmetadata:\n  audience: engineers, automation specialists, students\n  category: engineering\n---\n\n## What I do\n\n- Design feedback control systems and controllers\n- Analyze system stability and performance\n- Implement PID and advanced control strategies\n- Model dynamic systems and create simulations\n- Tune control parameters for optimal performance\n\n## When to use me\n\n- When designing automated control systems\n- When analyzing stability of feedback systems\n- When implementing PID controllers\n- When tuning control system parameters\n- When modeling dynamic systems\n\n## Key Concepts\n\n### Control System Basics\n\n```python\nimport numpy as np\nimport control as ct\n\n# Transfer function representation\ns = ct.TransferFunction.s\n\n# First order system\nG1 = 1 \u002F (s + 1)\n\n# Second order system\nG2 = 1 \u002F (s**2 + 2*0.1*s + 1)\n\n# Closed loop transfer function\ndef closed_loop(G, K):\n    \"\"\"Calculate closed loop TF\"\"\"\n    return (G * K) \u002F (1 + G * K)\n\n# System response\nt = np.linspace(0, 10, 100)\nt, y = ct.step_response(G1, t)\n```\n\n### PID Controller\n\n```python\nclass PIDController:\n    def __init__(self, Kp=1, Ki=0, Kd=0):\n        self.Kp = Kp  # Proportional gain\n        self.Ki = Ki  # Integral gain  \n        self.Kd = Kd  # Derivative gain\n        self.prev_error = 0\n        self.integral = 0\n        self.setpoint = 0\n    \n    def compute(self, measurement, dt):\n        \"\"\"Compute PID output\"\"\"\n        error = self.setpoint - measurement\n        \n        # Proportional term\n        P = self.Kp * error\n        \n        # Integral term\n        self.integral += error * dt\n        I = self.Ki * self.integral\n        \n        # Derivative term\n        derivative = (error - self.prev_error) \u002F dt\n        D = self.Kd * derivative\n        \n        self.prev_error = error\n        \n        return P + I + D\n    \n    def tune_ziegler_nichols(self, Ku, Tu):\n        \"\"\"Ziegler-Nichols tuning\"\"\"\n        self.Kp = 0.6 * Ku\n        self.Ki = 2 * self.Kp \u002F Tu\n        self.Kd = self.Kp * Tu \u002F 8\n```\n\n### Stability Analysis\n\n```python\n# Routh-Hurwitz criterion\ndef routh_hurwitz(coeffs):\n    \"\"\"Determine stability from characteristic equation\"\"\"\n    n = len(coeffs)\n    if n \u003C 2:\n        return \"Insufficient order\"\n    \n    # Check coefficients\n    if any(c \u003C= 0 for c in coeffs[:-1]):\n        return \"Unstable - negative coefficients\"\n    \n    # For 2nd order: a1 > 0, a0 > 0\n    # For 3rd order: a1*a2 > a0*a3\n    \n    return \"Potentially stable - verify\"\n\n# Bode stability margin\ndef stability_margins(G):\n    \"\"\"Calculate gain and phase margin\"\"\"\n    mag, phase, omega = ct.bode(G, Plot=False)\n    \n    # Phase crossover (phase = -180)\n    phase_cross_idx = np.where(phase \u003C= -180)[0]\n    if len(phase_cross_idx) > 0:\n        gm = 1 \u002F mag[phase_cross_idx[0]]\n    else:\n        gm = np.inf\n    \n    # Gain crossover (magnitude = 1)\n    gain_cross_idx = np.where(mag >= 1)[0][0]\n    pm = 180 + phase[gain_cross_idx]\n    \n    return {\"gain_margin\": gm, \"phase_margin\": pm}\n```\n\n### State Space Control\n\n```python\nclass StateSpaceController:\n    def __init__(self, A, B, C, D):\n        self.A = A\n        self.B = B\n        self.C = C\n        self.D = D\n        self.x = np.zeros((A.shape[0], 1))\n    \n    def pole_placement(self, desired_poles):\n        \"\"\"Place closed loop poles\"\"\"\n        # Calculate gain matrix K for desired poles\n        # K = place(A, B, poles)\n        pass\n    \n    def observer_design(self, desired_poles):\n        \"\"\"Design state observer\"\"\"\n        # L = place(A', C', poles)'\n        pass\n    \n    def update(self, u, dt):\n        \"\"\"State update\"\"\"\n        self.x = self.x + dt * (self.A @ self.x + self.B @ u)\n        return self.C @ self.x\n```\n\n### Performance Specifications\n\n| Specification | Definition | Typical Value |\n|----------------|------------|---------------|\n| Rise Time | 10%-90% of final value | \u003C 2 sec |\n| Settling Time | Within 2% of final | \u003C 5 sec |\n| Overshoot | Peak above final value | \u003C 10% |\n| Steady-State Error | Final value error | \u003C 1% |\n| Bandwidth | -3dB frequency | Design dependent |\n\n### Control Strategies\n\n```python\n# Feedforward control\nclass FeedforwardController:\n    def __init__(self, G_inv):\n        self.G_inv = G_inv  # Inverse of plant model\n    \n    def compute(self, disturbance, setpoint):\n        \"\"\"Feedforward + feedback\"\"\"\n        u_ff = self.G_inv * setpoint\n        u_fb = self.feedback_controller.compute()\n        return u_ff + u_fb\n\n# Cascade control\nclass CascadeControl:\n    \"\"\"Inner loop (fast) and outer loop (slow)\"\"\"\n    def __init__(self, inner_loop, outer_loop):\n        self.inner = inner_loop\n        self.outer = outer_loop\n```\n","## What I do\n\n- Design feedback control systems and controllers\n- Analyze system stability and performance\n- Implement PID and advanced control strategies\n- Model dynamic systems and create simulations\n- Tune control parameters for optimal performance\n\n## When to use me\n\n- When designing automated control systems\n- When analyzing stability of feedback systems\n- When implementing PID controllers\n- When tuning control system parameters\n- When modeling dynamic systems\n\n## Key Concepts\n\n### Control System Basics\n\n```python\nimport numpy as np\nimport control as ct\n\n# Transfer function representation\ns = ct.TransferFunction.s\n\n# First order system\nG1 = 1 \u002F (s + 1)\n\n# Second order system\nG2 = 1 \u002F (s**2 + 2*0.1*s + 1)\n\n# Closed loop transfer function\ndef closed_loop(G, K):\n    \"\"\"Calculate closed loop TF\"\"\"\n    return (G * K) \u002F (1 + G * K)\n\n# System response\nt = np.linspace(0, 10, 100)\nt, y = ct.step_response(G1, t)\n```\n\n### PID Controller\n\n```python\nclass PIDController:\n    def __init__(self, Kp=1, Ki=0, Kd=0):\n        self.Kp = Kp  # Proportional gain\n        self.Ki = Ki  # Integral gain  \n        self.Kd = Kd  # Derivative gain\n        self.prev_error = 0\n        self.integral = 0\n        self.setpoint = 0\n    \n    def compute(self, measurement, dt):\n        \"\"\"Compute PID output\"\"\"\n        error = self.setpoint - measurement\n        \n        # Proportional term\n        P = self.Kp * error\n        \n        # Integral term\n        self.integral += error * dt\n        I = self.Ki * self.integral\n        \n        # Derivative term\n        derivative = (error - self.prev_error) \u002F dt\n        D = self.Kd * derivative\n        \n        self.prev_error = error\n        \n        return P + I + D\n    \n    def tune_ziegler_nichols(self, Ku, Tu):\n        \"\"\"Ziegler-Nichols tuning\"\"\"\n        self.Kp = 0.6 * Ku\n        self.Ki = 2 * self.Kp \u002F Tu\n        self.Kd = self.Kp * Tu \u002F 8\n```\n\n### Stability Analysis\n\n```python\n# Routh-Hurwitz criterion\ndef routh_hurwitz(coeffs):\n    \"\"\"Determine stability from characteristic equation\"\"\"\n    n = len(coeffs)\n    if n \u003C 2:\n        return \"Insufficient order\"\n    \n    # Check coefficients\n    if any(c \u003C= 0 for c in coeffs[:-1]):\n        return \"Unstable - negative coefficients\"\n    \n    # For 2nd order: a1 > 0, a0 > 0\n    # For 3rd order: a1*a2 > a0*a3\n    \n    return \"Potentially stable - verify\"\n\n# Bode stability margin\ndef stability_margins(G):\n    \"\"\"Calculate gain and phase margin\"\"\"\n    mag, phase, omega = ct.bode(G, Plot=False)\n    \n    # Phase crossover (phase = -180)\n    phase_cross_idx = np.where(phase \u003C= -180)[0]\n    if len(phase_cross_idx) > 0:\n        gm = 1 \u002F mag[phase_cross_idx[0]]\n    else:\n        gm = np.inf\n    \n    # Gain crossover (magnitude = 1)\n    gain_cross_idx = np.where(mag >= 1)[0][0]\n    pm = 180 + phase[gain_cross_idx]\n    \n    return {\"gain_margin\": gm, \"phase_margin\": pm}\n```\n\n### State Space Control\n\n```python\nclass StateSpaceController:\n    def __init__(self, A, B, C, D):\n        self.A = A\n        self.B = B\n        self.C = C\n        self.D = D\n        self.x = np.zeros((A.shape[0], 1))\n    \n    def pole_placement(self, desired_poles):\n        \"\"\"Place closed loop poles\"\"\"\n        # Calculate gain matrix K for desired poles\n        # K = place(A, B, poles)\n        pass\n    \n    def observer_design(self, desired_poles):\n        \"\"\"Design state observer\"\"\"\n        # L = place(A', C', poles)'\n        pass\n    \n    def update(self, u, dt):\n        \"\"\"State update\"\"\"\n        self.x = self.x + dt * (self.A @ self.x + self.B @ u)\n        return self.C @ self.x\n```\n\n### Performance Specifications\n\n| Specification | Definition | Typical Value |\n|----------------|------------|---------------|\n| Rise Time | 10%-90% of final value | \u003C 2 sec |\n| Settling Time | Within 2% of final | \u003C 5 sec |\n| Overshoot | Peak above final value | \u003C 10% |\n| Steady-State Error | Final value error | \u003C 1% |\n| Bandwidth | -3dB frequency | Design dependent |\n\n### Control Strategies\n\n```python\n# Feedforward control\nclass FeedforwardController:\n    def __init__(self, G_inv):\n        self.G_inv = G_inv  # Inverse of plant model\n    \n    def compute(self, disturbance, setpoint):\n        \"\"\"Feedforward + feedback\"\"\"\n        u_ff = self.G_inv * setpoint\n        u_fb = self.feedback_controller.compute()\n        return u_ff + u_fb\n\n# Cascade control\nclass CascadeControl:\n    \"\"\"Inner loop (fast) and outer loop (slow)\"\"\"\n    def __init__(self, inner_loop, outer_loop):\n        self.inner = inner_loop\n        self.outer = outer_loop\n```\n",{"name":5,"license":14,"metadata":30,"description":7,"compatibility":23},{"audience":31,"category":21},"engineers, automation specialists, students","main","5f7a3e453c98261f93d19a6a7de44ad8f7b72d41",2,"https:\u002F\u002Fgithub.com\u002Fffsshhttiikk\u002Fopencode-agents-skills","https:\u002F\u002Fgithub.com\u002Fffsshhttiikk","2026-03-01 06:55:40",{"source":8,"skillName":5,"commands":39,"prompt":49,"zipAvailable":50},[40,43,46],{"tool":41,"command":42},"npx","npx skills add ffsshhttiikk\u002Fopencode-agents-skills --skill control-systems",{"tool":44,"command":45},"bunx","bunx skills add ffsshhttiikk\u002Fopencode-agents-skills --skill control-systems",{"tool":47,"command":48},"pnpm","pnpm dlx skills add ffsshhttiikk\u002Fopencode-agents-skills --skill control-systems","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fffsshhttiikk\u002Fopencode-agents-skills\u002Fblob\u002Fmain\u002Fcontrol-systems\u002FSKILL.md",true,[52,58,64,68,72],{"path":53,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":56,"sourceHtmlUrl":57},"agents\u002Fopenai.yaml","REFERENCE","参考文档",352,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fhanhuark\u002Fmechanical-engineering-research-skill\u002Fskills\u002Fresearch-schematic-design\u002Fagents\u002Fopenai.yaml",{"path":59,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":62,"sourceHtmlUrl":63},"assets\u002Ftemplates\u002Fschematic-brief.yaml","ASSET","资产文件",892,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fhanhuark\u002Fmechanical-engineering-research-skill\u002Fskills\u002Fresearch-schematic-design\u002Fassets\u002Ftemplates\u002Fschematic-brief.yaml",{"path":65,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":66,"sourceHtmlUrl":67},"references\u002Fschematic-brief.md",1845,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fhanhuark\u002Fmechanical-engineering-research-skill\u002Fskills\u002Fresearch-schematic-design\u002Freferences\u002Fschematic-brief.md",{"path":69,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":70,"sourceHtmlUrl":71},"references\u002Fschematic-workflow.md",3155,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fhanhuark\u002Fmechanical-engineering-research-skill\u002Fskills\u002Fresearch-schematic-design\u002Freferences\u002Fschematic-workflow.md",{"path":73,"resourceType":54,"resourceTypeDesc":55,"sizeBytes":74,"sourceHtmlUrl":75},"references\u002Fscientific-visual-qa.md",1534,"https:\u002F\u002Fgithub.com\u002Fhashgraph-online\u002Fawesome-codex-plugins\u002Fblob\u002Fmain\u002Fplugins\u002Fhanhuark\u002Fmechanical-engineering-research-skill\u002Fskills\u002Fresearch-schematic-design\u002Freferences\u002Fscientific-visual-qa.md",[77,88,98,107,117,126],{"skillNo":78,"name":79,"nameZh":6,"description":80,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":81,"categories":82,"keywords":83,"publishedAt":25},"01M6CXT9TXDF79BWJTMQAPB49G","xamarin","Xamarin cross-platform development","https:\u002F\u002Fgithub.com\u002Fffsshhttiikk\u002Fopencode-agents-skills\u002Fblob\u002Fmain\u002Fxamarin\u002FSKILL.md",[],[79,84,85,86,23,87],"platform","cross-platform","mobile","development",{"skillNo":89,"name":90,"nameZh":6,"description":91,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":92,"categories":93,"keywords":94,"publishedAt":25},"01M6CXT8AD04MFYDA32VW3FKAG","wrangling","Data wrangling fundamentals","https:\u002F\u002Fgithub.com\u002Fffsshhttiikk\u002Fopencode-agents-skills\u002Fblob\u002Fmain\u002Fwrangling\u002FSKILL.md",[],[90,95,23,96,97],"data wrangling","science","data",{"skillNo":99,"name":100,"nameZh":6,"description":101,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":102,"categories":103,"keywords":104,"publishedAt":25},"01M6CXT717GCN7SRRNPBDP4508","windows","Windows operating system administration and scripting","https:\u002F\u002Fgithub.com\u002Fffsshhttiikk\u002Fopencode-agents-skills\u002Fblob\u002Fmain\u002Fwindows\u002FSKILL.md",[],[100,105,23,106],"system","scripting",{"skillNo":108,"name":109,"nameZh":6,"description":110,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":111,"categories":112,"keywords":113,"publishedAt":25},"01M6CXT54K794NMEM3XAPZZDKT","wide-column","Wide-column data model","https:\u002F\u002Fgithub.com\u002Fffsshhttiikk\u002Fopencode-agents-skills\u002Fblob\u002Fmain\u002Fwide-column\u002FSKILL.md",[],[114,115,23,116,97],"wide column","databases","model",{"skillNo":118,"name":119,"nameZh":6,"description":120,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":121,"categories":122,"keywords":123,"publishedAt":25},"01M6CXT28FMT2P4V9GZE67WA8E","wide-column-stores","Wide-column database stores","https:\u002F\u002Fgithub.com\u002Fffsshhttiikk\u002Fopencode-agents-skills\u002Fblob\u002Fmain\u002Fwide-column-stores\u002FSKILL.md",[],[124,115,23,125],"wide column stores","database",{"skillNo":127,"name":128,"nameZh":6,"description":129,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":130,"categories":131,"keywords":132,"publishedAt":25},"01M6CXT0D0M0Q4T2N7C2RX7DSN","websockets","WebSocket implementation and best practices","https:\u002F\u002Fgithub.com\u002Fffsshhttiikk\u002Fopencode-agents-skills\u002Fblob\u002Fmain\u002Fwebsockets\u002FSKILL.md",[],[128,133,134,135,23,136,137],"websocket","real-time","time","best practices","implementation"]