Skip to content

Commit e537d58

Browse files
authored
Add ball joint to urdf parser (#53)
1 parent 03db442 commit e537d58

File tree

4 files changed

+22
-1
lines changed

4 files changed

+22
-1
lines changed

src/ConstrainedDynamics.jl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ export Origin,
4545
setPosition!,
4646
setVelocity!,
4747
setForce!,
48+
addForce!,
4849
getid,
4950
getcomponent,
5051
getbody,
@@ -54,6 +55,7 @@ export Origin,
5455
initializeConstraints!,
5556
disassemble,
5657
minimalCoordinates,
58+
minimalVelocities,
5759
activate!,
5860
deactivate!,
5961
linearsystem,

src/joints/joint.jl

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,13 @@ g(joint::Joint, stateb::State) = g(joint, posargsc(stateb)...)
3737
end
3838
@inline setForce!(joint::Joint) = return
3939

40+
41+
@inline function addForce!(joint::Joint, Fτ::SVector)
42+
joint.+= zerodimstaticadjoint(nullspacemat(joint)) *
43+
return
44+
end
45+
@inline addForce!(joint::Joint) = return
46+
4047
## Derivative wrappers
4148
@inline function ∂Fτ∂ua(joint::Joint, body1::Body, body2::Body)
4249
return ∂Fτ∂ua(joint, body1.state, body2.state) * zerodimstaticadjoint(nullspacemat(joint))

src/main_components/equalityconstraint.jl

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,7 +108,15 @@ end
108108
function setForce!(mechanism, eqc::EqualityConstraint{T,N,Nc}, Fτ::AbstractVector) where {T,N,Nc}
109109
@assert length(Fτ)==3*Nc-N
110110
for i = 1:Nc
111-
setForce!(eqc.constraints[i], Fτ[SUnitRange(eqc.inds[i][1],eqc.inds[i][2])])
111+
setForce!(eqc.constraints[i], Fτ[SUnitRange(eqc.inds[i][1], eqc.inds[i][2])])
112+
end
113+
return
114+
end
115+
116+
function addForce!(mechanism, eqc::EqualityConstraint{T,N,Nc}, Fτ::AbstractVector) where {T,N,Nc}
117+
@assert length(Fτ)==3*Nc-N
118+
for i = 1:Nc
119+
addForce!(eqc.constraints[i], Fτ[SUnitRange(eqc.inds[i][1], eqc.inds[i][2])])
112120
end
113121
return
114122
end

src/ui/urdf.jl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -209,6 +209,8 @@ function parse_joint(xjoint, plink, clink, T)
209209
joint = EqualityConstraint(Fixed(plink, clink; p1=p1, qoffset = q), name=name)
210210
elseif jointtype == "floating"
211211
joint = EqualityConstraint(Floating(plink, clink), name=name)
212+
elseif jointtype == "ball"
213+
joint = EqualityConstraint(Spherical(plink, clink; p1=p1), name=name)
212214
else
213215
@error "Unknown joint type"
214216
end
@@ -239,6 +241,8 @@ function parse_loop_joint(xjoint, link1, link2, T)
239241
joint = EqualityConstraint(Fixed(link1, link2; p1=p1, p2=p2, qoffset = q1), name=name)
240242
elseif jointtype == "floating"
241243
joint = EqualityConstraint(Floating(link1, link2), name=name)
244+
elseif jointtype == "ball"
245+
joint = EqualityConstraint(Spherical(plink, clink; p1=p1, p2=p2), name=name)
242246
else
243247
@error "Unknown joint type"
244248
end

0 commit comments

Comments
 (0)