Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[WIP]Prioritized Inverse Kinematics #751

Closed
wants to merge 39 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
39 commits
Select commit Hold shift + click to select a range
4ac5ecb
eus_osqp: add new package to use osqp from euslisp.
mmurooka May 24, 2019
88b9733
remove space from <name> in package.xml to make rostest work
Naoki-Hiraoka Jan 25, 2020
88a05f4
use osqp v0.6.0 and free memories properly
Naoki-Hiraoka Jan 25, 2020
f314112
enable osqp sqp hotstart
Naoki-Hiraoka Jan 25, 2020
b518686
fix demo-eus-osqp3
Naoki-Hiraoka Jan 25, 2020
014eb07
use double instead of float in osqp
Naoki-Hiraoka Jan 25, 2020
6ba67c5
deal with sparce matrix efficiently in osqp
Naoki-Hiraoka Jan 25, 2020
6c400f7
reduce calculation cost
Naoki-Hiraoka Jan 25, 2020
f0a146f
compile eus-osqp.l
Naoki-Hiraoka Jan 25, 2020
a1d6901
simplify test
Naoki-Hiraoka Jan 25, 2020
6fc48f5
fix memory bug and improve qp accuracy
Naoki-Hiraoka Jan 26, 2020
4ee0654
model_predictive_control test and contact_optimization test passed wi…
Naoki-Hiraoka Jan 26, 2020
be39138
[prioritized-inverse-kinematics] created with reference to optmotiongen
Naoki-Hiraoka Jan 26, 2020
f37e055
200126
Naoki-Hiraoka Jan 26, 2020
eae2a6f
IK solved
Naoki-Hiraoka Jan 27, 2020
6202a55
prioritized-fullbody-inverse-kinematics solved
Naoki-Hiraoka Jan 27, 2020
f4ae65e
minor change
Naoki-Hiraoka Jan 27, 2020
40903bd
some task added
Naoki-Hiraoka Jan 28, 2020
40177d0
add cog task
Naoki-Hiraoka Jan 28, 2020
2b730fc
add support polygon task
Naoki-Hiraoka Jan 29, 2020
ac617e8
minor change
Naoki-Hiraoka Jan 29, 2020
baaa9a7
[eus_cddlib]add eus_cddlib
Naoki-Hiraoka Jan 29, 2020
d8286c6
fix
Naoki-Hiraoka Jan 29, 2020
7555b78
fix
Naoki-Hiraoka Jan 30, 2020
437136b
Merge branch 'eus-cddlib' into prioritized-ik
Naoki-Hiraoka Jan 30, 2020
4bd78c8
minor change
Naoki-Hiraoka Jan 30, 2020
e236443
add scfr demo
Naoki-Hiraoka Jan 30, 2020
c06ed85
Merge branch 'eus-cddlib' into prioritized-ik
Naoki-Hiraoka Jan 30, 2020
042198e
add centroid-scfr-task
Naoki-Hiraoka Jan 30, 2020
58ca37d
fix
Naoki-Hiraoka Feb 1, 2020
b373dd5
stabilize scfr
Naoki-Hiraoka Feb 3, 2020
b07c6e0
use gmp rational
Naoki-Hiraoka Feb 3, 2020
719bb77
Merge branch 'eus-cddlib' into prioritized-ik
Naoki-Hiraoka Feb 3, 2020
2dc8b2c
fix
Naoki-Hiraoka Feb 8, 2020
7ca4998
add avoid demo
Naoki-Hiraoka Mar 17, 2020
3f1b7c3
add infeasible-angle-vector-task
Naoki-Hiraoka Mar 18, 2020
43666e4
add avoid task
Naoki-Hiraoka Mar 20, 2020
4883cc1
[prioritized-inverse-kinematics] viewer, typo
Naoki-Hiraoka Jun 7, 2020
3b42f22
Merge branch 'master' into prioritized-ik
k-okada May 11, 2021
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions eus_cddlib/CHANGELOG.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Changelog for package eus_cddlib
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
22 changes: 22 additions & 0 deletions eus_cddlib/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
project(eus_cddlib)

