Skip to content

Conversation

jccalvojackson
Copy link

@jccalvojackson jccalvojackson commented Jun 16, 2025

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.

@brainwavecoder9
Copy link
Contributor

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

@jccalvojackson jccalvojackson force-pushed the fix/load_calibration_if_it_exists branch from aefbd91 to a7bbdc0 Compare June 17, 2025 07:20
@jccalvojackson
Copy link
Author

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 jccalvojackson force-pushed the fix/load_calibration_if_it_exists branch from a7bbdc0 to 4c802b0 Compare June 23, 2025 08:39
@jccalvojackson jccalvojackson force-pushed the fix/load_calibration_if_it_exists branch from 4c802b0 to 8a61a1d Compare July 2, 2025 13:57
@CarolinePascal
Copy link
Collaborator

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 CarolinePascal added bug Something isn’t working correctly robots Issues concerning robots HW interfaces teleoperators Everything related to teleoperators labels Jul 25, 2025
@jccalvojackson
Copy link
Author

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
Copy link
Author

addressed by #1528

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn’t working correctly robots Issues concerning robots HW interfaces teleoperators Everything related to teleoperators
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants