Security News
Research
Data Theft Repackaged: A Case Study in Malicious Wrapper Packages on npm
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
A fast inverse kinematics solver for arbitrary serial chains providing Rust, C++, and Python programming interfaces.
The implementation is similar to TRAC-IK [1] in that a nonlinear optimization problem is formulated and minimized. However, this work differs in a couple of ways:
We compare to TRAC-IK (via tracikpy) by drawing a random valid joint configuration, mapping into Cartesian space with forward kinematics, and then asking each solver to generate an inverse kinematics solution using a random initial guess.
Note that this methodology differs from the original TRAC-IK benchmark which solves for configurations along a dense trajectory, meaning seeds are always relatively close. The benchmark shown below is more similar to a motion planning workload, in which samples are randomly drawn from a space with little knowledge of a nearby seed.
Timing is of a single inverse kinematics solve.
Additionally, we use the ik_benchmarking project (credit to PickNik Robotics) to compare against various solvers for the Franka Emika Panda robot using the MoveIt interfaces for each solver. OptIK is configured to return solutions with roughly equal tolerance to its closest competitor, TRAC-IK.
Timing is of a single inverse kinematics solve. Note the semi-log axes.
python3 -m pip install optik-py
Or, to install a prerelease version:
.whl
from GitHub Releasespip install optik-py<...>.whl
(replace <...>
with the actual filename)python -c 'import optik'
Include OptIK in your CMake project using FetchContent
:
include(FetchContent)
FetchContent_Declare(
optik
GIT_REPOSITORY https://github.com/kylc/optik
GIT_TAG master
SOURCE_SUBDIR "crates/optik-cpp")
FetchContent_MakeAvailable(optik)
target_link_libraries(mylib PRIVATE optik::optik)
git clone git@github.com:kylc/optik.git
# Build the Rust library
cargo build --release
# Build a Python wheel
maturin build --release -m crates/optik-py/Cargo.toml
# Build the C++ example
mkdir build
cd build
cmake -DCMAKE_BUILD_TYPE=Release ../examples
cmake --build .
For workloads in which the distance between the solution and the seed are not important, you can use a high degree of parallelism (OptIK defaults to the number of CPU cores) to more quickly converge on a solution via parallel random restarting.
For workloads such as Cartesian interpolation, it is important to find the solution closest to the seed to avoid joint-space discontinuities. While OptIK does not explicitly try to minimize this distance, the optimizer does generally converge to the nearest solution (subject to joint limits). Prefer using SolutionMode::Quality
with parallelism to sample many solutions and choose the one nearest the seed.
For workloads in which determinism is important, consider using SolutionMode::Quality
, settings a max_restarts
value, and disabling the max_time
. This ensures that the solution is not dependent on CPU processing speed. Due to careful seeding of RNGs inside the solver, solutions should be fully deterministic. Alternatively, use SolutionMode::Speed
and set the parallel threads to 1
.
P. Beeson and B. Ames, “TRAC-IK: An open-source library for improved solving of generic inverse kinematics,” in 2015 IEEE-RAS 15th International Conference on Humanoid Robots (Humanoids), Seoul, South Korea: IEEE, Nov. 2015, pp. 928–935. doi: 10.1109/HUMANOIDS.2015.7363472.
J. Solà, J. Deray, and D. Atchuthan, “A micro Lie theory for state estimation in robotics.” arXiv, Dec. 08, 2021. Accessed: Jul. 24, 2023. [Online]. Available: http://arxiv.org/abs/1812.01537
Steven G. Johnson, The NLopt nonlinear-optimization package, http://github.com/stevengj/nlopt
FAQs
An optimizing IK solver based on the Lie group of rigid transforms SE(3)
We found that optik-py demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Research
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
Research
Security News
Attackers used a malicious npm package typosquatting a popular ESLint plugin to steal sensitive data, execute commands, and exploit developer systems.
Security News
The Ultralytics' PyPI Package was compromised four times in one weekend through GitHub Actions cache poisoning and failure to rotate previously compromised API tokens.