Skip to content

DD023: Proprioceptive Feedback and Motor Coordination (Stretch Receptors)

  • Status: Proposed (Phase 2, after DD019)
  • Author: OpenWorm Core Team
  • Date: 2026-02-19
  • Supersedes: None
  • Related: DD001 (Neural Circuit), DD003 (Body Physics), DD019 (Touch Response — established bidirectional coupling pattern)

TL;DR

B-class motor neurons (DB1-7, VB1-11) have stretch-sensitive ion channels that detect local body curvature, providing proprioceptive feedback for stable undulatory locomotion. This feedback loop (Wen et al. 2012) complements the touch response (DD019) and likely stabilizes the locomotion wave by coupling adjacent body segments. Success: locomotion wavelength stability improves to ±10% (vs. ±15% without proprioception), and ablating stretch receptors degrades coordination by >30%.


Quick Action Reference

Question Answer
Phase Phase 2
Layer Motor Coordination — see Phase Roadmap
What does this produce? Stretch-sensitive channels on B-class motor neurons (DB, VB), proprioceptive feedback from body curvature to motor pattern, stable undulatory wave propagation
Success metric DD010 Tier 3: locomotion wavelength stability improved (±10% vs. ±15% baseline), proprioceptive ablation (disable stretch receptors) degrades coordination by >30%
Repository openworm/c302 (stretch receptor channel model) + openworm/sibernetic (body curvature readout) — issues labeled dd023
Config toggle sensory.proprioception: true / neural.stretch_receptors: true in openworm.yml
Build & test docker compose run quick-test with proprioception: true (wave propagates?), docker compose run validate (wavelength stability)
Visualize DD014 sensory/curvature/ layer — body curvature heatmap; neural/ layer — B-class motor neurons with proprioceptive input highlighted
CI gate Tier 3 wavelength validation (±10% with proprioception) blocks merge; backward compat with proprioception: false required
---

Mission Alignment

OpenWorm Mission: "Creating the world's first virtual organism."

DD023 serves this by: Proprioception (self-sensing body position) is how the nervous system knows what the body is doing. Without it, the motor pattern is open-loop (neurons fire blindly). With it, the worm adjusts motor output based on actual body curvature — closed-loop motor control. This is essential for stable, adaptive locomotion.


Goal & Success Criteria

Criterion Target DD010 Tier
Primary: Wavelength stability ±10% of baseline (improved from ±15% without proprioception) Tier 3 (blocking)
Secondary: Proprioceptive ablation effect Disabling stretch receptors degrades coordination by >30% (wider wavelength variance) Tier 3 (blocking)
Tertiary: Motor neuron stretch response B-class neuron calcium increases during local body bending (matches Wen et al. 2012 imaging) Tier 1 (non-blocking)

Before: Motor pattern is generated by command interneurons (AVA backward, AVB forward) with no feedback from body state. Wave propagation relies purely on neural connectivity, not mechanical coupling.

After: B-class motor neurons sense local body curvature via stretch-sensitive channels, adjusting their output to maintain smooth wave propagation. Proprioceptive-motor coupling stabilizes locomotion.


Deliverables

