Skip to content

Commit 713cf19

Browse files
erhdgottlieb
andauthored
Create type equivalence between referenceframe.Input and float64s (#5391)
Co-authored-by: Dan Gottlieb <[email protected]>
1 parent 436ad41 commit 713cf19

File tree

85 files changed

+631
-906
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

85 files changed

+631
-906
lines changed

components/arm/arm.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -187,17 +187,17 @@ func CheckDesiredJointPositions(ctx context.Context, a Arm, desiredInputs []refe
187187
min := limits[i].Min
188188
currPosition := currentJointPos[i]
189189
// to make sure that val is a valid input it must either bring the joint closer inbounds or keep the joint inbounds.
190-
if currPosition.Value > limits[i].Max {
191-
max = currPosition.Value
192-
} else if currPosition.Value < limits[i].Min {
193-
min = currPosition.Value
190+
if currPosition > limits[i].Max {
191+
max = currPosition
192+
} else if currPosition < limits[i].Min {
193+
min = currPosition
194194
}
195-
if val.Value > max || val.Value < min {
195+
if val > max || val < min {
196196
return fmt.Errorf("joint %v needs to be within range [%v, %v] and cannot be moved to %v",
197197
i,
198198
utils.RadToDeg(min),
199199
utils.RadToDeg(max),
200-
utils.RadToDeg(val.Value),
200+
utils.RadToDeg(val),
201201
)
202202
}
203203
}

components/arm/client_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ func TestClient(t *testing.T) {
4444
)
4545

4646
pos1 := spatialmath.NewPoseFromPoint(r3.Vector{X: 1, Y: 2, Z: 3})
47-
jointPos1 := []referenceframe.Input{{1.}, {2.}, {3.}}
47+
jointPos1 := []referenceframe.Input{1., 2., 3.}
4848
expectedGeometries := []spatialmath.Geometry{spatialmath.NewPoint(r3.Vector{1, 2, 3}, "")}
4949
expectedMoveOptions := arm.MoveOptions{MaxVelRads: 1, MaxAccRads: 2}
5050
injectArm := &inject.Arm{}
@@ -89,7 +89,7 @@ func TestClient(t *testing.T) {
8989
}
9090

9191
pos2 := spatialmath.NewPoseFromPoint(r3.Vector{X: 4, Y: 5, Z: 6})
92-
jointPos2 := []referenceframe.Input{{4.}, {5.}, {6.}}
92+
jointPos2 := []referenceframe.Input{4., 5., 6.}
9393
injectArm2 := &inject.Arm{}
9494
injectArm2.EndPositionFunc = func(ctx context.Context, extra map[string]interface{}) (spatialmath.Pose, error) {
9595
return pos2, nil

components/arm/collectors_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,7 @@ func newArm() arm.Arm {
117117
return spatialmath.NewPoseFromPoint(r3.Vector{X: 1, Y: 2, Z: 3}), nil
118118
}
119119
a.JointPositionsFunc = func(ctx context.Context, extra map[string]interface{}) ([]referenceframe.Input, error) {
120-
return referenceframe.FloatsToInputs(referenceframe.JointPositionsToRadians(floatList)), nil
120+
return referenceframe.JointPositionsToRadians(floatList), nil
121121
}
122122
a.KinematicsFunc = func(ctx context.Context) (referenceframe.Model, error) {
123123
return nil, nil

components/arm/fake/fake.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -137,7 +137,7 @@ func (a *Arm) Reconfigure(ctx context.Context, deps resource.Dependencies, conf
137137

138138
a.mu.Lock()
139139
defer a.mu.Unlock()
140-
a.joints = referenceframe.FloatsToInputs(make([]float64, dof))
140+
a.joints = make([]referenceframe.Input, dof)
141141
a.model = model
142142

143143
return nil

components/arm/fake/fake_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ func TestJointPositions(t *testing.T) {
9494
// Round trip test for MoveToJointPositions -> JointPositions
9595
arm, err := NewArm(ctx, nil, cfg, logger)
9696
test.That(t, err, test.ShouldBeNil)
97-
samplePositions := []referenceframe.Input{{0}, {math.Pi}, {-math.Pi}, {0}, {math.Pi}, {-math.Pi}}
97+
samplePositions := []referenceframe.Input{0, math.Pi, -math.Pi, 0, math.Pi, -math.Pi}
9898
test.That(t, arm.MoveToJointPositions(ctx, samplePositions, nil), test.ShouldBeNil)
9999
positions, err := arm.JointPositions(ctx, nil)
100100
test.That(t, err, test.ShouldBeNil)

components/arm/server.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ func (s *serviceServer) GetGeometries(ctx context.Context, req *commonpb.GetGeom
180180
}
181181
jointPositionsPb := jointPbResp.GetPositions()
182182

183-
gifs, err := model.Geometries(model.InputFromProtobuf(jointPositionsPb))
183+
gifs, err := model.Geometries(jointPositionsPb.Values)
184184
if err != nil {
185185
return nil, err
186186
}

components/arm/server_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ func TestServer(t *testing.T) {
7070
}
7171
injectArm.JointPositionsFunc = func(ctx context.Context, extra map[string]interface{}) ([]referenceframe.Input, error) {
7272
extraOptions = extra
73-
return referenceframe.FloatsToInputs(positions), nil
73+
return positions, nil
7474
}
7575
injectArm.MoveToPositionFunc = func(ctx context.Context, ap spatialmath.Pose, extra map[string]interface{}) error {
7676
capArmPos = ap

components/base/kinematicbase/differentialDrive.go

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ var (
3333
// errMovementTimeout is used for when a movement call times out after no movement for some time.
3434
errMovementTimeout = errors.New("movement has timed out")
3535
// Input representation of origin.
36-
originInputs = []referenceframe.Input{{Value: 0}, {Value: 0}, {Value: 0}}
36+
originInputs = []referenceframe.Input{0, 0, 0}
3737
)
3838

3939
// wrapWithDifferentialDriveKinematics takes a wheeledBase component and adds a localizer to it
@@ -141,7 +141,7 @@ func (ddk *differentialDriveKinematics) CurrentInputs(ctx context.Context) ([]re
141141
// We should not have a problem with Gimbal lock by looking at yaw in the domain that most bases will be moving.
142142
// This could potentially be made more robust in the future, though.
143143
theta := math.Mod(pif.Pose().Orientation().EulerAngles().Yaw, 2*math.Pi)
144-
return []referenceframe.Input{{Value: pt.X}, {Value: pt.Y}, {Value: theta}}, nil
144+
return []referenceframe.Input{pt.X, pt.Y, theta}, nil
145145
}
146146

147147
func (ddk *differentialDriveKinematics) GoToInputs(ctx context.Context, desiredSteps ...[]referenceframe.Input) error {
@@ -191,7 +191,7 @@ func (ddk *differentialDriveKinematics) goToInputs(ctx context.Context, desired
191191
// when the base is within the positional threshold of the goal, exit the loop
192192
for err := cancelContext.Err(); err == nil; err = cancelContext.Err() {
193193
utils.SelectContextOrWait(ctx, 10*time.Millisecond)
194-
point := spatialmath.NewPoint(r3.Vector{X: current[0].Value, Y: current[1].Value}, "")
194+
point := spatialmath.NewPoint(r3.Vector{X: current[0], Y: current[1]}, "")
195195
col, err := validRegion.CollidesWith(point, defaultCollisionBufferMM)
196196
if err != nil {
197197
movementErr <- err
@@ -203,8 +203,8 @@ func (ddk *differentialDriveKinematics) goToInputs(ctx context.Context, desired
203203
}
204204

205205
// get to the x, y location first - note that from the base's perspective +y is forward
206-
desiredHeading := math.Atan2(desired[1].Value-current[1].Value, desired[0].Value-current[0].Value)
207-
commanded, err := ddk.issueCommand(cancelContext, current, []referenceframe.Input{desired[0], desired[1], {Value: desiredHeading}})
206+
desiredHeading := math.Atan2(desired[1]-current[1], desired[0]-current[0])
207+
commanded, err := ddk.issueCommand(cancelContext, current, []referenceframe.Input{desired[0], desired[1], desiredHeading})
208208
if err != nil {
209209
movementErr <- err
210210
return
@@ -290,7 +290,7 @@ func (ddk *differentialDriveKinematics) issueCommand(ctx context.Context, curren
290290
if ddk.Localizer == nil {
291291
ddk.mutex.Lock()
292292
defer ddk.mutex.Unlock()
293-
ddk.noLocalizerCacheInputs = []referenceframe.Input{{Value: 0}, {Value: 0}, desired[2]}
293+
ddk.noLocalizerCacheInputs = []referenceframe.Input{0, 0, desired[2]}
294294
time.Sleep(defaultNoLocalizerDelay)
295295
}
296296
return true, err
@@ -314,8 +314,8 @@ func (ddk *differentialDriveKinematics) issueCommand(ctx context.Context, curren
314314
func (ddk *differentialDriveKinematics) inputDiff(current, desired []referenceframe.Input) (float64, float64, error) {
315315
// create a goal pose in the world frame
316316
goal := spatialmath.NewPose(
317-
r3.Vector{X: desired[0].Value, Y: desired[1].Value},
318-
&spatialmath.OrientationVector{OZ: 1, Theta: desired[2].Value},
317+
r3.Vector{X: desired[0], Y: desired[1]},
318+
&spatialmath.OrientationVector{OZ: 1, Theta: desired[2]},
319319
)
320320

321321
// transform the goal pose such that it is in the base frame
@@ -336,13 +336,13 @@ func (ddk *differentialDriveKinematics) inputDiff(current, desired []referencefr
336336
// starting and ending waypoints. This capsule is used to detect whether a base leaves this region and has thus deviated
337337
// too far from its path.
338338
func (ddk *differentialDriveKinematics) newValidRegionCapsule(starting, desired []referenceframe.Input) (spatialmath.Geometry, error) {
339-
pt := r3.Vector{X: (desired[0].Value + starting[0].Value) / 2, Y: (desired[1].Value + starting[1].Value) / 2}
340-
positionErr, _, err := ddk.inputDiff(starting, []referenceframe.Input{desired[0], desired[1], {Value: 0}})
339+
pt := r3.Vector{X: (desired[0] + starting[0]) / 2, Y: (desired[1] + starting[1]) / 2}
340+
positionErr, _, err := ddk.inputDiff(starting, []referenceframe.Input{desired[0], desired[1], 0})
341341
if err != nil {
342342
return nil, err
343343
}
344344

345-
desiredHeading := math.Atan2(starting[0].Value-desired[0].Value, starting[1].Value-desired[1].Value)
345+
desiredHeading := math.Atan2(starting[0]-desired[0], starting[1]-desired[1])
346346

347347
// rotate such that y is forward direction to match the frame for movement of a base
348348
// rotate around the z-axis such that the capsule points in the direction of the end waypoint

components/base/kinematicbase/differentialDrive_test.go

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ func TestCurrentInputs(t *testing.T) {
124124
for i := 0; i < 10; i++ {
125125
input, err := ddk.CurrentInputs(ctx)
126126
test.That(t, err, test.ShouldBeNil)
127-
test.That(t, input, test.ShouldResemble, []referenceframe.Input{{Value: 0}, {Value: 0}, {Value: 0}})
127+
test.That(t, input, test.ShouldResemble, []referenceframe.Input{0, 0, 0})
128128
}
129129
})
130130
}
@@ -145,10 +145,10 @@ func TestInputDiff(t *testing.T) {
145145
test.That(t, err, test.ShouldBeNil)
146146
ddk.Localizer = motion.NewSLAMLocalizer(slam)
147147

148-
desiredInput := []referenceframe.Input{{Value: 3}, {Value: 4}, {Value: utils.DegToRad(30)}}
148+
desiredInput := []referenceframe.Input{3, 4, utils.DegToRad(30)}
149149
distErr, headingErr, err := ddk.inputDiff(make([]referenceframe.Input, 3), desiredInput)
150150
test.That(t, err, test.ShouldBeNil)
151-
test.That(t, distErr, test.ShouldAlmostEqual, r3.Vector{X: desiredInput[0].Value, Y: desiredInput[1].Value, Z: 0}.Norm())
151+
test.That(t, distErr, test.ShouldAlmostEqual, r3.Vector{X: desiredInput[0], Y: desiredInput[1], Z: 0}.Norm())
152152
test.That(t, headingErr, test.ShouldAlmostEqual, 30)
153153
}
154154

@@ -204,8 +204,8 @@ func TestNewValidRegionCapsule(t *testing.T) {
204204
ddk, err := buildTestDDK(ctx, testConfig(), true, defaultLinearVelocityMMPerSec, defaultAngularVelocityDegsPerSec, logger)
205205
test.That(t, err, test.ShouldBeNil)
206206

207-
starting := referenceframe.FloatsToInputs([]float64{400, 0, 0})
208-
desired := referenceframe.FloatsToInputs([]float64{0, 400, 0})
207+
starting := []referenceframe.Input{400, 0, 0}
208+
desired := []referenceframe.Input{0, 400, 0}
209209
c, err := ddk.newValidRegionCapsule(starting, desired)
210210
test.That(t, err, test.ShouldBeNil)
211211

components/base/kinematicbase/execution.go

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -164,14 +164,14 @@ func (ptgk *ptgBaseKinematics) GoToInputs(ctx context.Context, inputSteps ...[]r
164164
return tryStop(ctx.Err())
165165
}
166166
}
167-
inputValDiff := step.arcSegment.EndConfiguration[endDistanceAlongTrajectoryIndex].Value -
168-
step.arcSegment.EndConfiguration[startDistanceAlongTrajectoryIndex].Value
167+
inputValDiff := step.arcSegment.EndConfiguration[endDistanceAlongTrajectoryIndex] -
168+
step.arcSegment.EndConfiguration[startDistanceAlongTrajectoryIndex]
169169
elapsedPct := math.Min(1.0, timeElapsedSeconds/step.durationSeconds)
170170
currentInputs := []referenceframe.Input{
171171
step.arcSegment.StartConfiguration[ptgIndex],
172172
step.arcSegment.StartConfiguration[trajectoryAlphaWithinPTG],
173173
step.arcSegment.StartConfiguration[startDistanceAlongTrajectoryIndex],
174-
{step.arcSegment.StartConfiguration[startDistanceAlongTrajectoryIndex].Value + inputValDiff*elapsedPct},
174+
step.arcSegment.StartConfiguration[startDistanceAlongTrajectoryIndex] + inputValDiff*elapsedPct,
175175
}
176176
ptgk.inputLock.Lock()
177177
ptgk.currentState.currentInputs = currentInputs
@@ -231,12 +231,12 @@ func (ptgk *ptgBaseKinematics) trajectoryArcSteps(
231231
startPose spatialmath.Pose,
232232
inputs []referenceframe.Input,
233233
) ([]arcStep, error) {
234-
selectedPTG := int(math.Round(inputs[ptgIndex].Value))
234+
selectedPTG := int(math.Round(inputs[ptgIndex]))
235235

236236
traj, err := ptgk.ptgs[selectedPTG].Trajectory(
237-
inputs[trajectoryAlphaWithinPTG].Value,
238-
inputs[startDistanceAlongTrajectoryIndex].Value,
239-
inputs[endDistanceAlongTrajectoryIndex].Value,
237+
inputs[trajectoryAlphaWithinPTG],
238+
inputs[startDistanceAlongTrajectoryIndex],
239+
inputs[endDistanceAlongTrajectoryIndex],
240240
stepDistResolution,
241241
)
242242
if err != nil {
@@ -245,7 +245,7 @@ func (ptgk *ptgBaseKinematics) trajectoryArcSteps(
245245

246246
finalSteps := []arcStep{}
247247
timeStep := 0.
248-
curDist := inputs[startDistanceAlongTrajectoryIndex].Value
248+
curDist := inputs[startDistanceAlongTrajectoryIndex]
249249
startInputs := []referenceframe.Input{
250250
inputs[ptgIndex],
251251
inputs[trajectoryAlphaWithinPTG],
@@ -289,7 +289,7 @@ func (ptgk *ptgBaseKinematics) trajectoryArcSteps(
289289
inputs[ptgIndex],
290290
inputs[trajectoryAlphaWithinPTG],
291291
nextStep.arcSegment.StartConfiguration[startDistanceAlongTrajectoryIndex],
292-
{curDist},
292+
curDist,
293293
}
294294
nextStep.arcSegment.EndConfiguration = stepEndInputs
295295

@@ -304,8 +304,8 @@ func (ptgk *ptgBaseKinematics) trajectoryArcSteps(
304304
stepStartInputs := []referenceframe.Input{
305305
inputs[ptgIndex],
306306
inputs[trajectoryAlphaWithinPTG],
307-
{curDist},
308-
{curDist},
307+
curDist,
308+
curDist,
309309
}
310310
segment = motionplan.Segment{
311311
StartConfiguration: stepStartInputs,
@@ -328,7 +328,7 @@ func (ptgk *ptgBaseKinematics) trajectoryArcSteps(
328328
inputs[ptgIndex],
329329
inputs[trajectoryAlphaWithinPTG],
330330
nextStep.arcSegment.StartConfiguration[startDistanceAlongTrajectoryIndex],
331-
{curDist},
331+
curDist,
332332
}
333333
nextStep.arcSegment.EndConfiguration = finalInputs
334334
arcPose, err := ptgk.planningModel.Transform(finalInputs)
@@ -399,7 +399,7 @@ func (ptgk *ptgBaseKinematics) courseCorrect(
399399
// We've got a course correction solution. Swap out the relevant arcsteps.
400400
newArcSteps, err := ptgk.trajectoryArcSteps(
401401
actualPoseTracked,
402-
[]referenceframe.Input{{float64(ptgk.courseCorrectionIdx)}, solution.Solution[i], {0}, solution.Solution[i+1]},
402+
[]referenceframe.Input{float64(ptgk.courseCorrectionIdx), solution.Solution[i], 0, solution.Solution[i+1]},
403403
)
404404
if err != nil {
405405
return nil, err
@@ -422,8 +422,8 @@ func (ptgk *ptgBaseKinematics) courseCorrect(
422422
connectionPointDeepCopy := copyArcStep(connectionPoint)
423423

424424
arcOriginalLength := math.Abs(
425-
connectionPointDeepCopy.arcSegment.EndConfiguration[endDistanceAlongTrajectoryIndex].Value -
426-
connectionPointDeepCopy.arcSegment.EndConfiguration[startDistanceAlongTrajectoryIndex].Value,
425+
connectionPointDeepCopy.arcSegment.EndConfiguration[endDistanceAlongTrajectoryIndex] -
426+
connectionPointDeepCopy.arcSegment.EndConfiguration[startDistanceAlongTrajectoryIndex],
427427
)
428428

429429
// Use distances to calculate the % completion of the arc, used to update the time remaining.
@@ -444,24 +444,24 @@ func (ptgk *ptgBaseKinematics) courseCorrect(
444444
connectionPointDeepCopy.arcSegment.EndConfiguration[ptgIndex],
445445
connectionPointDeepCopy.arcSegment.EndConfiguration[trajectoryAlphaWithinPTG],
446446
connectionPointDeepCopy.arcSegment.EndConfiguration[startDistanceAlongTrajectoryIndex],
447-
{startVal},
447+
startVal,
448448
}
449449
skippedPose, err := ptgk.planningModel.Transform(skippedSegment)
450450
if err != nil {
451451
return nil, err
452452
}
453453

454-
isReverse := connectionPointDeepCopy.arcSegment.EndConfiguration[endDistanceAlongTrajectoryIndex].Value < 0
454+
isReverse := connectionPointDeepCopy.arcSegment.EndConfiguration[endDistanceAlongTrajectoryIndex] < 0
455455
if isReverse {
456-
startVal += connectionPointDeepCopy.arcSegment.EndConfiguration[endDistanceAlongTrajectoryIndex].Value
456+
startVal += connectionPointDeepCopy.arcSegment.EndConfiguration[endDistanceAlongTrajectoryIndex]
457457
}
458458

459-
connectionPointDeepCopy.arcSegment.StartConfiguration[startDistanceAlongTrajectoryIndex].Value = startVal
460-
connectionPointDeepCopy.arcSegment.StartConfiguration[endDistanceAlongTrajectoryIndex].Value = startVal
459+
connectionPointDeepCopy.arcSegment.StartConfiguration[startDistanceAlongTrajectoryIndex] = startVal
460+
connectionPointDeepCopy.arcSegment.StartConfiguration[endDistanceAlongTrajectoryIndex] = startVal
461461
if isReverse {
462-
connectionPointDeepCopy.arcSegment.EndConfiguration[endDistanceAlongTrajectoryIndex].Value = startVal
462+
connectionPointDeepCopy.arcSegment.EndConfiguration[endDistanceAlongTrajectoryIndex] = startVal
463463
} else {
464-
connectionPointDeepCopy.arcSegment.EndConfiguration[startDistanceAlongTrajectoryIndex].Value = startVal
464+
connectionPointDeepCopy.arcSegment.EndConfiguration[startDistanceAlongTrajectoryIndex] = startVal
465465
}
466466
// The start position should be where the connection tried to get to.
467467
// This needs to be the Goal, as that is the point along the original path, not the solved point, which is just somewhere near
@@ -497,11 +497,11 @@ func (ptgk *ptgBaseKinematics) getCorrectionSolution(ctx context.Context, goals
497497
for _, goal := range goals {
498498
solveMetric := motionplan.NewScaledSquaredNormMetric(goal.Goal, 50)
499499
ptgk.logger.Debug("attempting goal", goal.Goal)
500-
seed := []referenceframe.Input{{math.Pi / 2}, {ptgk.linVelocityMMPerSecond / 2}, {math.Pi / 2}, {ptgk.linVelocityMMPerSecond / 2}}
500+
seed := []referenceframe.Input{math.Pi / 2, ptgk.linVelocityMMPerSecond / 2, math.Pi / 2, ptgk.linVelocityMMPerSecond / 2}
501501
if goal.Goal.Point().X > 0 {
502-
seed[0].Value *= -1
502+
seed[0] *= -1
503503
} else {
504-
seed[2].Value *= -1
504+
seed[2] *= -1
505505
}
506506
// Attempt to use our course correction solver to solve for a new set of trajectories which will get us from our current position
507507
// to our goal point along our original trajectory.
@@ -515,7 +515,7 @@ func (ptgk *ptgBaseKinematics) getCorrectionSolution(ctx context.Context, goals
515515
}
516516
ptgk.logger.Debug("solution", solution)
517517
if solution.Score < courseCorrectionMaxScore {
518-
goal.Solution = referenceframe.FloatsToInputs(solution.Configuration)
518+
goal.Solution = solution.Configuration
519519
return goal, nil
520520
}
521521
}
@@ -531,7 +531,7 @@ func (ptgk *ptgBaseKinematics) makeCourseCorrectionGoals(
531531
currentInputs []referenceframe.Input,
532532
) []courseCorrectionGoal {
533533
goals := []courseCorrectionGoal{}
534-
currDist := currentInputs[endDistanceAlongTrajectoryIndex].Value
534+
currDist := currentInputs[endDistanceAlongTrajectoryIndex]
535535
stepsPerGoal := int((ptgk.nonzeroBaseTurningRadiusMeters*lookaheadDistMult*1000)/stepDistResolution) / nGoals
536536

537537
if stepsPerGoal < 1 {
@@ -568,7 +568,7 @@ func (ptgk *ptgBaseKinematics) makeCourseCorrectionGoals(
568568
steps[i].arcSegment.StartConfiguration[ptgIndex],
569569
steps[i].arcSegment.StartConfiguration[trajectoryAlphaWithinPTG],
570570
steps[i].arcSegment.StartConfiguration[startDistanceAlongTrajectoryIndex],
571-
{steps[i].subTraj[goalTrajPtIdx].Dist},
571+
steps[i].subTraj[goalTrajPtIdx].Dist,
572572
}
573573

574574
arcPose, err := ptgk.planningModel.Transform(arcTrajInputs)

0 commit comments

Comments
 (0)