pybullet


Continuity

Procedural Terrain Generation in PyBullet

enter image description here

The focus throughout October was on developing a modular terrain generation system within the PyBullet simulation environment. The objective was to build a procedural framework capable of generating diverse terrain types - mountain ranges, valleys, craters, plains, and rocky surfaces - with enough control to vary scale, resolution, and density parameters. Initial prototypes used heightmaps based on Perlin noise and Gaussian distributions to approximate elevation profiles. These methods enabled controllable roughness and large-scale features, with post-processing filters used to either smooth or exaggerate sharpness. To simulate realistic planetary surfaces (e.g. lunar and martian conditions), additional logic was added to introduce crater depressions and scattered rock formations. These could be toggled or adjusted parametrically to study how different environments impact robot behaviour and locomotion strategies. The terrain generator was structured as a standalone Python module, allowing batch generation of terrains with predefined seeds for reproducibility. Each generated terrain could be loaded directly into PyBullet, with optional physics materials for friction, restitution, and compliance tuning.


Transitioning from Blender to PyBullet

enter image description here Watch: Continuity Rover - Landing / balancing behaviour

The primary objective this month was to initiate the transition from purely visual and rigid-body modelling in Blender to physics-based simulation in PyBullet. While Blender had served effectively for early kinematic studies and visualisation of Continuity’s geometry, it lacked the dynamic capabilities required to simulate forces, joint torques, and leg-ground interactions in a controlled environment. PyBullet, though less user-friendly from a graphical standpoint, offered a real-time physics engine suitable for iterative testing.