diff --git a/Manifest.toml b/Manifest.toml deleted file mode 100644 index 4736669..0000000 --- a/Manifest.toml +++ /dev/null @@ -1,387 +0,0 @@ -# This file is machine-generated - editing it directly is not advised - -[[AxisArrays]] -deps = ["Dates", "IntervalSets", "IterTools", "RangeArrays"] -git-tree-sha1 = "d27a38eb4312c8c42ac144d10e17e4ce7fb27c55" -uuid = "39de3d68-74b9-583c-8d2d-e117c070f3a9" -version = "0.4.1" - -[[BangBang]] -deps = ["Future", "InitialValues", "LinearAlgebra", "Requires", "Setfield", "ZygoteRules"] -git-tree-sha1 = "6a721fca2a44ae40615712e6522ce1c12ac4726c" -uuid = "198e06fe-97b7-11e9-32a5-e1d131e6ad66" -version = "0.3.1" - -[[Base64]] -uuid = "2a0f44e3-6c83-55bd-87e4-b1978d98bd5f" - -[[CEnum]] -git-tree-sha1 = "62847acab40e6855a9b5905ccb99c2b5cf6b3ebb" -uuid = "fa961155-64e5-5f13-b03f-caf6b980ea82" -version = "0.2.0" - -[[ConstructionBase]] -git-tree-sha1 = "a2a6a5fea4d6f730ec4c18a76d27ec10e8ec1c50" -uuid = "187b0558-2788-49d3-abe0-74a17ed4e7c9" -version = "1.0.0" - -[[DataStructures]] -deps = ["InteractiveUtils", "OrderedCollections"] -git-tree-sha1 = "b7720de347734f4716d1815b00ce5664ed6bbfd4" -uuid = "864edb3b-99cc-5e75-8d2d-829cb0a9cfe8" -version = "0.17.9" - -[[Dates]] -deps = ["Printf"] -uuid = "ade2ca70-3891-5945-98fb-dc099432e06a" - -[[Distributed]] -deps = ["Random", "Serialization", "Sockets"] -uuid = "8ba89e20-285c-5b6f-9357-94700520ee1b" - -[[Future]] -deps = ["Random"] -uuid = "9fa8497b-333b-5362-9e8d-4d0656e87820" - -[[GLEW_jll]] -deps = ["Libdl", "Libglvnd_jll", "Pkg", "X11_jll", "Xorg_libXi_jll"] -git-tree-sha1 = "cbc0778a866389f895e2101bd18ee23bc7b5182f" -uuid = "bde7f898-03f7-559e-8810-194d950ce600" -version = "2.1.0+2" - -[[GLFW_jll]] -deps = ["Libdl", "Libglvnd_jll", "Pkg", "Xorg_libXcursor_jll", "Xorg_libXi_jll", "Xorg_libXinerama_jll", "Xorg_libXrandr_jll"] -git-tree-sha1 = "3b04f1dd73f0efa81298a76c9515f306df06f613" -uuid = "0656b61e-2033-5cc2-a64a-77c0f6c09b89" -version = "3.3.2+0" - -[[InitialValues]] -git-tree-sha1 = "ef18588a15dcd6aff37a09108d7b3754093d73be" -uuid = "22cec73e-a1b8-11e9-2c92-598750a2cf9c" -version = "0.2.2" - -[[InteractiveUtils]] -deps = ["Markdown"] -uuid = "b77e0a4c-d291-57a0-90e8-8db25a27a240" - -[[IntervalSets]] -deps = ["Dates", "Statistics"] -git-tree-sha1 = "4214b48a62eb8f2c292b2ee34a508c256c0cdbc9" -uuid = "8197267c-284f-5f27-9208-e0e47529a953" -version = "0.3.2" - -[[IterTools]] -git-tree-sha1 = "05110a2ab1fc5f932622ffea2a003221f4782c18" -uuid = "c8e1da08-722c-5040-9ed9-7db0dc04731e" -version = "1.3.0" - -[[LibGit2]] -uuid = "76f85450-5226-5b5a-8eaa-529ad045b433" - -[[Libdl]] -uuid = "8f399da3-3557-5675-b5ff-fb832c97cbdb" - -[[Libgcrypt_jll]] -deps = ["Libdl", "Libgpg_error_jll", "Pkg"] -git-tree-sha1 = "9592d031aac2566fb5cf9eeb28e2d7b05db9b9ef" -uuid = "d4300ac3-e22c-5743-9152-c294e39db1e4" -version = "1.8.5+0" - -[[Libglvnd_jll]] -deps = ["Libdl", "Pkg", "X11_jll", "Xorg_glproto_jll", "Xorg_libX11_jll", "Xorg_libXext_jll"] -git-tree-sha1 = "b69bdcad2424615c7b0838f69608b541680a5b7e" -uuid = "7e76a0d4-f3c7-5321-8279-8d96eeed0f29" -version = "1.2.0+2" - -[[Libgpg_error_jll]] -deps = ["Libdl", "Pkg"] -git-tree-sha1 = "3332d872d131a6ee88f10f20d7d131ece886c424" -uuid = "7add5ba3-2f88-524e-9cd5-f83b8a55f7b8" -version = "1.36.0+0" - -[[Libiconv_jll]] -deps = ["Libdl", "Pkg"] -git-tree-sha1 = "802f5b23c846cb4ed568cae0bfb0ce0d2ba1926d" -uuid = "94ce4f54-9a6c-5748-9c1c-f9c7231a4531" -version = "1.16.0+1" - -[[LinearAlgebra]] -deps = ["Libdl"] -uuid = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e" - -[[Logging]] -uuid = "56ddb016-857b-54e1-b83d-db4d58db5568" - -[[MacroTools]] -deps = ["DataStructures", "Markdown", "Random"] -git-tree-sha1 = "e2fc7a55bb2224e203bbd8b59f72b91323233458" -uuid = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09" -version = "0.5.3" - -[[Markdown]] -deps = ["Base64"] -uuid = "d6f4376e-aef5-505a-96c1-9c027394607a" - -[[MuJoCo_jll]] -deps = ["GLEW_jll", "GLFW_jll", "Libdl", "Libglvnd_jll", "Pkg"] -git-tree-sha1 = "500ed43eebb61f915cc6910d3a9afda225655fcc" -uuid = "32af7c3b-80ec-5621-8194-2f6cb2280831" -version = "2.0.0+1" - -[[OrderedCollections]] -deps = ["Random", "Serialization", "Test"] -git-tree-sha1 = "c4c13474d23c60d20a67b217f1d7f22a40edf8f1" -uuid = "bac558e1-5e72-5ebc-8fee-abe8a469f55d" -version = "1.1.0" - -[[Pkg]] -deps = ["Dates", "LibGit2", "Libdl", "Logging", "Markdown", "Printf", "REPL", "Random", "SHA", "Test", "UUIDs"] -uuid = "44cfe95a-1eb2-52ea-b672-e2afdf69b78f" - -[[Printf]] -deps = ["Unicode"] -uuid = "de0858da-6303-5e67-8744-51eddeeeb8d7" - -[[REPL]] -deps = ["InteractiveUtils", "Markdown", "Sockets"] -uuid = "3fa0cd96-eef1-5676-8a61-b3b8758bbffb" - -[[Random]] -deps = ["Serialization"] -uuid = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c" - -[[RangeArrays]] -git-tree-sha1 = "b9039e93773ddcfc828f12aadf7115b4b4d225f5" -uuid = "b3c3ace0-ae52-54e7-9d0b-2c1406fd6b9d" -version = "0.3.2" - -[[Reexport]] -deps = ["Pkg"] -git-tree-sha1 = "7b1d07f411bc8ddb7977ec7f377b97b158514fe0" -uuid = "189a3867-3050-52da-a836-e630ba90ab69" -version = "0.2.0" - -[[Requires]] -deps = ["Test"] -git-tree-sha1 = "f6fbf4ba64d295e146e49e021207993b6b48c7d1" -uuid = "ae029012-a4dd-5104-9daa-d747884805df" -version = "0.5.2" - -[[SHA]] -uuid = "ea8e919c-243c-51af-8825-aaa63cd721ce" - -[[Serialization]] -uuid = "9e88b42a-f829-5b0c-bbe9-9e923198166b" - -[[Setfield]] -deps = ["ConstructionBase", "Future", "MacroTools", "Requires"] -git-tree-sha1 = "ed5045722fcdacf263a90fb9eb9f258598ccebac" -uuid = "efcf1570-3423-57d1-acb7-fd33fddbac46" -version = "0.5.4" - -[[Sockets]] -uuid = "6462fe0b-24de-5631-8697-dd941f90decc" - -[[SparseArrays]] -deps = ["LinearAlgebra", "Random"] -uuid = "2f01184e-e22b-5df5-ae63-d93ebab69eaf" - -[[StaticArrays]] -deps = ["LinearAlgebra", "Random", "Statistics"] -git-tree-sha1 = "5a3bcb6233adabde68ebc97be66e95dcb787424c" -uuid = "90137ffa-7385-5640-81b9-e52037218182" -version = "0.12.1" - -[[Statistics]] -deps = ["LinearAlgebra", "SparseArrays"] -uuid = "10745b16-79ce-11e8-11f9-7d13ad32a3b2" - -[[Test]] -deps = ["Distributed", "InteractiveUtils", "Logging", "Random"] -uuid = "8dfed614-e22c-5e08-85e1-65c5234f0b40" - -[[UUIDs]] -deps = ["Random", "SHA"] -uuid = "cf7118a7-6976-5b1a-9a39-7adc72f591a4" - -[[Unicode]] -uuid = "4ec0a83e-493e-50e2-b9ac-8f72acf5a8f5" - -[[UnsafeArrays]] -git-tree-sha1 = "1de6ef280110c7ad3c5d2f7a31a360b57a1bde21" -uuid = "c4a57d5a-5b31-53a6-b365-19f8c011fbd6" -version = "1.0.0" - -[[X11_jll]] -deps = ["Libdl", "Pkg"] -git-tree-sha1 = "dfadaea7e3fa9120b06824b634342fc6cba58109" -uuid = "546b0b6d-9ca3-5ba2-8705-1bc1841d8479" -version = "1.6.8+5" - -[[XML2_jll]] -deps = ["Libdl", "Libiconv_jll", "Pkg", "Zlib_jll"] -git-tree-sha1 = "ed5603a695aefe3e9e404fc7b052e02cc72cfab6" -uuid = "02c8fc9c-b97f-50b9-bbe4-9be30ff0a78a" -version = "2.9.9+1" - -[[XSLT_jll]] -deps = ["Libdl", "Libgcrypt_jll", "Pkg", "XML2_jll"] -git-tree-sha1 = "77d0086a876532cb4fae005d4c9ecc8236dcdceb" -uuid = "aed1982a-8fda-507f-9586-7b0439959a61" -version = "1.1.33+0" - -[[Xorg_fixesproto_jll]] -deps = ["Libdl", "Pkg"] -git-tree-sha1 = "101dcd548d6021b8d3cdaeb66c65c0d85faf1bcb" -uuid = "cf2f014d-5496-555f-b295-889ac9dfddaa" -version = "5.0.0+0" - -[[Xorg_glproto_jll]] -deps = ["Libdl", "Pkg"] -git-tree-sha1 = "16cb7bf73d86119bffe90d3ae7dd17b12281c887" -uuid = "41595b7c-9afa-5287-863f-896d3380052a" -version = "1.4.17+0" - -[[Xorg_inputproto_jll]] -deps = ["Libdl", "Pkg"] -git-tree-sha1 = "a941739b553f589cd264dc16fdeaf5300af30f51" -uuid = "84d6cd60-beca-5f49-93c5-789031781a2d" -version = "2.3.2+0" - -[[Xorg_kbproto_jll]] -deps = ["Libdl", "Pkg"] -git-tree-sha1 = "d0991fb63a9c663108bc5adc2ebdf358be6a289f" -uuid = "060dd47b-79ec-5ba1-a7b2-f4f2f7dcdd0f" -version = "1.0.7+0" - -[[Xorg_libX11_jll]] -deps = ["Libdl", "Pkg", "Xorg_inputproto_jll", "Xorg_kbproto_jll", "Xorg_libxcb_jll", "Xorg_util_macros_jll", "Xorg_xextproto_jll", "Xorg_xproto_jll", "Xorg_xtrans_jll"] -git-tree-sha1 = "a48b5faf2a95933d1249c889a2893f7701935bcb" -uuid = "4f6342f7-b3d2-589e-9d20-edeb45f2b2bc" -version = "1.6.8+0" - -[[Xorg_libXau_jll]] -deps = ["Libdl", "Pkg", "Xorg_xproto_jll"] -git-tree-sha1 = "8cc829c6223f11f06b56108c45e6b1aad13b1fdc" -uuid = "0c0b7dd1-d40b-584c-a123-a41640f87eec" -version = "1.0.9+0" - -[[Xorg_libXcursor_jll]] -deps = ["Libdl", "Pkg", "Xorg_libXfixes_jll", "Xorg_libXrender_jll", "Xorg_util_macros_jll"] -git-tree-sha1 = "0632e71a9d45f56a84b2cb517773918f3d54ddf3" -uuid = "935fb764-8cf2-53bf-bb30-45bb1f8bf724" -version = "1.2.0+0" - -[[Xorg_libXdmcp_jll]] -deps = ["Libdl", "Pkg", "Xorg_util_macros_jll", "Xorg_xproto_jll"] -git-tree-sha1 = "1cb581254dd38106e9cfb2c6aa1ed675547fd2e4" -uuid = "a3789734-cfe1-5b06-b2d0-1dd0d9d62d05" -version = "1.1.3+0" - -[[Xorg_libXext_jll]] -deps = ["Libdl", "Pkg", "Xorg_libX11_jll", "Xorg_util_macros_jll", "Xorg_xextproto_jll"] -git-tree-sha1 = "08b8a06261eec5fbe45d4077a993a224af2880e3" -uuid = "1082639a-0dae-5f34-9b06-72781eeb8cb3" -version = "1.3.4+0" - -[[Xorg_libXfixes_jll]] -deps = ["Libdl", "Pkg", "Xorg_fixesproto_jll", "Xorg_libX11_jll", "Xorg_util_macros_jll"] -git-tree-sha1 = "d4194996acacdd25f4f86a40ea6b9e497d4c1604" -uuid = "d091e8ba-531a-589c-9de9-94069b037ed8" -version = "5.0.3+0" - -[[Xorg_libXi_jll]] -deps = ["Libdl", "Pkg", "Xorg_inputproto_jll", "Xorg_libXext_jll", "Xorg_libXfixes_jll", "Xorg_util_macros_jll"] -git-tree-sha1 = "411b9503eb1dd7af3605e51a4cf7e4850a75f20e" -uuid = "a51aa0fd-4e3c-5386-b890-e753decda492" -version = "1.7.10+0" - -[[Xorg_libXinerama_jll]] -deps = ["Libdl", "Pkg", "Xorg_libXext_jll", "Xorg_util_macros_jll", "Xorg_xineramaproto_jll"] -git-tree-sha1 = "123ffa8c714ee630dde2256ad91d02322e079074" -uuid = "d1454406-59df-5ea1-beac-c340f2130bc3" -version = "1.1.4+0" - -[[Xorg_libXrandr_jll]] -deps = ["Libdl", "Pkg", "Xorg_libXext_jll", "Xorg_libXrender_jll", "Xorg_randrproto_jll", "Xorg_util_macros_jll"] -git-tree-sha1 = "122d70832769124a15f2a1623307f4637179b1b3" -uuid = "ec84b674-ba8e-5d96-8ba1-2a689ba10484" -version = "1.5.2+0" - -[[Xorg_libXrender_jll]] -deps = ["Libdl", "Pkg", "Xorg_libX11_jll", "Xorg_renderproto_jll"] -git-tree-sha1 = "07abd690ddd09818237a0a21359fd6ef449e820d" -uuid = "ea2f1a96-1ddc-540d-b46f-429655e07cfa" -version = "0.9.10+0" - -[[Xorg_libpthread_stubs_jll]] -deps = ["Libdl", "Pkg"] -git-tree-sha1 = "5c2806e6e08b093ca2071e53602651f4a5e079da" -uuid = "14d82f49-176c-5ed1-bb49-ad3f5cbd8c74" -version = "0.1.0+0" - -[[Xorg_libxcb_jll]] -deps = ["Libdl", "Pkg", "XSLT_jll", "Xorg_libXau_jll", "Xorg_libXdmcp_jll", "Xorg_libpthread_stubs_jll", "Xorg_util_macros_jll", "Xorg_xcb_proto_jll"] -git-tree-sha1 = "b3d001a3df5ec00fd677f0ae674127983218ac72" -uuid = "c7cfdc94-dc32-55de-ac96-5a1b8d977c5b" -version = "1.13.0+0" - -[[Xorg_randrproto_jll]] -deps = ["Libdl", "Pkg"] -git-tree-sha1 = "5c2f995614980bedaed7de97995f9a5e0f857bef" -uuid = "0e394dc1-71ae-5c65-abe5-8749687e42d3" -version = "1.5.0+0" - -[[Xorg_renderproto_jll]] -deps = ["Libdl", "Pkg"] -git-tree-sha1 = "36dbfa838fc4faf019a6957f2eb8c1b5f31bb500" -uuid = "21e99dc2-7dba-5609-a726-b181bd3bbb6c" -version = "0.11.1+0" - -[[Xorg_util_macros_jll]] -deps = ["Libdl", "Pkg"] -git-tree-sha1 = "a99f6275c9b2a9862d2cc4e714aad806c2daecc1" -uuid = "7c09cfe3-afe2-5798-bcc9-d6b7fecfdca5" -version = "1.19.2+0" - -[[Xorg_xcb_proto_jll]] -deps = ["Libdl", "Pkg"] -git-tree-sha1 = "1506cde098df4b6dedcc082bf9386a5808ee6dea" -uuid = "c2e9c405-c068-5e7b-9b35-084fd074cae4" -version = "1.13.0+0" - -[[Xorg_xextproto_jll]] -deps = ["Libdl", "Pkg"] -git-tree-sha1 = "0a1da65671cfc3b20926081b668c7dd098dd9c76" -uuid = "d13bc2ba-d276-5c6f-8a1c-29ed04aab5d0" -version = "7.3.0+0" - -[[Xorg_xineramaproto_jll]] -deps = ["Libdl", "Pkg"] -git-tree-sha1 = "9f331b569a18a4fbf66ee8f60cb4018c73faabb4" -uuid = "6a3da44c-33b1-5374-838f-bf0fbf92c29b" -version = "1.2.1+0" - -[[Xorg_xproto_jll]] -deps = ["Libdl", "Pkg"] -git-tree-sha1 = "fdb0d8bae06762e24dade427e7914d199cdd721e" -uuid = "46797783-dccc-5433-be59-056c4bde8513" -version = "7.0.31+0" - -[[Xorg_xtrans_jll]] -deps = ["Libdl", "Pkg"] -git-tree-sha1 = "b18f01c3b50be7bde08be131934112db3137f28b" -uuid = "c5fb5394-a638-5e4d-96e5-b29de1b5cf10" -version = "1.4.0+0" - -[[Zlib_jll]] -deps = ["Libdl", "Pkg"] -git-tree-sha1 = "fd36a6739e256527287c5444960d0266712cd49e" -uuid = "83775a58-1f1d-513f-b197-d71354ab007a" -version = "1.2.11+8" - -[[ZygoteRules]] -deps = ["MacroTools"] -git-tree-sha1 = "b3b4882cc9accf6731a08cc39543fbc6b669dca8" -uuid = "700de1a5-db45-46bc-99cf-38207098b444" -version = "0.2.0" diff --git a/Project.toml b/Project.toml index 5993676..81d5612 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "MuJoCo" uuid = "93189219-7048-461c-94ec-443a161ed927" authors = ["Colin Summers", "Kendall Lowrey"] -version = "0.3.0" +version = "0.3.1" [deps] AxisArrays = "39de3d68-74b9-583c-8d2d-e117c070f3a9" @@ -15,16 +15,6 @@ Reexport = "189a3867-3050-52da-a836-e630ba90ab69" StaticArrays = "90137ffa-7385-5640-81b9-e52037218182" UnsafeArrays = "c4a57d5a-5b31-53a6-b365-19f8c011fbd6" -[compat] -AxisArrays = "0.4.1" -BangBang = "< 0.3.2" -CEnum = "0.2" -MacroTools = "0.5.3" -Reexport = "0.2" -StaticArrays = "0.12.1" -UnsafeArrays = "1" -julia = "1.3" - [extras] Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40" diff --git a/src/MJCore/util.jl b/src/MJCore/util.jl index 2f78d58..5162417 100644 --- a/src/MJCore/util.jl +++ b/src/MJCore/util.jl @@ -149,4 +149,4 @@ getglobal(::Val{name}, ::Type{T}) where {name,T} = cglobal((name, libmujoco), T) function storeglobal!(::Val{name}, ::Type{T}, x) where {name,T} ptr = getglobal(Val(name), T) Base.unsafe_store!(ptr, Base.unsafe_convert(T, Base.cconvert(T, x))) -end \ No newline at end of file +end diff --git a/src/MJCore/wrapper/mjmujoco.jl b/src/MJCore/wrapper/mjmujoco.jl index 2c60bef..0e5b3dd 100644 --- a/src/MJCore/wrapper/mjmujoco.jl +++ b/src/MJCore/wrapper/mjmujoco.jl @@ -2424,6 +2424,158 @@ function mju_writeLog(type::String, msg::String) end +#---------------------- Quaternions ---------------------------------------------------- + +"""Rotate vector by quaternion.""" +function mju_rotVecQuat(res::MJVec, vec::MJVec, quat::MJVec) + @assert length(res) >= 3 + @assert length(vec) >= 3 + @assert length(quat) >= 4 + ccall( + (:mju_rotVecQuat, libmujoco), + Cvoid, + (Ptr{mjtNum}, Ptr{mjtNum}, Ptr{mjtNum}), + res, vec, quat + ) +end + +"""Conjugate quaternion, corresponding to opposite rotation.""" +function mju_negQuat(res::MJVec, quat::MJVec) + @assert length(res) >= 4 + @assert length(quat) >= 4 + ccall( + (:mju_negQuat, libmujoco), + Cvoid, + (Ptr{mjtNum}, Ptr{mjtNum}), + res, quat + ) +end + +"""Muiltiply quaternions.""" +function mju_mulQuat(res::MJVec, quat1::MJVec, quat2::MJVec) + @assert length(res) >= 4 + @assert length(quat1) >= 4 + @assert length(quat2) >= 4 + ccall( + (:mju_mulQuat, libmujoco), + Cvoid, + (Ptr{mjtNum}, Ptr{mjtNum}, Ptr{mjtNum}), + res, quat1, quat2 + ) +end + +"""Muiltiply quaternion and axis.""" +function mju_mulQuatAxis(res::MJVec, quat::MJVec, axis::MJVec) + @assert length(res) >= 4 + @assert length(quat) >= 4 + @assert length(axis) >= 3 + ccall( + (:mju_mulQuatAxis, libmujoco), + Cvoid, + (Ptr{mjtNum}, Ptr{mjtNum}, Ptr{mjtNum}), + res, quat, axis + ) +end + + +"""Convert axisAngle to quaternion.""" +function mju_axisAngle2Quat(res::MJVec, axis::MJVec, angle::mjtNum) + @assert length(res) >= 4 + @assert length(axis) >= 3 + ccall( + (:mju_axisAngle2Quat, libmujoco), + Cvoid, + (Ptr{mjtNum}, Ptr{mjtNum}, mjtNum), + res, axis, angle + ) +end + +"""Convert quaternion (corresponding to orientation difference) to 3D velocity.""" +function mju_quat2Vel(res::MJVec, quat::MJVec, dt::mjtNum) + @assert length(res) >= 3 + @assert length(quat) >= 4 + ccall( + (:mju_quat2vel, libmujoco), + Cvoid, + (Ptr{mjtNum}, Ptr{mjtNum}, mjtNum), + res, quat, dt + ) +end + +"""Subtract quaternions, express as 3D velocity: qb*quat(res) = qa.""" +function mju_subQuat(res::MJVec, qa::MJVec, qb::MJVec) + @assert length(res) >= 3 + @assert length(qa) >= 4 + @assert length(qb) >= 4 + ccall( + (:mju_subQuat, libmujoco), + Cvoid, + (Ptr{mjtNum}, Ptr{mjtNum}, Ptr{mjtNum}), + res, qa, qb + ) +end + +"""Convert quaternion to 3D rotation matrix.""" +function mju_quat2Mat(res::MJVec, quat::MJVec); + @assert length(res) >= 9 + @assert length(quat) >= 4 + ccall( + (:mju_quat2Mat, libmujoco), + Cvoid, + (Ptr{mjtNum}, Ptr{mjtNum}), + res, quat + ) +end + +"""Convert 3D rotation matrix to quaterion.""" +function mju_mat2Quat(quat::MJVec, mat::MJVec) + @assert length(quat) >= 4 + @assert length(mat) >= 9 + ccall( + (:mju_mat2Quat, libmujoco), + Cvoid, + (Ptr{mjtNum}, Ptr{mjtNum}), + quat, mat + ) +end + +"""Compute time-derivative of quaternion, given 3D rotational velocity.""" +function mju_derivQuat(res::MJVec, quat::MJVec, vel::MJVec) + @assert length(res) >= 4 + @assert length(quat) >= 4 + @assert length(vel) >= 3 + ccall( + (:mju_derivQuat, libmujoco), + Cvoid, + (Ptr{mjtNum}, Ptr{mjtNum}, Ptr{mjtNum}), + res, quat, vel + ) +end + +"""Integrate quaterion given 3D angular velocity.""" +function mju_quatIntegrate(quat::MJVec, vel::MJVec, scale::mjtNum) + @assert length(quat) >= 4 + @assert length(vel) >= 3 + ccall( + (:mju_quatIntegrate, libmujoco), + Cvoid, + (Ptr{mjtNum}, Ptr{mjtNum}, mjtNum), + quat, vel, scale + ) +end + +"""Construct quaternion performing rotation from z-axis to given vector.""" +function mju_quatZ2Vec(quat::MJVec, vec::MJVec) + @assert length(res) >= 4 + @assert length(vec) >= 3 + ccall( + (:mju_quatZ2vec, libmujoco), + Cvoid, + (Ptr{mjtNum}, Ptr{mjtNum}), + quat, vec + ) +end + #---------------------- Utility functions: miscellaneous ------------------------------- diff --git a/src/MuJoCo.jl b/src/MuJoCo.jl index e944c43..9873f53 100644 --- a/src/MuJoCo.jl +++ b/src/MuJoCo.jl @@ -114,7 +114,7 @@ const CONTROL_FIELDS = ( ) # For @set!! macro to work -@inline function BangBang.setproperties!(value::JLTypes, patch::NamedTuple) +@inline function BangBang.setproperties!!(value::JLTypes, patch::NamedTuple) ntuple(length(patch)) do i setproperty!(value, keys(patch)[i], patch[i]) end diff --git a/test/MJCore/mjmujoco.jl b/test/MJCore/mjmujoco.jl index 909a82f..de5f67a 100644 --- a/test/MJCore/mjmujoco.jl +++ b/test/MJCore/mjmujoco.jl @@ -102,12 +102,13 @@ end jf3 = getproperty(jd3, name) test() = jf1 == jf2 == jf3 - if name === :solver_nnz - # TODO - @test_skip test() - else - @test test() - end + #if name === :solver_nnz + # # TODO + # @test_skip test() + #else + # @test test() + #end + @test test() #if name === :solver_nnz # # NOTE: bug in MuJoCo? d1.solver_nnz == 729, @@ -128,4 +129,4 @@ end mj_copyData(jd2, jm, jd1) @test jd2.qpos == jd1.qpos end -end \ No newline at end of file +end diff --git a/test/runtests.jl b/test/runtests.jl index c4899ff..e5ab411 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -40,5 +40,7 @@ end @testset "MuJoCo.jl" begin include("MJCore/MJCore.jl") + include("MJCore/mjmujoco.jl") + #include("MJCore/cglobals.jl") include("sugar.jl") end