lerobot icon indicating copy to clipboard operation
lerobot copied to clipboard

Loads calibration file if it exists

Open jccalvojackson opened this issue 5 months ago • 2 comments

What this does

In this hackathon a problem arised when lending each other's arms. Say I have my calibrated arm and lend it to a friend. Since he doesn't have my calibration files (or doesn't put them in the right place 🙃) he will do a new calibration. When I get back my arm, even though I have calibration files which I would like to use by default, lerobot triggers recalibration. This is because the definition of calibrated is whether the values in the bus match those in the file. Hence, from this definition, calibrate should also be to just write to the bus the current values in the file if available.

So, I propose the following change

  def calibrate(self) -> None:
      ...interactive calibration logic

to

  def calibrate(self) -> None:
     if self.calibration: # loaded from local calibration file
        self.bus.write_calibration(self.calibrate)
        return
    ...interactive calibration logic

Alternative

I see there is a fair amount of repetition among the robots and teleoperators that use a bus. I'm all in favor of being explicit rather than to have less code but also less clarity. Another option would have been to have some BusMixin or something.

How it was tested

Added above change and my arm used the loaded file instead of triggering interactive calibration

How to checkout & try? (for the reviewer)

Change some value on the calibration file and then connect to the robot. Instead of prompting to recalibrate, if should just write to the bus the new value.

jccalvojackson avatar Jun 16 '25 17:06 jccalvojackson

Hi @jccalvojackson, I agree :)

Although this may be a PR that the team would like to integrate as-is, a few of us have also been talking about possibly greater changes. Would you like to be a part of those discussions?

Ref #1145

brainwavecoder9 avatar Jun 16 '25 20:06 brainwavecoder9

Hi @jccalvojackson, I agree :)

Although this may be a PR that the team would like to integrate as-is, a few of us have also been talking about possibly greater changes. Would you like to be a part of those discussions?

Ref #1145

Happy to participate in that discussion, I would love to see a different way of handling configurations. However, I do think this issue is slightly unrelated because as of now this logic would hold irrespective of how this calibration attribute was passed into the robot/teleoperator.

jccalvojackson avatar Jun 17 '25 07:06 jccalvojackson

Hi @jccalvojackson,

Thanks for the PR and for signaling this issue ! I believe the problem you encountered was resolved in #1528. Could you confirm it indeed solves the calibration issue on your side ? ;)

Best,

Caroline.

CarolinePascal avatar Jul 25 '25 12:07 CarolinePascal

Hi @jccalvojackson,

Thanks for the PR and for signaling this issue ! I believe the problem you encountered was resolved in #1528. Could you confirm it indeed solves the calibration issue on your side ? ;)

Best,

Caroline.

Can't check now, but yeah, is the same idea

jccalvojackson avatar Jul 25 '25 13:07 jccalvojackson

addressed by https://github.com/huggingface/lerobot/pull/1528

jccalvojackson avatar Jul 25 '25 13:07 jccalvojackson