Gait timing
Pupper trots at speeds where animals walk
Dogs travel in five steady gaits: a lateral-sequence walk, a trot, a pace that only some long-legged individuals use, and transverse and rotary gallops. They add a half-bound only in the first strides from a standstill, and no study has recorded a dog bounding or pronking; those gaits belong to small agile mammals and antelopes. Quadrupeds of every size order their gaits by speed and change them at roughly fixed Froude numbers, Fr = v²/(g·h): walk to trot near 0.3–0.6 and trot to gallop above about 2.5. Energy economy explains the first change; the second has no single cause (peak force, energy or neither, depending on the study), and stability demands on rough or narrow ground shift both. Smaller animals change gait at lower speeds and higher stride frequencies, and some 2–3 kg mammals rarely trot at all. Robots produce gaits as contact schedules of phase offsets, duty factor and frequency. Model-based controllers run six to eight of them with one tuning, while learned policies tend to settle into one default gait, which for Pupper and most small robots is the trot; the other gaits learned policies have shown on hardware came either from an energy term in the reward or from structure that spells out the timing (per-gait periods and duty factors, reference motions, symmetry losses, oscillators, a planner), and Walk These Ways is the only one that learned pace and bound from bare phase offsets and a frequency. Pupper v3's policies trot in every simulator measured, standing on diagonal pairs that land within 0.06–0.12 of a stride of each other, with duty factors mostly of 0.52–0.60 and no flight below 0.75 m/s, at commands of 0.3–0.75 m/s that equal Fr 0.05–0.33 for its 0.175 m hip height; a 3.17 kg mammal is predicted to start trotting only at 0.79 m/s, so an animal of Pupper's size would walk at every speed the robot has been asked for. Its Walk-These-Ways gait command fixes the duty factor at 0.5 and so cannot express a walk, and trained from a trotting start it kept trotting or stood still when asked to pace, bound or pronk. Nothing in the animal or robot record shows those gaits raising a stair or rough-ground ceiling, so the trot should stay Pupper's terrain gait; if the command space is widened for breadth, a duty-factor input and a walk come first, and pace, bound and pronk should be retried once from a fresh start with timing scaled to Pupper's size.
보행 영상 — 같은 속도에서 비교 (2026-11-03)
아래는 실물 촬영이 아닌 MuJoCo 시뮬레이션 영상입니다. 실제 실험에서 기록한 몸체·관절 자세와 발 접촉을 재생했습니다. 두 화면은 같은 초기 상태의 trial 0이며, 명령 시작 후 5–11초를 실시간 1배속으로 보여줍니다. 아래 버튼으로 0.25배·0.5배속 재생이 가능합니다.
Trot와 4박 walk 후보
재생 속도
왼쪽은 대각선 다리가 짝을 이루는 trot, 오른쪽은 네 발이 순서대로 닿는 walk 후보입니다. 같은 802M 학습 단계의 정책을 비교했고, 16회 실험의 평균 실제 전진 속도를 각각 0.267 / 0.268 m/s로 맞췄습니다. 영상 상단의 속도는 표시 중인 trial 0의 평균입니다. 오른쪽도 높은 지지율의 walk 목표에는 미달합니다. 세 발 이상 접촉한 시간은 31.7%이며, 목표는 60% 이상입니다. 네 박자라는 사실만으로 안정적인 walk가 입증되지는 않습니다.
모바일에서 trot만 크게 보기 · walk만 크게 보기
Trot를 유지하고 정책 대칭만 보정
재생 속도
왼쪽은 원본 mt_c, 오른쪽은 좌우 대칭 보정 정책입니다. 평균 실제 속도는 각각 0.267 / 0.268 m/s입니다. 같은 trot 안에서도 16회 평균 뒷다리 토크 좌우 차이는 +15.7% → −0.02%, 평균 회전 속도는 −1.70 → +0.001°/s로 줄었습니다. 보행 종류를 바꾸지 않고도 비대칭이 줄었다는 실험입니다. 이 6초 영상은 대표 trial의 모습이며 수치는 전체 16회 결과입니다.
모바일에서 원본만 크게 보기 · 대칭 보정만 크게 보기
영상 읽는 법: FL/FR은 앞 왼발/오른발, BL/BR은 뒤 왼발/오른발입니다. 색 막대가 채워진 구간은 바닥 접촉, 세로선은 현재 프레임입니다. 자세는 50 Hz, 접촉은 250 Hz 기록에서 20 ms 디바운스를 적용했습니다. 카메라는 위치를 따라가되 방향은 고정하여 몸체의 회전도 보이게 했습니다. 이 결과는 평지 시뮬레이션이며 실물·험지 성능을 입증하지 않습니다.
Dogs walk, trot, pace and gallop, but never bound or pronk
Gait science describes a stride by when each foot lands and how long it stays down. The duty factor (DF) is one foot's stance time as a fraction of its stride; above 0.5 the gait is a walk in Hildebrand's sense and below 0.5 a run. For symmetrical gaits, in which the two feet of a pair land half a stride apart, one phase number p names the gait: the fraction of the stride by which a forefoot lands after the hindfoot on the same side, with p = 0 or 1 a pace, 0.5 a trot, 0–0.5 a lateral sequence (LH, LF, RH, RF), 0.5–1 a diagonal sequence, and evenly spaced footfalls at p = 0.25 a single-foot (Hildebrand 1968; Hildebrand 1980). Asymmetrical gaits (the gallops, half-bound, bound and pronk) need each pair's contact interval and lead, the leading foot being the second of a pair to land, plus the lag between the pairs. Forefeet that lead on the same side as the hindfeet make a transverse gallop, on the opposite side a rotary one, and a flight is gathered (legs under the body) or extended (spine extended, legs reaching fore and aft) (Hildebrand 1977). The Froude number makes speeds comparable across sizes, but studies measure h as hip height, leg length, withers or shoulder height, so cross-study Froude numbers are approximate.
Laboratory data give the repertoire below. Touchdown phases are fractions of a stride after the left hind foot, converted from the lags measured on five 28 kg Malinois over 0.4–10 m/s (486 steady sequences) and from mongrel and Labrador data; duty factors at given speeds and stride frequencies (speed divided by stride length) are computed from the Malinois regressions; gallops are written for a left lead.
| Gait | LF, RH, RF land after LH | Duty factor | Support and flight | Where dogs use it |
|---|---|---|---|---|
| Lateral-sequence walk | 0.15–0.20, 0.50, 0.65–0.70 | 0.59–0.68 | two or three feet, never airborne | up to 0.93–1.21 m/s in mongrels; 0.8 Hz at 0.5 m/s to 1.6 Hz at 1.5 m/s |
| Pace | 0.04, 0.50, 0.54 | 0.71 at 1 m/s, 0.51 at 2 m/s, 0.39 at 3 m/s | same-side pairs; two flights per stride at speed | some long-legged individuals (3 of 5 Malinois), at the fast walk or slow run; 1.6–2.2 Hz at 1–3 m/s |
| Trot | 0.50, 0.50, 0.00 | 0.55 at 1.5 m/s, 0.49 at 2 m/s, 0.31 at 5 m/s | diagonal pairs; two flights once DF < 0.5 | every dog, widest speed range: 1.2–3.1 m/s in mongrels, preferred 1.8–2.7 m/s; 1.6 Hz at 1.5 m/s to 2.6 Hz at 5 m/s |
| Transverse gallop | 0.46, 0.80, 0.17 | 0.43 at 3 m/s, 0.28 at 6 m/s | a gathered flight; an extended one only irregularly | the slower gallop, entered from anywhere in the trot's range; 2.1–2.7 Hz at 3–6 m/s |
| Rotary gallop | 0.63–0.65, 0.15–0.18, 0.42–0.47 | 0.31 at 4 m/s, 0.19 at 10 m/s | gathered and extended flights, each up to about 0.05 s | top speed, 8.4–10.2 m/s in ordinary dogs and to 19 m/s in greyhounds; about 3 Hz at 9–10 m/s |
| Half-bound | hind pair together, forefeet in sequence | stances of 117–285 ms | — | only the first strides from a standstill, about 3.6 m/s over the first 2 m |
| Bound; pronk | fore pair and hind pair each together; all four together | — | — | never recorded in a dog |
The walk, pace, trot and gallop rows come from Maes et al. 2008, with mongrel walk timing and speeds from Blaszczyk & Dobrzecka 1989 and Blaszczyk 2001, Labrador and ridgeback walks from Griffin, Main & Farley 2004, top speeds from Walter & Carrier 2007 and Hudson, Corr & Wilson 2012, and the half-bound from Walter & Carrier 2009; the conversions are in dog_gait_catalogue.md.
The walk of laboratory dogs is lateral-sequence (the Malinois used no other): each forefoot lands 0.15–0.20 of a stride after the hindfoot on its side, the dog stands on two or three feet at a time, and it is never airborne (Maes et al. 2008; Blaszczyk & Dobrzecka 1989). Dogs walk as two out-of-phase bipeds, fore and hind quarters each vaulting over a stiff leg and recovering up to 70 % of the mechanical energy; because the forelimbs trail by only 15 % of the stride and carry 63 % of the weight, the centre of mass rises and falls twice per stride (Griffin, Main & Farley 2004). Build moves the walk along the phase axis: long-legged breeds walk near lateral couplets (a Great Dane at gait formula 66-13, meaning hind DF 66 % and p = 13 %), short-legged breeds near the single-foot (a Basset Hound at 69-25), and long-legged dogs carrying loads adopt the short-legged timing, which is a little more stable (Hildebrand 1968). The amble, single-foot, rack and running walk are the same lateral-sequence footfalls spread evenly; Hildebrand groups them with the horseman's slow gait and rack, and his only dog example is a German shepherd that single-footed under a load that would have bounced at a pace or trot (Hildebrand 1980). Kennel clubs call a relaxed transitional gait in which the legs on each side move "almost, but not quite, as a pair" an amble (AKC Glossary), but no laboratory dog study reports one, so no measured phase or duty factor exists for a dog's amble.
The trot is the dog's standard running gait. Diagonal pairs land together (Malinois p = 0.50 ± 0.04), the duty factor falls through 0.5 near 2 m/s, and above that the trot gains two flights per stride, the kennel clubs' flying or suspension trot (Maes et al. 2008; AKC Glossary). Below that speed one diagonal pair lands just before the other lifts off, and mongrels carrying an extra 2 kg used a very slow trot that alternates two- and four-foot support (Blaszczyk & Dobrzecka 1989). Trot timing does not differ between long- and short-legged breeds (Hildebrand 1968), and greyhounds and Labradors trot in a dynamically similar way once size is normalised (Bertram et al. 2000). Long legs create one problem: the hind foot can strike the forefoot on its side, so many dogs crab, turning the body slightly off the line of travel, and some pace instead (Hildebrand 1980). The pace moves both legs of a side together (Malinois p ≈ 0.04, a Bloodhound at formula 47-1) and appears only in certain long-legged individuals, "usually at the fast walk or slow run"; no short-legged dog was seen to pace, while three of five Malinois did (Hildebrand 1968; Maes et al. 2008). At the same speed a pacing Malinois takes shorter, quicker strides than a trotting one, 1.88 against 1.62 Hz at 1.5 m/s by the stride-length fits of Maes et al. 2008.
Dogs gallop in two lead patterns. The canter, a horseman's word for a slow, collected gallop, is three-beat: one hind foot, then the other hind foot together with its diagonal forefoot, then the last forefoot, which is how mongrels ran their normal transverse gallop (Hildebrand 1977; Blaszczyk & Dobrzecka 1989). Dogs use the transverse gallop at lower galloping speeds (Walter & Carrier 2007), mostly with the gathered flight alone, the extended one appearing only irregularly; Hildebrand reads this as smaller cursors saving energy below top speed (Maes et al. 2008; Hildebrand 1980). In the rotary gallop the lead switches sides between the pairs and a second, extended flight appears; each flight grows to about 0.05 s near 10 m/s, and contacts shrink to 71–75 ms at 9.2 m/s, a duty factor of about 0.22 (Maes et al. 2008; Walter & Carrier 2007). Greyhounds gallop rotary from 9.9 to 19 m/s; their gathered flight stays constant while the extended one lengthens with speed, the back flexing in the first and extending in the second (Hudson, Corr & Wilson 2012). Galloping mammals use both leads, the inside forefoot leading in a turn (Hildebrand 1977). Every one of seven dogs of 7–35 kg, a Shih Tzu among them, half-bounded, but only in the first strides of a standing-start acceleration (Walter & Carrier 2009). No dog in these studies bounded or pronked: Hildebrand's 22 dog gallop records show only transverse and rotary sequences, the bound belongs to small mammals such as weasels, and the pronk "is not the usual gait of any mammal" but is used by jumping mice, maras and at least 15 genera of artiodactyls (Hildebrand 1977; Maes et al. 2008). The trunk underlies the asymmetrical gaits: sagittal back flexion lets the hind feet of a rotary gallop land further forward, and across species the number of suspension phases rises with back flexibility (Maes et al. 2008). Korean equestrian usage names the walk 평보, the trot 속보, the pace 측대보, the canter 구보 and the gallop 습보 (KRA equine health seminar); no Korean term was found for the amble, half-bound, bound or pronk.
Gaits change at nearly fixed Froude numbers, for a different reason at each switch
Alexander and Jayes's dynamic-similarity hypothesis holds that animals of different size move alike, with equal phases, duty factors, relative stride lengths and relative forces, at equal Froude numbers; they found it tenable for cursorial mammals and noted that most mammals above 5 kg are of that type (Alexander & Jayes 1983, abstract; Donelan & Kram 2000). Most animals change gait at Fr 0.4–0.6, and most quadrupeds switch from trotting to galloping above Fr 2.5 (Hutchinson et al. 2006). The cleanest test is nine horses of 90–720 kg: their walk–trot speed rose from 1.6 to 2.3 m/s with size while the Froude number stayed near 0.35 (miniatures 0.37, Arabians 0.30, draft horses 0.37), below the 0.5 of the human walk–run change (Griffin et al. 2004). Mongrel data show the same sequence, though without the leg lengths needed to put their transitions on a Froude scale. Mongrels of 7–24 kg changed from walk to trot at 0.8–1.2 m/s within one stride per diagonal pair, the diagonal phase difference dropping from 0.31 ± 0.02 to 0.02 ± 0.03, settled into a preferred trot at 1.8–2.7 m/s that scaled with hind-limb length (r = 0.83), and broke into a gallop anywhere in the trot's range, most often at 1.5–2.6 m/s, keeping one diagonal pair synchronous while the other split (Blaszczyk & Dobrzecka 1989; Blaszczyk 2001). On a treadmill the switch shows hysteresis: walk-to-trot transitions came at 1.95 times the speed of trot-to-walk ones (Wilshin et al. 2017, Biol Cybern). In the Malinois the duty factor crosses 0.5 at about 2 m/s (Fr ≈ 0.7 with the 0.61 m withers height), and the trot is the one symmetrical gait that overlaps gallop speeds, up to about 4 m/s (Maes et al. 2008); an optimisation model with dog parameters places the walk–trot change at √Fr ≤ 0.7, almost exactly at the Malinois' slowest self-selected trot (Polet & Bertram 2019).
The walk–trot switch is energetic. Walking is an inverted pendulum that trades kinetic for potential energy and recovers up to 70 % of the mechanical energy, trotting replaces it with an elastic bounce, and galloping mixes the two (Cavagna, Heglund & Taylor 1977). The pendulum fails as the centripetal acceleration v²/L approaches g, which is why Fr is the natural measure, and the horses switched inside a band only 0.28 m/s wide that matched the speed at which walking and trotting cost the same metabolic energy: 1.63 against 1.50 m/s in miniatures, 1.91 against 1.87 m/s in Arabians, 2.27 against 2.16 m/s in draft horses (Griffin et al. 2004). Within each gait the preferred speed sits near the point of greatest economy (Baudinette 1991). The trot–gallop switch has no single cause. Horses switched at a speed where galloping cost more than trotting, and with added weights they switched at a lower speed but the same critical peak force, a force trigger (Farley & Taylor 1991); on a 10 % incline, where peak forces should not change, their maximum trotting speed instead fell to the energetically optimal transition speed (Wickler et al. 2003); and degus loaded with 20 % of body mass kept the same transition speed, supporting neither account (Iriarte-Díaz et al. 2006).
Optimisation models reproduce the low end of the sequence but not the top. A planar two-mass model with a rigid trunk and massless legs, minimising limb work over more than 8000 random starts, found a four-beat walk at low speed and a two-beat trot at intermediate speed; no gallop was ever globally optimal (at one high speed a gallop cost 3 % more than the trot), bounds, half-bounds and pronks never were, and the authors name spinal compliance as the missing ingredient (Polet & Bertram 2019). A planar robot quadruped with damped series-elastic actuators and realistic torque and speed limits gave the same order, four-beat walk then trot, with gallop and trot nearly tied at high speed; damping losses and negative actuator work, not collisions, drove the transitions (Xi, Yesilevskiy & Remy 2016). The two gallops differ in which pair starts redirecting the body upward, the hind limbs in the horse's transverse gallop and the forelimbs in the cheetah's rotary one (Bertram & Gutmann 2009). For a rigid-trunk machine the models give no energetic reason to gallop, bound or pronk at moderate speed, and both put a four-beat walk, not a trot, at the slowest speeds.
Stability enters in two senses that pull in opposite directions. Static stability favours many feet down: across 346 gait cycles from 45 species, mammalian walking timing approximates the timing that minimises time on only two feet (Cartmill, Lemelin & Schmitt 2002). Longitudinal quasi-static stability instead rates trot-like diagonal timing higher, and dogs walking through long grass about 15 times rougher than a sports pitch (54.8 against 4.2 mm) shifted their walk 0.53–0.55 rad toward the trot on an axis running from single-foot (−π/2) to trot (0), at unchanged speed and without completing a transition (Wilshin et al. 2017, J Exp Biol). Other conditions pushed dogs toward slower symmetrical gaits: in darkness they switched at once from galloping to walking and trotting, which allow precise foot placement (Blaszczyk & Dobrzecka 1989, abstract), and loaded or tired dogs chose a slow trot or a walk, the gallop appearing mostly in the first, most motivated runs of a session (Blaszczyk & Dobrzecka 1989).
A 3 kg mammal walks below about 0.8 m/s and slows further on difficult ground
Body size moves every boundary. Across 16 species from 30 g mice to horses, the equivalent speeds of each gait scale with about the 0.2 power of body mass and the stride frequencies at those speeds with about the −0.15 power, so smaller animals start trotting and switch to galloping at lower speeds and higher frequencies (Heglund & Taylor 1988; Heglund, Taylor & McMahon 1974); at 1 m/s a horse walks, a small dog trots and a mouse gallops (Donelan & Kram 1997). Evaluated at Pupper's 3.17 kg model mass, Heglund and Taylor's fits give the speeds and stride frequencies of a mammal that size (pupper_froude_output.txt):
| Equivalent speed | Fit (Mb in kg) | Speed at 3.17 kg | Stride frequency at 3.17 kg |
|---|---|---|---|
| Minimum trot | 0.593·Mb^0.249 m/s; 2.42·Mb^−0.091 Hz | 0.79 m/s | 2.18 Hz |
| Preferred trot | 1.09·Mb^0.222; 3.35·Mb^−0.130 | 1.41 m/s | 2.88 Hz |
| Trot–gallop transition | 1.54·Mb^0.216; 4.19·Mb^−0.150 | 1.98 m/s | 3.52 Hz |
| Preferred gallop | 2.78·Mb^0.176; 4.44·Mb^−0.156 | 3.41 m/s | 3.71 Hz |
| Maximum sustained gallop | 3.71·Mb^0.176; 4.70·Mb^−0.162 | 4.55 m/s | 3.90 Hz |
The animals measured near that mass agree: a 3.5 kg suni trotted at 1.15–1.74 m/s, a 4.35 kg dik-dik at 0.99–2.01 m/s and a 3.89 kg dog at 1.39–2.68 m/s, galloping from 2.84 m/s, so none of them trotted below about 1 m/s (Heglund & Taylor 1988). Within a trot, stride frequency rises about 1.55 times from the slowest trot to the transition; within a gallop it rises only about 10 % for a doubling of speed, so gallops gain speed through stride length. No walking allometry exists, because the small animals on the treadmill ran forward and rode the belt back instead of walking steadily (Heglund & Taylor 1988).
Small animals also use different gaits. They run crouched, which Biewener links to larger changes of momentum when accelerating or turning, while large animals run upright, which lowers muscle forces but limits manoeuvrability; the duty factor at the trot–gallop transition stays the same at every size (Biewener 1983; Biewener 1989). Below about 4 kg the half-bound and bound join the repertoire: Hildebrand's lightest weight class holds weasels and squirrels that half-bound and bound and tree shrews that half-bound, while dogs of 17–65 kg show only transverse and rotary gallops (Hildebrand 1977), and when small therian mammals change to these in-phase gaits, sagittal flexion of the lumbar spine supplies half of the hind step length (Fischer et al. 2002). Some generalists skip the trot: striped skunks of 2.0–3.3 kg walked at 0.16–0.92 m/s and "seldom trot", breaking straight into a slow transverse gallop at 1.61–2.56 m/s, and ferrets of 1.5–2.5 kg preferred slow transverse gallops at 1.28–1.61 m/s (van de Graaff et al. 1982). Cats walk at 0.28–1.11 m/s, become hard to classify between walk and trot at 0.97–1.11 m/s, trot to about 2.2 m/s overground and change to a gallop near 2.5 m/s on a treadmill (Afelt & Kasicki 1975; Wisleder, Zernicke & Smith 1990); their walk puts the forefoot about 0.30 of a stride behind the hindfoot (estimated from published gait diagrams), nearer the single-foot than a large dog's 0.15–0.20 (Maes et al. 2008), and on a treadmill they pace, lengthening the stride to keep the duty factor high and avoiding collisions between hind and fore feet (Blaszczyk & Loeb 1993). Short-legged dogs, the Chihuahua included, walk with single-foot timing, never pace and trot like large dogs (Hildebrand 1968); no walk–trot transition has been measured in a dog under 7 kg, and dynamic similarity is itself weaker below 5 kg, where fewer mammals are cursorial (Alexander & Jayes 1983, abstract).
Difficult ground changes speed and duty factor more than gait. On inclines animals slow down and raise duty factor, and on declines animals under about 1–10 kg shorten their strides while larger ones lengthen them (Birn-Jeffery & Higham 2014); horses on a 10 % incline switched from trot to gallop at lower speeds (Wickler et al. 2003), and dogs trotting on a 15° grade pushed with every limb going up and braked with every limb going down (Lee 2011). On a 15 cm-wide runway raised 1.5 m, 4.4 kg cats kept their lateral walk and slowed to 0.21–0.72 m/s, while 28 kg dogs sped up to 1.54–4.19 m/s, used canter-like coordination in about a third of 134 sequences and mostly avoided flight, which appeared in 24.6 % of sequences and lasted 4.7 % of the cycle (Gálvez-López, Maes & Abourachid 2011); rats on thin poles likewise kept lateral-sequence gaits on crouched limbs (Schmidt & Fischer 2010). Stairs have been studied only with dogs led at a walk, which shows larger hip, stifle and tarsal excursions than level walking or a ramp but nothing about spontaneous gait choice (Durant, Millis & Headrick 2011; Millard, Headrick & Millis 2010). No study found shows an animal switching to a pace, bound or pronk to cross small obstacles. Pupper's 2–6 cm steps are 0.11–0.33 of its hip height, 1.2–3.7 times the relative roughness of the dogs' rough field and comparable to stairs that no gait study has let an animal cross freely (gait_choice_science.md).
Planners switch gaits with one tuning; learned policies need the timing spelled out or energy priced
In model-based control a gait is a contact schedule laid over a gait-agnostic stabiliser. MIT's open convex-MPC code defines trot, bound, pronk, pace, gallop and two walks as four phase offsets and one stance duration on a ten-segment cycle, with the same 0.06 m swing height and the same gains for every gait; trot and pace stand for half the cycle, bound, pronk and gallop for 0.4 of it, and its "walking2" is a trot standing for 0.7 (Cheetah-Software). With that structure Mini Cheetah (about 9 kg) ran six gaits with one set of gains and weights, trotted to 3.7 m/s (Fr 4.65) on a treadmill and ran outdoors above 1 m/s in every gait (Kim et al. 2019), and Cheetah 3 used one tuning for standing, trotting, a flying trot, pronking, bounding, pacing, a three-legged gait and a 3D gallop up to 3 m/s (Di Carlo et al. 2018). On a Unitree A1 a Froude-scheduled library (static walk at duty 0.8 and period 1.0 s, walking trot at 0.6 and 0.5 s, trot at 0.5 and 0.4 s, flying trot at 0.4 and 0.3 s) made 9 of 10 hardware transitions when the change was timed by Froude number, against 0 of 10 for hard switching and 2 of 10 for linear interpolation (Humphreys et al. 2023). Two lessons carry over to learning: libraries change duty factor and period with the gait, not only the offsets, and the planner's horizon absorbs the flight and pitching of bounds and pronks, which a clock-conditioned policy must instead learn gait by gait.
Learned controllers have put other gaits on hardware in two ways, by spelling out the timing or by pricing energy so that a gait emerges:
| Robot | Gaits shown on hardware | What produced the gaits | Source |
|---|---|---|---|
| Unitree Go1 | trot, pace, bound, pronk, switched live | three phase offsets and a 1.5–4 Hz frequency; duty fixed at 0.5 | Margolis & Agrawal 2022 |
| Black Panther, 9 kg | walk, trot, pace, bound | per-gait period and duty (bound 3.3 Hz and 0.4, walk 1.7 Hz and 0.75) | Shao et al. 2022 |
| Laikago | dog pace, dog trot | retargeted dog motion capture | Peng et al. 2020 |
| Unitree Go2, 15 kg | trot, bound, half-bound, gallop at 0.8 m/s | velocity-dependent period and duty, symmetry losses | Ding et al. 2025 |
| Unitree A1 | trot, run, amble, limp, pronk, bound, hop | scheduler contact references in the observation | Humphreys & Zhou 2024 |
| ANYmal C | trot, crawl, pace | latent space learned from separate gait skills | Mitchell et al. 2024 |
| Unitree A1 | walk, trot, pronk-like "bounce" | energy penalty, one policy per target speed | Fu et al. 2021 |
| Unitree A1 | walk, trot, flying trot | learned gait parameters over an MPC | Yang et al. 2021 |
| Unitree Go1 | four-beat walk, two-beat walk, trot, flying trot | energy term in the reward | Liang et al. 2024 |
| Unitree A1 | trot to pronk over gaps | oscillators; crossing gaps | Shafiee et al. 2024 |
| Minitaur, 5 kg | gallop | learned from scratch with an energy penalty | Tan et al. 2018 |
| Oscillex 3, 2 kg | walk, trot, canter-like gait, gallop | one oscillator frequency with load feedback | Owaki & Ishiguro 2017 |
Walk These Ways (WTW) is the design the Shappy command copies and the only entry that learned four gaits from offsets and frequency alone. Its 50 Hz Go1 policy takes offsets θ = (0.5, 0, 0) for the trot, (0, 0.5, 0) for the bound, (0, 0, 0.5) for the pace and (0, 0, 0) for the pronk among eight behaviour inputs, and switched all four on hardware while the frequency alternated between 2 and 4 Hz; the paper reports that trot and pronk "are easier to learn and tend to dominate pacing and bounding early in training" and gives no per-gait hardware success rates (Margolis & Agrawal 2022). The other routes report why the trot is the easy basin. Shao's pace stood about 50 % longer than planned because balancing on two same-side legs is hard, and its bound pitched most and tracked velocity worst, with contact-schedule similarity of 0.94 for the walk, 0.95 for the trot, 0.78 for the pace and 0.87 for the bound (Shao et al. 2022); a simulated bound slipped phase when its feet struck the ground (Kim, Son & Lee 2021); hopping bipeds "stutter rather than hop with their feet together" until a symmetry penalty is added (Siekmann et al. 2021); and multi-speed training collapsed "to only two modes: walking and trotting" (Fu et al. 2021). Diagonal support keeps roll and pitch moments small through every stance, so the trot needs the least active balance of the two-beat gaits, but the default of an unshaped policy is still setup-specific: without an energy term Fu's A1 policies tapped at high frequency and Liang's Go1 bounced at every speed (Liang et al. 2024). Once gaits exist, switching is easy: Shao's policy went from trot to bound in about 1.3 s in simulation, Gaitor passed through intermediate gaits absent from its training data, and Shafiee's trot turned into a pronk at a gap without any command (Shao et al. 2022; Mitchell et al. 2024; Shafiee et al. 2024).
The energy-shaped results matter most for Pupper because they put gaits on Froude numbers. Fu's A1 walked at Fr 0.059, trotted at 0.316 and bounced at 1.110 (h ≈ 0.27 m), a sequence its authors place next to sheep (Fu et al. 2021); Yang's A1 walked below 0.9 m/s and trotted to 1.8 m/s, and a gallop forced on it was 30 % less efficient than its flying trot by the paper's energy model (Yang et al. 2021); Liang's Go1 walked four-beat to 0.4 m/s and two-beat to 1.1 m/s before trotting (Liang et al. 2024). Transferred at equal Froude number to Pupper's 0.18 m stance height, Fu's walk, trot and bounce fall at 0.32, 0.75 and 1.40 m/s, Yang's walk–trot boundary at 0.74 m/s and Liang's boundaries at 0.33, 0.90 and 1.39 m/s (taking a 0.27 m hip height for the Go1), so energy-optimal robots would walk over most of Pupper's commanded range (robot_gaits.md). The transfer assumes dynamic similarity, which a robot whose legs carry 52.5 % of its mass need not obey. Hardware energy by gait at matched speed is rare: a 2 kg oscillator robot whose trot and gallop were each the most efficient gait in their Froude range (Owaki & Ishiguro 2017) and a Minitaur whose learned trot and gallop drew 23 % and 35 % less power than handcrafted ones at equal speed (Tan et al. 2018) were the only cases found.
What robots deploy is the trot. Spot's SDK calls its trot the most dependable gait, labels its jog and hop as demonstration gaits and states that "Stairs are only supported in trot gaits" (Spot SDK); Unitree's Go2 SDK exposes named modes such as ClassicWalk, TrotRun, StaticWalk, EconomicGait and FreeBound rather than a gait parameter (unitree_sdk2). Stanford Doggo (4.8 kg) produced walk, trot, bound and pronk from open-loop sinusoids but used a trot "for stability at high speeds" (Kau et al. 2019), and the original Stanford Pupper controller runs a trot with four-foot overlap phases, read from its configuration as a duty factor of 0.70 at 2 Hz (StanfordQuadruped Config.py). The evidence that gait choice helps on terrain is narrow. In WTW's simulated test on blocks up to 16 cm the trot and pace survived longest (0.88 and 0.87 of the episode, against 0.82 for pronk and bound and 0.83 for a policy without gait inputs), and on hardware the Go1 climbed stairs and curbs by raising its footswing height, not by changing gait (Margolis & Agrawal 2022). A pronk paid off at gaps, where forced walk, trot and bound couplings crossed 48, 13 and 25 % of gaps in simulation against 100 % for the learned trot-to-pronk switch (Shafiee et al. 2024); pronk and bound helped recovery on loose timber (Humphreys & Zhou 2024); and ANYmal's gain on sandy slopes above 15° came from crawling on its knees, a change of contact points rather than of gait (Weibel et al. 2023). No learned pace, bound or pronk on a robot of Pupper's size was found in the literature.
Pupper's policies trot at the speeds and cadence of a walking animal
Every learned walking policy measured trots: the walk policy (own3_h1, stair-trained), the terrain policy (mt_c, multi-terrain), the commands policy (bh_rhm1b, behaviour commands as a residual on the terrain policy), Stanford's flat and climbing policies, and an earlier flat policy of the official network size (flat_official_1b). Each trots in every setting it was run in: plain MuJoCo, the engine of the robot's ROS 2 simulator; standalone MJX loops on MuJoCo 3.15 and 3.17; runs with training's sensor noise, latencies and domain randomisation; and the project's own MJX evaluation rollouts (pupper_gait_mapping.md; footfalls_tables.md). The left fore follows the left hind by 0.43–0.53 of a stride, diagonal partners land within 0.06 of a stride of each other in MuJoCo and within 0.12 in MJX, mean duty factors are 0.52–0.60, the robot stands on exactly two feet 65–94 % of the time (in MuJoCo, lateral, fore or hind pairs carry it at most 1.1 % of the time; the rest are diagonal pairs), and it is never airborne at 0.3–0.5 m/s. In Hildebrand's gait formula, hind duty and same-side forefoot lag in percent, the walk and terrain policies have first figures of 51–56 and second figures of 44–52 (the walk policy at 0.5 m/s in MuJoCo is 52-48), against 66-13 for a walking Great Dane, 69-25 for a walking Basset Hound and 45-55 for a trotting Bloodhound: a walking gait's duty factor with a trot's timing (computed from the footfall tables and mjx_rollout_footfalls_output.txt). In the MJX rollouts the forefoot of each diagonal pair lands first in 14 of 15 policy-speed cells, by 9–65 ms, and in MuJoCo the walk policy's forefoot leads by 7–23 ms, so its footfall order is LH, LF, RH, RF in all 97 strides at 0.3 m/s: the lateral-sequence diagonal-couplets trot that Hildebrand found in some dogs. The terrain policy swaps to the hind-first order at 0.75 m/s in MuJoCo. Two runs depart from the pattern: the official-size flat policy becomes a running trot with 20.5 % flight at 0.75 m/s in MuJoCo, and Stanford's climbing policy shuffles at 0.3 m/s with 29.5 % of the time on four feet.
| Policy, command | Simulator | Speed (m/s) | Fr | Stride frequency (Hz) | f·√(h/g) | Stride / h | Hind duty | LF lag | Time on two feet |
|---|---|---|---|---|---|---|---|---|---|
| walk, 0.3 m/s | MuJoCo | 0.241 | 0.034 | 1.90 | 0.25 | 0.73 | 0.54 | 0.50 | 0.85 |
| walk, 0.5 m/s | MuJoCo | 0.436 | 0.111 | 2.10 | 0.28 | 1.19 | 0.52 | 0.48 | 0.88 |
| walk, 0.75 m/s | MuJoCo | 0.560 | 0.183 | 2.19 | 0.29 | 1.46 | 0.51 | 0.50 | 0.93 |
| terrain, 0.5 m/s | MuJoCo | 0.428 | 0.107 | 2.15 | 0.29 | 1.14 | 0.53 | 0.51 | 0.92 |
| walk, 0.5 m/s | MJX rollouts | 0.387 | 0.087 | 1.60 | 0.21 | 1.39 | 0.54 | 0.44 | 0.80 |
| terrain, 0.5 m/s | MJX rollouts | 0.398 | 0.092 | 1.70 | 0.23 | 1.34 | 0.54 | 0.50 | 0.85 |
| commands, 4 Hz trot, 0.5 m/s | MuJoCo | 0.403 | 0.095 | 4.00 | 0.53 | 0.58 | 0.50 | 0.50 | 0.95 |
Values are from footfalls_tables.md and pupper_froude_output.txt, with h = 0.175 m; MuJoCo rows are means of 6 trials and MJX rows of 50 trials with training's randomisation. The commands policy's default walk equals the terrain policy's to the printed digit, because its residual adds exactly zero there.
Cadence is the one property that depends on the simulator. In MuJoCo and in a standalone MJX loop the policies step at 1.90–2.32 Hz; in the project's MJX evaluation rollouts, the source of the project's "1.6–1.75 Hz" figure, the same policies step at 1.47–1.86 Hz with longer strides (pupper_gait_mapping.md). The difference lies in the rhythm itself, the walk policy's front-right hip pitch oscillating at 1.60 Hz over 1.13 rad in the rollouts against 2.10 Hz over 0.84 rad in MuJoCo with identical stance foot heights, and it survives changes of solver, engine version, noise, randomisation, float32 evaluation, joint friction, the lane-keeping operator and the contact definition (reconcile_checks_output.txt). Its cause, somewhere in the evaluation harness, is unresolved. Under randomisation stride frequency follows the drawn PD stiffness (r = +0.82 and +0.85 for the walk policy at 0.5 and 0.75 m/s, +0.78 for the terrain policy at 0.75 m/s), so the real robot's cadence cannot be predicted to better than about 25 %, while the trot itself is the robust prediction (footfalls_tables.md).
On the animal relations these are walking speeds. The commands of 0.3–0.75 m/s are Fr 0.05–0.33 at the 0.175 m walking hip height, and the measured speeds Fr 0.03–0.30, below the Fr 0.4–0.6 band (0.83–1.02 m/s for Pupper) and below the 0.79 m/s minimum trotting speed predicted for 3.17 kg, which itself sits at Fr 0.36 (pupper_froude_output.txt). An animal at these Froude numbers would also stand longer on each foot: Alexander and Jayes's duty-factor fits, as quoted by Basu et al., predict 0.79 to 0.61 for the forelimbs and 0.89 to 0.64 for the hindlimbs over 0.3–0.75 m/s, against Pupper's 0.52–0.60 (Basu et al. 2019; gait_choice_science.md). The cadence, by contrast, is in a walking animal's range. Scaling the Malinois' walking stride-length fit (0.497 + 0.299·u m) to Pupper at the same Froude numbers, with dog speed u = √(Fr·g·0.61 m) and frequency multiplied by √(0.61/0.175) = 1.87, gives 1.3–2.4 Hz over the measured speeds, and the policies' 2.10–2.15 Hz at the 0.5 m/s command in MuJoCo is within 6 % of the scaled dog's 2.03–2.05 Hz (Maes et al. 2008; computed). Where the robot departs from the dog is in how it gains speed: its cadence rises 15–20 % from the slowest to the fastest command where the scaled walking dog's rises 65–80 %, so Pupper speeds up almost entirely through stride length (12.7 to 25.5 cm for the walk policy in MuJoCo). Relative stride matches Alexander's λ/h = 2.3·Fr^0.3 in MuJoCo (1.19 measured and predicted at 0.5 m/s) but runs 25–29 % long in the MJX rollouts, a relation checked only through secondary sources (alexander_stride_check_output.txt). The gait has precedents on both sides: dogs carrying loads used a very slow trot that alternates two- and four-foot support (Blaszczyk & Dobrzecka 1989), and robot libraries call the same pattern a walking trot, at duty 0.6 and period 0.5 s for Fr up to 0.15 on the A1 (Humphreys et al. 2023).
The commanded 4 Hz trot is the one behaviour well outside the animal envelope. Its dimensionless frequency f·√(h/g) is 0.534 against 0.20–0.31 for the default walks, and 4 Hz exceeds every equivalent-gait frequency predicted for a 3.17 kg mammal, including the 3.90 Hz of its maximum sustained gallop at 4.5 m/s; Pupper reaches it at 0.26–0.56 m/s with strides 43–58 % as long as the animal relation predicts, a short, fast stutter rather than a scaled-down gallop (pupper_gait_mapping.md). It costs on edges. At 4 Hz the commands policy crossed 3 cm stairs in 30 and 29 of 30 trials with ramped and vertical risers, but 4 cm stairs in only 1 and 3 and a 5 cm curb in 13 and 4. In the robot's ROS 2 simulator it crossed 3 cm stairs in only about half its runs, taking 23–43 s against 6–9 s for the default walk; with that simulator's contacts, collision shapes, backlash and latency set as in training it crossed in 5 of 6 runs in 4.3–7.3 s, and the contacts and backlash together cause the stall (BEHAVIORS.md).
The gait command cannot express a walk and never left the trot
The behaviour command reproduces WTW closely. Three offsets θ1–θ3 and a frequency drive one clock; the offsets reach the legs as FR = θ2, FL = θ1 + θ2 + θ3, BR = θ1 and BL = θ3, the same assignment as WTW's code; the named gaits are trot (0.5, 0, 0), pace (0, 0, 0.5), bound (0, 0.5, 0) and pronk (0, 0, 0); and every leg stands for the first half of its cycle (DUTY = 0.5) with WTW's 0.07-cycle smoothing (behaviors.py; WTW legged_robot.py). WTW's released configuration also pins the duty at 0.5 and rounds every phase to 0 or 0.5 (WTW train.py), so its gait space is, in the paper's words, "all two-beat quadrupedal contact patterns" (Margolis & Agrawal 2022). The offset map can produce the footfall order of every gait discussed above, the canter, both gallops and the half-bound included (gait_offsets_check_output.txt). It cannot produce a walk: with four evenly spaced footfalls and a duty of 0.5, exactly two feet are commanded down at every instant, a single-foot at the walk–run boundary, whereas a walk needs three-foot phases and a duty above 0.5. The project's gait metric is binary as well, scoring each leg pair as in phase or half a cycle apart, so it cannot score a quarter-cycle lag (eval_behavior.py).
Trained with all four gaits, the policy never left the trot. The first behaviour run (bh_a), with the trot in 42.5 % of command segments and pace, bound and pronk in 17.5 % each, kept trotting after 902 M steps whenever pace, bound or pronk was commanded: gait-pair agreement 0.34–0.35, the trot's own score against those targets, clock agreement 0.50, the level of chance, and all 30 trials crossing the flat lane at 1.69–1.72 steps per second; its gait penalty fell from −0.474 to −0.320 per step over 852 M steps without any non-trot gait appearing (BEHAVIORS.md). Quadrupling the gait weight (bh_g) replaced "ignore the command and trot" with "stop": under pace and bound commands the robot took no steps and passed 0 of 30 trials, and its pronk score of 0.91 came from standing on four planted feet. The arithmetic explains the stop, since a mismatched gait cost about 2.0 per step while a robot standing under a 0.5 m/s command kept 1.85 of the 2.8 tracking reward and the per-step reward was clipped at zero; the swing-height term added a second gait penalty, three quarters of its 18–21 cm² per step under a pace command coming from feet planted during their commanded swing (BEHAVIORS.md). From the follow-up run bh_t onward only the trot was commanded, and frequency became the one gait axis that works, about 4.0 Hz at a 4 Hz command in every later policy. The deployed commands policy steps at exactly 2.50, 3.00 and 4.00 Hz when told to, but given the pace, bound or pronk offsets at 1.75 or 3 Hz it stands still with all four feet down, torso at 0.163–0.164 m (footfalls_tables.md). Its delta encoding feeds the network θ minus the trot's offsets, which was zero throughout its trot-only training, so the weights on those inputs never received a gradient and standing still is a safe but uninformative answer (pupper_gait_mapping.md).
Why the Shappy runs failed where WTW succeeded is untested, but the differences are specific. WTW found the pronk as easy to learn as the trot, and Pupper produced no pronk either, which points to the setup rather than to the difficulty of the gaits. The Shappy runs started from a trotting policy with zero weights on the new inputs, and the working hypothesis in BEHAVIORS.md is that the trot is a local optimum because states between a trot and a pace are less stable than either; whether WTW trained from scratch was not established. The commands policy adds a residual network to the frozen terrain policy, so any other gait would have to be produced as a correction that cancels a trot: the architecture that preserved the terrain skill also anchors the gait (an inference, not a measurement). Every later repair of the recipe, from the multiplicative reward form to the residual network and the frozen normaliser, was made with the trot-only command set, so pace, bound and pronk have been tried only under the first-generation reward. The timing is also scaled for a larger robot. By dynamic similarity, taking a 0.27–0.30 m hip height for the Go1, WTW's 1.5–4 Hz corresponds to roughly 1.8–5.2 Hz on Pupper, and Shao's 3.3 Hz bound on 0.39 m legs to about 5 Hz, with a duty of 0.4, so Pupper's 4 Hz cap sits below the bound and pronk frequencies those libraries would use at its size; a 5 Hz stride also leaves only 10 policy steps at 50 Hz, where WTW's Go1 at 4 Hz had 12.5 (robot_gaits.md).
The position that follows has four parts. First, keep the trot as Pupper's terrain gait and stop counting pace, bound and pronk as missing terrain skills: no animal study shows a gait switch to cross small steps, WTW's best block survivors were trot and pace, Spot climbs stairs only at the trot, and Pupper's walk policy already crosses 3 cm stairs in 97 of 100 trials on average (91–100 over 20 evaluations) and 4 cm stairs in 79 (69–86) (entries.yaml); gaps are the one terrain where a pronk earns its place, and Pupper's courses have none. Second, if breadth of commands is the goal, make a walk the first new gait, because walking is what animals of Pupper's size do at 0.3–0.75 m/s and what energy-shaped robots chose at Pupper-equivalent speeds. It needs a duty input wired through the stance target, the swing-height target and the gait penalty; a gait-table entry, where θ = (0.5, 0.34, 0) with a duty near 0.65 reproduces the dog's walk (LF, RH and RF landing 0.16, 0.50 and 0.66 of a stride after LH, since a foot touches down when the advancing clock reaches minus its offset; gait_offsets_check_output.txt); the same input in the default test, the delta encoding, the parameter widening and the robot controller's behaviour patch; and a metric that scores quarter-cycle lags (pupper_gait_mapping.md). If the walk is followed and the default walk keeps its terrain results, it becomes a command; if it is followed only on flat ground, it is a flat-ground mode; if the policy keeps trotting even with a duty input, the trot-anchored start is the likelier barrier and the third test decides. Third, retry pace, bound and pronk once on flat ground, with the gait terms on from the first step and a start from the flat policy or from scratch, against the same recipe started from the trot: if only the fresh start learns them, the warm start was the barrier; if neither does, Pupper needs what every other hardware result supplied, namely per-gait period and duty scaled to its size (bound and pronk near 5 Hz at a duty of 0.4), a reference motion, symmetry losses or per-gait experts distilled into one policy. Fourth, measure the real robot before tuning cadence: high-speed video at 240 frames per second (4 ms per frame, under 1 % of a stride at Pupper's cadences) gives footfall timing directly, and an inline current sensor on the battery lead, which the stock power board lacks, would give energy per gait at matched speed, one of very few such hardware data sets (energy_research_ideas.md).
Conclusion
Pupper's trot is better read as a robot convention than as a learning failure. Robots default to the trot, from Spot, which calls it its most dependable gait, to the original Stanford Pupper controller, which trots at Fr ≤ 0.10 with a duty factor of 0.70, a choice made for stability, as Doggo's authors state, since diagonal support keeps roll and pitch moments small through every stance. Pupper's policies reached that gait on their own, at a cadence inside the range a walking animal of its size would use, and differ from the animal in footfall timing, in duty factor and in raising speed by stride length rather than cadence. The biology explains the difference without condemning it: animals walk below Fr ≈ 0.35 because walking is cheaper there, as the horse measurements show, and Pupper's reward never prices energy. Whether a walk would also be cheaper for 3 N·m quasi-direct-drive motors on a 3 kg body whose legs carry half its mass is an open, measurable question; transferred by Froude number, the energy-shaped robot results put Pupper's walk–trot boundary near 0.7–0.9 m/s, above most of its commanded range.
The gait command's record says more about the command and its training start than about what Pupper's body can do. Its gait space excludes the gait biology assigns to Pupper's speeds while including two, the bound and the pronk, that dogs never use and that rigid-trunk optimisation never finds optimal, and its non-trot gaits were requested in the Go1's frequency range rather than one scaled to Pupper, only from a trotting start and never under the reward and architecture fixes that made the trot's commands work. Two implications follow for the project's goal of broad command coverage on the way to a locomotion foundation model (MULTI_TERRAIN.md): the axis missing from the command space is duty factor, not more two-beat gaits, and nothing measured so far says whether Pupper's 3 N·m motors can bound or pronk at all. For terrain, the lever with a record is foot clearance within the trot; gait choice has none at the step heights Shappy cares about.
Source notes, scripts and their outputs: notes/research_notes/Dog gaits and quadruped robots/ in the Shappy repository.