cmake_minimum_required(VERSION 2.4.6)

find_package(catkin REQUIRED COMPONENTS rostest)

catkin_package()

add_definitions(-DGMPRATIONAL)
add_library(eus_cddlib SHARED src/eus_cddlib.c)
set_target_properties(eus_cddlib PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${PROJECT_SOURCE_DIR}/lib)
target_link_libraries(eus_cddlib cddgmp)
install(DIRECTORY lib/
USE_SOURCE_PERMISSIONS
DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION})

install(DIRECTORY euslisp
USE_SOURCE_PERMISSIONS
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION})

install(TARGETS eus_cddlib # lib/ is added here to install euslisp library
DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/lib)
3 changes: 3 additions & 0 deletions eus_cddlib/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# eus_cddlib

Use cddlib (https://inf.ethz.ch/personal/fukudak/cdd_home/) from EusLisp for finding vertices of convex polytopes.
2 changes: 2 additions & 0 deletions eus_cddlib/euslisp/eus-cddlib-compiled.l
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
(compiler::compile-file-if-src-newer (format nil "~A/euslisp/eus-cddlib" (ros::resolve-ros-path "package://eus_cddlib")))
(load (format nil "~A/euslisp/eus-cddlib.so" (ros::resolve-ros-path "package://eus_cddlib")))
191 changes: 191 additions & 0 deletions eus_cddlib/euslisp/eus-cddlib.l
Original file line number Diff line number Diff line change
@@ -0,0 +1,191 @@
(defvar *libeuscddlib* (load-foreign (format nil "~A/lib/libeus_cddlib.so" (ros::resolve-ros-path "package://eus_cddlib"))))

(defforeign _cddlib-initialize
*libeuscddlib*
"cddlib_initialize"
()
:integer)

(defforeign _cddlib-finalize
*libeuscddlib*
"cddlib_finalize"
()
:integer)

(defforeign _cddlib-h-to-v
*libeuscddlib*
"cddlib_H_to_V"
(:string ;; A_eq
:string ;; b_eq
:string ;; A_ineq
:string ;; b_ineq
:integer ;; d
:integer ;; m_eq
:integer ;; m_ineq
:string ;; n
:string ;; s_nonneg
:string ;; s_free
:integer ;; verbose
)
:integer)

(defforeign _cddlib-get-v
*libeuscddlib*
"cddlib_get_V"
(:string ;; V
:string ;; R_nonneg
:string ;; R_free
:integer ;; d
:integer ;; n
:integer ;; s_nonneg
:integer ;; s_free
)
:integer)

(defforeign _cddlib-v-to-h
*libeuscddlib*
"cddlib_V_to_H"
(:string ;; V
:string ;; R_nonneg
:string ;; R_free
:integer ;; d
:integer ;; n
:integer ;; s_nonneg
:integer ;; s_free
:string ;; m_eq
:string ;; m_ineq
:integer ;; verbose
)
:integer)

(defforeign _cddlib-get-h
*libeuscddlib*
"cddlib_get_H"
(:string ;; A_eq
:string ;; b_eq
:string ;; A_ineq
:string ;; b_ineq
:integer ;; d
:integer ;; m_eq
:integer ;; m_ineq
)
:integer)

;;input
;; A_eq x + b_eq = 0
;; A_ineq x + b_ineq >= 0
;;output
;; (list V R_nonneg R_free)
;; x = V y + R_nonneg z + R_free w (sum y = 1, y >= 0, z >= 0)
(defun cddlib-H-to-V
(&key
(A_eq)
(b_eq)
(A_ineq)
(b_ineq)
(verbose 0)
)
(cond
((and A_eq A_ineq) (unless (= (array-dimension A_eq 1) (array-dimension A_ineq 1))
(error "column size mismatch A_eq=~A, A_ineq=~A" (array-dimension A_eq 1) (array-dimension A_ineq 1))))
(A_eq (setq A_ineq (make-matrix 0 (array-dimension A_eq 1)))
(setq b_ineq (instantiate float-vector (array-dimension A_eq 1))))
(A_ineq (setq A_eq (make-matrix 0 (array-dimension A_ineq 1)))
(setq b_eq (instantiate float-vector (array-dimension A_ineq 1))))
(t (return-from cddlib-H-to-V (list (make-matrix 0 0) (make-matrix 0 0) (make-matrix 0 0)))))
(let ((n (instantiate integer-vector 1))
(s_nonneg (instantiate integer-vector 1))
(s_free (instantiate integer-vector 1))
(d (array-dimension A_eq 1))
)
(if (= 0 (_cddlib-H-to-V
(array-entity A_eq)
b_eq
(array-entity A_ineq)
b_ineq
d
(array-dimension A_eq 0)
(array-dimension A_ineq 0)
n
s_nonneg
s_free
verbose))
(let ((V (make-matrix d (elt n 0)))
(R_nonneg (make-matrix d (elt s_nonneg 0)))
(R_free (make-matrix d (elt s_free 0)))
)
(_cddlib-get-V
(array-entity V)
(array-entity R_nonneg)
(array-entity R_free)
d
(elt n 0)
(elt s_nonneg 0)
(elt s_free 0))
(list V R_nonneg R_free)
)
nil)
)
)

;;input
;; x = V y + R_nonneg z + R_free w (sum y = 1, y >= 0, z >= 0)
;;output
;; (list A_eq b_eq A_ineq b_ineq)
;; A_eq x + b_eq = 0
;; A_ineq x + b_ineq >= 0
(defun cddlib-V-to-H
(&key
(V)
(R_nonneg)
(R_free)
(verbose 0)
)
(cond
((and V R_nonneg R_free) (unless (= (array-dimension V 0) (array-dimension R_nonneg 0) (array-dimension R_free 0))
(error "row size mismatch V=~A, R_nonneg=~A, R_free~A" (array-dimension V 0) (array-dimension R_nonneg 0) (array-dimension R_free 0))))
((and V R_nonneg) (setq R_free (make-matrix (array-dimension V 0) 0)))
((and V R_free) (setq R_nonneg (make-matrix (array-dimension V 0) 0)))
((and R_nonneg R_free) (setq V (make-matrix (array-dimension R_nonneg 0) 0)))
(V (progn (setq R_nonneg (make-matrix (array-dimension V 0) 0))
(setq R_free (make-matrix (array-dimension V 0) 0))))
(R_nonneg (progn (setq V (make-matrix (array-dimension R_nonneg 0) 0))
(setq R_free (make-matrix (array-dimension R_nonneg 0) 0))))
(R_free (progn (setq V (make-matrix (array-dimension R_free 0) 0))
(setq R_free (make-matrix (array-dimension R_free 0) 0))))
(t (return-from cddlib-V-to-H (list (make-matrix 0 0) (make-matrix 0 0) (make-matrix 0 0) (make-matrix 0 0)))))
(let ((m_eq (instantiate integer-vector 1))
(m_ineq (instantiate integer-vector 1))
(d (array-dimension V 0))
)
(if (= 0 (_cddlib-V-to-H
(array-entity V)
(array-entity R_nonneg)
(array-entity R_free)
d
(array-dimension V 1)
(array-dimension R_nonneg 1)
(array-dimension R_free 1)
m_eq
m_ineq
verbose))
(let ((A_eq (make-matrix (elt m_eq 0) d))
(b_eq (instantiate float-vector (elt m_eq 0)))
(A_ineq (make-matrix (elt m_ineq 0) d))
(b_ineq (instantiate float-vector (elt m_ineq 0)))
)
(_cddlib-get-H
(array-entity A_eq)
b_eq
(array-entity A_ineq)
b_ineq
d
(elt m_eq 0)
(elt m_ineq 0))
(list A_eq b_eq A_ineq b_ineq)
)
nil)
)
)

(_cddlib-initialize)
Loading