Artifact Path Format Example
Stretch receptor channel model c302/channel_models/stretch_receptor_chan.channel.nml NeuroML 2 XML Curvature-gated cation channel
B-class motor neuron templates cells/DB01Cell.cell.nml, VB01Cell.cell.nml, etc. NeuroML 2 XML Add stretch receptor channel to DD001/DD005 HH models
Body curvature readout module sibernetic/coupling/curvature_readout.py Python Computes local curvature from SPH particle positions
Extended bidirectional coupling sibernetic_c302_closedloop.py (extend DD019's script) Python Add body→motor neuron proprioceptive path
Curvature time series (viewer) OME-Zarr: sensory/curvature/, shape (n_timesteps, n_segments) OME-Zarr Per-segment curvature angle over time

Repository & Issues

Item Value
Primary repository openworm/c302 (proprioceptive circuits, stretch receptor channel model)
Secondary repository openworm/sibernetic (body mechanics, curvature readout)
Issue label dd023, proprioception
Related DDs DD001 (Neural Circuit), DD003 (Body Physics), DD002 (Muscle Model)

How to Build & Test

Getting Started (Environment Setup)

This DD builds on two repositories: the c302 neural circuit framework (DD001) for stretch receptor channel models on B-class motor neurons, and Sibernetic (DD003) for body curvature readout that feeds proprioceptive signals back to motor neurons.

If you have already completed both DD001 Getting Started and DD003 Getting Started, you are ready for the steps below.

If starting fresh, follow both setup guides first, then return here:

  1. DD001 Getting Started — clone c302, install neural circuit dependencies
  2. DD003 Getting Started — clone Sibernetic, install body physics dependencies

Path A — Docker (recommended for newcomers):

cd OpenWorm
docker compose build

This builds both the neural and body Docker stages needed for bidirectional proprioceptive coupling. Then skip to step 2 below.

Path B — Native (for development):

Complete both DD001 native setup and DD003 native setup. No additional pip installs are required beyond what DD001 and DD003 provide. Verify that the B-class motor neuron stretch receptor channel model is present:

# Stretch receptor channel (curvature-gated cation conductance)
ls c302/channel_models/stretch_receptor_chan.channel.nml
# Body curvature readout module
ls sibernetic/coupling/curvature_readout.py
# Note: both files are [TO BE CREATED] — see Deliverables table

Step-by-step

  1. Prerequisites: Neural circuit (DD001) and body physics (DD003) running in simulation stack (DD013)
  2. Enable proprioceptive feedback: Set sensory.proprioception: true in openworm.yml to activate the feedback channel between Sibernetic body curvature and B-class motor neurons
  3. Run forward locomotion: Execute simulation for 60 seconds with proprioception enabled
  4. Measure wave propagation: Body wave should show posterior-to-anterior coordination with wavelength stability ±10%
  5. Ablation control: Disable proprioceptive feedback (sensory.proprioception: false) — wave coordination should degrade by >30%
  6. Green light: Wave speed within ±15% of biological value (~0.5 Hz)
  7. Test scripts: [TO BE CREATED]

Technical Approach

Proprioceptive Feedback Model

Proprioceptive feedback is modeled as stretch-sensitive conductance in B-class motor neurons (VB1-VB11, DB1-DB7). The mechanism:

  1. Curvature readout: Body curvature from Sibernetic SPH particles is converted to local strain at each body segment via curvature_readout.py
  2. Strain-to-current transduction: Local strain is fed back to ipsilateral B-class motor neurons as a stretch-dependent current (I_stretch), creating a curvature-gated cation conductance
  3. Traveling wave generation: This coupling creates a traveling wave of motor activation without requiring a central pattern generator — bending at one segment stretches the next posterior segment, activating its motor neurons
  4. Key parameters: Stretch sensitivity gain (nS/rad), signal propagation delay (ms), segment coupling strength (dimensionless)
  5. Basis: Wen et al. 2012 proprioceptive coupling model

Code Reuse Opportunities (HIGH-IMPACT)

CE_locomotion Stretch Receptor Model

  • Repository: openworm/CE_locomotion (pushed 2026-02-18, VERY ACTIVE)
  • Authors: Dr. Erick Olivares, Prof. Randall Beer

This repo already implements proprioceptive feedback!

What It Contains:

CE_locomotion/
├── StretchReceptor.cpp/h    # Proprioceptive model (Wen et al. 2012)
├── NervousSystem.cpp         # Neural circuit
├── Muscles.cpp               # Muscle model
└── WormBody.cpp              # Body mechanics

StretchReceptor Algorithm:

  • Detects local body curvature
  • Generates stretch-dependent current on B-class motor neurons
  • Stabilizes undulatory locomotion wave

Reuse Plan:

# Test CE_locomotion
git clone https://github.com/openworm/CE_locomotion.git
cd CE_locomotion
make
./main  # Runs evolution, ~2 minutes

# Inspect StretchReceptor source
cat StretchReceptor.cpp
# Extract: How does it compute stretch? What's the current-curvature relationship?

# Port to Python/NeuroML
# Option A: Rewrite in Python for sibernetic_c302_closedloop.py
# Option B: Convert to NeuroML ComponentType (curvature-gated channel)

Contact Authors: This model is ACTIVE (2026-02-18). Reach out to Erick Olivares and Randall Beer:

  • Collaboration opportunity: Integrate their proprioceptive model into c302/Sibernetic
  • Compare approaches: CE_locomotion (C++, evolutionary fit) vs. OpenWorm (NeuroML, mechanistic)
  • Potential joint publication: "Two Approaches to Whole-Organism Neuromechanical Modeling"

Estimated Time Savings: 30-50 hours (stretch receptor model + validation already done)

CelegansNeuromechanicalGaitModulation

  • Repository: openworm/CelegansNeuromechanicalGaitModulation (pushed 2025-08-01)

Neuromechanical gait modulation model that likely incorporates proprioceptive or body-state feedback. May contain curvature-based motor control logic directly applicable to the stretch receptor implementation in this DD.

NicolettiEtAl2024_MN_IN

  • Repository: openworm/NicolettiEtAl2024_MN_IN (pushed 2025-11-04)

Motor neuron (MN) and interneuron (IN) HH models (Nicoletti et al. 2024). The B-class motor neurons (DB, VB) are the target cells for stretch receptor channels — these pre-fitted templates provide the starting point to which stretch_receptor_chan.channel.nml gets added.


Alternatives Considered

1. No Proprioceptive Feedback (Motor Pattern Only)

Rejected: Wen et al. 2012 demonstrated that B-class motor neurons have stretch-sensitive properties essential for undulatory locomotion. Ablating proprioception in real worms degrades wave propagation.

2. Simplified: Use Body Curvature Directly (No Channel Model)

Rejected: Skip the stretch receptor channel, directly modulate motor neuron excitability based on curvature. Loses biophysical interpretability (which channels mediate stretch sensing?).


Quality Criteria

  1. Locomotion stability: Wavelength variance reduces from ±15% (no proprioception) to ±10% (with proprioception).
  2. Proprioceptive ablation: Disabling stretch receptors increases wavelength variance by >30%.
  3. Stretch-response match: B-class calcium increases during local bending matches Wen et al. 2012 imaging.

Boundaries (Explicitly Out of Scope)

  1. Central pattern generator models: This DD uses proprioceptive feedback for wave propagation, not a CPG.
  2. Head movement coordination: Head oscillations and foraging movements are handled separately from body wave propagation.
  3. Omega turns and reversal initiation: Handled by DD019 command interneuron circuits (AVA/AVB/AVD).
  4. Detailed mechanotransduction channel kinetics: Uses a phenomenological stretch-sensitive conductance rather than modeling individual ion channel gating kinetics.

Context & Background

C. elegans locomotion requires coordination of 95 body wall muscle cells along the anterior-posterior axis. Unlike vertebrates, C. elegans may not use a central pattern generator; evidence suggests proprioceptive feedback drives wave propagation (Wen et al. 2012).

B-class motor neurons (VB1-VB11, DB1-DB7) are the primary forward locomotion drivers. The proprioceptive mechanism works as follows: body bending at one segment stretches the next posterior segment, activating motor neurons there, creating a self-propagating traveling wave. This means the body's mechanical state directly drives the neural pattern — a fundamentally different architecture from CPG-based locomotion in larger organisms.

The DD019 bidirectional coupling framework (body-to-neuron feedback channel) provides the infrastructure for this proprioceptive loop. DD023 extends that framework from touch-evoked responses to continuous motor coordination.


References

  1. Wen Q, Po MD, Hulme E, Chen S, Liu X, Bhatt R, et al. (2012). "Proprioceptive coupling within motor neurons drives C. elegans forward locomotion." Neuron 76:750-761. Demonstrates stretch-sensitive properties of B-class motor neurons and proprioceptive wave propagation.
  2. Fouad AD, Teng S, Mark JR, Liu A, Alvarez-Illera P, et al. (2018). "Distributed rhythm generators underlie Caenorhabditis elegans forward locomotion." eLife 7:e29913. Evidence for distributed oscillators in body segments, complementing proprioceptive coupling.
  3. Nicoletti M, et al. (2024). Motor neuron and interneuron HH models. Pre-fitted B-class motor neuron templates used as the starting point for stretch receptor channel integration.

Integration Contract

Inputs

Input Source DD Variable Format
Body curvature per segment DD003 Local curvature from SPH particle positions Computed via curvature_readout.py
B-class motor neuron models DD001 / DD005 HH cell templates NeuroML

Outputs

Output Consumer DD Variable Format
Stretch receptor current DD001 I_stretch on B-class motor neurons NeuroML state variable
Motor neuron excitability DD002 Modulates motor output → muscle activation Indirect (via DD001DD002 chain)

  • Approved by: Pending
  • Implementation Status: Proposed (Phase 2, after DD019 bidirectional coupling established)
  • Next Actions:

  • Contact CE_locomotion authors (collaboration opportunity)

  • Extract StretchReceptor algorithm
  • Port to NeuroML or Python
  • Integrate with DD019's bidirectional coupling framework