[Question] Terrain curriculum issue: Terrain level does not exceed 6 #4836
-
QuestionHello everyone, I have been trying to resolve an ongoing issue where the terrain level does not go above 6 when using the terrain curriculum. This problem occurs not only in my custom environment but also in the default RL demo. In Fig. 1, the black line represents the terrain level progression for "Isaac-Velocity-Rough-Anymal-D-v0" using the default parameters. The red line shows the progression when the terrain sampling range is halved. As you can see, the level converges to 6 regardless of the terrain's difficulty. Furthermore, the graph does not look like simple hard clipping; rather, it exhibits a curve similar to a PD controller's response. Fig. 1: I have reviewed the Is it the expected behavior for the terrain level to be restricted to a maximum of 6 in the terrain curriculum? Thank you in advance for your insights. Build InfoDescribe the versions that you are currently using:
|
Beta Was this translation helpful? Give feedback.
Replies: 3 comments 2 replies
-
|
Thank you for posting this. I moved your post to our Discussions for follow-up. You are not misusing the curriculum, but its current design makes mid‑level saturation a very plausible outcome—so your observation is consistent with known behaviour, even though it is not the ideal target behaviour. Practical workarounds you can try nowIf you want terrain difficulty to keep increasing beyond level 6 in your experiments, consider:
These do require editing or replacing |
Beta Was this translation helpful? Give feedback.
-
|
Hi, It is easy to prove mathematically that the long term expectation is exactly 6, under the mild assumption that the transition probability across levels is the same. If you want all robots to stay in level 9 once they reach it, simply replace the - self.terrain_levels[env_ids] = torch.where(
- self.terrain_levels[env_ids] >= self.max_terrain_level,
- torch.randint_like(self.terrain_levels[env_ids], self.max_terrain_level),
- torch.clip(self.terrain_levels[env_ids], 0),
- )
+ self.terrain_levels[env_ids] = torch.clip(self.terrain_levels[env_ids], 0, self.max_terrain_level-1) |
Beta Was this translation helpful? Give feedback.
-
|
Hi everyone, Thank you so much for all the advice. I’m going to look into these suggestions and conduct some tests. I’ll make sure to share the results with you all later. Thanks again! |
Beta Was this translation helpful? Give feedback.

Hi,
I noticed that given how the update function is implemented, all robots reaching level 9 are in the long term reassigned uniformly across levels
IsaacLab/source/isaaclab/isaaclab/terrains/terrain_importer.py
Line 325 in f4aa17f
It is easy to prove mathematically that the long term expectation is exactly 6, under the mild assumption that the transition probability across levels is the same.
If you want all robots to stay in level 9 once they reach it, simply replace the
torch.whereblock in the function with a simple clip: