Skip to content

Conversation

@calvertdw
Copy link
Member

No description provided.

@calvertdw calvertdw force-pushed the feature/ability-hand-action branch from 1f762db to d6afb77 Compare November 15, 2025 02:20
@calvertdw calvertdw force-pushed the feature/foundation-pose-integration branch from 9dc284c to e9ada27 Compare November 15, 2025 02:32
@calvertdw calvertdw force-pushed the feature/ability-hand-action branch from d6afb77 to 64e46af Compare November 15, 2025 16:12
@calvertdw calvertdw force-pushed the feature/foundation-pose-integration branch from e9ada27 to 103107e Compare November 15, 2025 16:13
Base automatically changed from feature/ability-hand-action to develop November 15, 2025 17:59
@calvertdw calvertdw force-pushed the feature/foundation-pose-integration branch 4 times, most recently from c8498f6 to 00d91cc Compare November 20, 2025 22:21

public void pushNotification(int additionalStackTraceHeight, String text, boolean log)
{
if (log)
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In the behavior intraprocess test app I didn't want things printing twice.

for (int i = 0; i < armMultiBodyGraphic.getJoints().length; i++)
double solutionQuality = state.getSolutionQuality();
if (solutionQuality < ArmIKSolver.GOOD_QUALITY_MAX || lowQualityRenderThrottler.run(0.5))
{
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Makes the UI not look buggy for low quality solutions.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I rewrote the proximity node so it works better and is more general.

if (message.getDetectionTypeAsString().equals(YOLOv8InstantDetection.class.getSimpleName()))
type = "(YOLOv8)";
String text = "%s %s %.2f Hz Size: %d ID.%s".formatted(type,
message.getObjectClassAsString(),
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

image

{
if (ImGui.button(labels.get(grip.name())))
executeGrip = grip;
if (grip != Grip.values[5] && grip != Grip.values[7] && grip != Grip.values[Grip.values.length - 1])
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

image

ImGui.getWindowDrawList().addLine(lineStartX, offsetY, offsetX - ImGui.getFontSize(), offsetY, color, 1);
ImGui.dummy(0.0f, frameHeight);
}
}
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Uploading image.png…

case XY -> Math.hypot(vectorBToA.getX(), vectorBToA.getY());
case Z -> Math.abs(vectorBToA.getZ());
};
ImGui.text("Distance for Type: %.3f".formatted(distance));
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

image


enableWiggleOnFailureWidget.renderImGuiWidget();
if (definition.getEnableWiggleOnFailure())
timeToWiggleWidget.renderImGuiWidget();
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

image

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is a major rewrite of the concurrent action sequence execution with support for try-catch fallbacks. It is a lot more condensed and solid now.

public class LeafNodeState<D extends LeafNodeDefinition> extends BehaviorTreeNodeState<D>
{
private final CRDTStatusBoolean isNextForExecution;
private final CRDTStatusInteger concurrencyRank;
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Concurrency rank has been completely removed. It was a bad idea

private final CRDTBidirectionalFloat sufficientCumulativeJointMovement;
private final CRDTBidirectionalBoolean enableWiggleOnFailure;
private final CRDTBidirectionalFloat timeToWiggle;
private final CRDTBidirectionalFloat ultimateTimeout;
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I added as much as I could to play with the Ability hands, to try and get them to be more robust. This still needs to be tested on hardware.

float position = definition.getGoalPositions().getValueReadOnly(i);
float wiggleAmplitude = 7.0f;
float wiggleFrequency = 2.0f;
command.getGoalPositions()[i] = position + wiggleAmplitude * (float) Math.sin(wiggleFrequency * 2 * Math.PI * timer.getElapsedTime());
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hopefully we don't need the wiggle thing, but when the fingers go unresponsive, I don't know another option or if wiggling works.

}
if (rootNode.getState().getOrderedLeaves().get(i) instanceof ChestOrientationActionState chestOrientationAction)
concurrentChestOrientationAction = chestOrientationAction;
if (rootNode.getState().getOrderedLeaves().get(i) instanceof PelvisHeightOrientationActionState pelvisHeightPitchAction)
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Simpler algorithm for concurrent whole body preview. The prior impl was all that concurrency rank was used for.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also this handles more cases.

private final CRDTBidirectionalBoolean useFoundationPose;
private final CRDTBidirectionalStringList enabledYoloModels;
private final CRDTBidirectionalIntegerList ignoredYoloClassIndices;
private final CRDTBidirectionalEnumList<IsaacROSFoundationPoseObject> enabledFoundationPoseModels;
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I added a ton of potentially useful fields to the scene action node. We still need to implement the RDX and executor for some of this.


continue;
}
}
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Above I fixed major bugs. I tested this on real robot and it works perfectly now.

PROXIMITY;
PROXIMITY,
ALWAYS_FAIL,
ALWAYS_SUCCEED;
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Added always succeed and fail conditions, which are useful for testing and workarounds.

private final LLMConditionState llm;
private final ProximityConditionState proximityCheck;
private final CRDTStatusBoolean conditionMet;
private final CRDTStatusBoolean evaluatingCondition;
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Remove Luigi's hacks from when I broke my knee and couldn't review it 😆

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I put as much of the fallback specific execution logic in here as I could.

IsaacROSFoundationPoseCommunicator mustardCommunicator = foundationPose.get(IsaacROSFoundationPoseObject.MUSTARD);
mustardCommunicator.enable(true);
mustardCommunicator.addResultCallback(detection -> instantDetectionQueue.add(List.of(detection)));
}
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

FP support

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Untested spatial mapping support.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants