-Do you ever modify the x/y/z or pan/tilt/roll directly in another part of your code? (outside of the c_move/c_rotate functions)
Ok a possible solution to your problem that will allow you to keep your code that calculates climbing up/down slopes smoothly...
Take the calculations from your "my.z = blablabla;" but instead of assigning it directly to my.z do something like this:
z_difference = my.z-(blablabla);
c_move(me,nullvector,vector(0,0,-z_difference),FLAGS);
That should give the same result you had before but it now considers collisions.
hope this helped!