Giter Club home page Giter Club logo

jskeus's Introduction

Join the chat at https://gitter.im/euslisp/jskeus

This repository contains software developed and used by JSK at The University of Tokyo.

1. Getting started

1.1 Install binary (RECOMMENDED: Ubuntu 18.04)

1.1.1 Setup ROS repository

Please set ROS_DISTRO environment variable to your ROS distro. For example, if you use 18.04, run export ROS_DISTRO=melodic.

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'
wget http://packages.ros.org/ros.key -O - | sudo apt-key add -
echo "source /opt/ros/$ROS_DISTRO/setup.bash" >> ~/.bashrc
sudo apt-get update

1.1.2 Install Euslisp

sudo apt-get install ros-$ROS_DISTRO-euslisp

1.2 Install via Homebrew (OSX)

brew install euslisp/jskeus/jskeus

2 Playing with Demo programs

2.1 Motion generation

$ irteusgl irteus/demo/demo.l

and type any command, such as '(crank-motion)' or '(dual-arm-ik)'

full-body-ik dual-arm-ik dual-manip-ik crank-motion hand-grasp hanoi-arm particle null-space-ik

2.2 Robots and objects models

$ irteusgl models/irt-all-robots.l "(make-all-robots)"

all robots

$ irteusgl models/irt-all-objects.l "(make-all-objects)"

all objects

3 Getting started for ROS and PR2 users

3.1 Install binaries (RECOMMENDED: Ubuntu 14.04)

3.1.1 Setup ROS repository

You can skip this procedure if you have already setup your ROS system

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list'
wget http://packages.ros.org/ros.key -O - | sudo apt-key add -
echo "source /opt/ros/$ROS_DISTRO/setup.bash" >> ~/.bashrc
sudo apt-get update

3.1.2 Install pr2/euslisp programs

sudo apt-get install ros-$ROS_DISTRO-pr2eus

3.3 Running demo programs

3.3.1 Visualization of pr2 robot

$ rosrun euscollada pr2.sh

./pr2.sh

3.3.2 For real PR2 users

After you set ROS_MASTER_URI and ROS_IP to your PR2 robot (or simulated PR2), try the following command:

$ roscd pr2eus
;; read joint state and display in euslisp viewer, print jacobian
$ roslaunch ./pr2-read-state.launch
;; sample program to show how to make pr2 posture from euslisp, THIS WILL MOVE REAL ROBOT, CAUTION!!!
$ roslaunch ./pr2-send-joints.launch

You can use our script to set ROS_MASTER_URI and ROS_IP

$ source `rospack find jsk_tools`/src/bashrc.ros
$ rossetrobot pr1012.jsk.com # change to your environment
$ rossetip

./pr2-read-state.launch

Have a look at roseus package in http://github.com/jsk-ros-pkg repository for ROS client library for euslisp

3.4 Support and Trouble Shooting

Open an issue on our issue tracker if something doesn't work as expected, or if you want new features implemented.

Use the pull requests system to send us solutions for the issues so we can implement them in this repository.

3.5 Online Documents (Currently only Japanese is available)

See online manual

PDF files are also available from here

3.6 Install euslisp from source code (EXPERTS ONLY)

3.6.1 Installing dependent libraries

For Ubuntu users:

$ sudo apt-get install git make gcc g++ libjpeg-dev libxext-dev libx11-dev libgl1-mesa-dev libglu1-mesa-dev libpq-dev libpng12-dev xfonts-100dpi xfonts-75dpi gsfonts-x11 texlive-fonts-extra xfonts-100dpi-transcoded xfonts-75dpi-transcoded msttcorefonts pkg-config libbullet-dev

For Mac OSX users using Homebrew:

$ brew install jpeg libpng mesalib-glw wget bullet

'''NOTE:''' EusLisp needs X11 Library, but Mac OSX mountain lion no longer supports it. Given this case, you'll need to install XQuartz.

Also for Mac OSX lion (or older) users it's better to install the latest XQuartz for safety and compatibility reasons.

(If XQuartz is older than 2.7.3, the installation of EusLisp will fail. You should install the latest XQuartz.)

For Raspberry Pi users using debian(Raspbian "wheezy"):

$ sudo apt-get install git gcc g++ libjpeg62-dev libxext-dev libx11-dev libgl1-mesa-dev libglu1-mesa-dev libpq-dev libpng12-dev xfonts-100dpi xfonts-75dpi
## additional install for using OpenGL on raspberry pi
$ sudo apt-get install libgl1-mesa-dri xserver-xorg-video-vesa xutils

For Cygwin(only works with 32bit systems)

Packages listed below should be intalled using setup.exe.

git, gcc-core, gcc-g++, make
libjpeg-devel, libpng-devel
libGL-devel, libGLU-devel, libglut-devel, libX11-devel, libXext-devel
xorg-server
X-start-menu-icons (for startxwin.exe)
mesa-demo (for glxinfo)
bitmap fonts (all bitmap font packages -75dpi, -100dpi, -misc )

3.6.2 Downloading and building EusLisp

$ git clone http://github.com/euslisp/jskeus jskeus
$ cd jskeus
$ make
you will see instructions to add EUSDIR, ARCHDIR, PATH, LD_LIBRARY_PATH environment variable in your bashrc to invoke euslisp program
$ echo "source ~/bashrc.eus" >> ~/.bashrc

3.6.3 Install ROS and jsk-ros-pkg repository

See http://wiki.ros.org/$ROS_DISTRO/Installation/Source for more details

$ sudo apt-get install python-rosdep python-rosinstall-generator python-wstool python-rosinstall build-essential
$ mkdir -p ~/ros_catkin_ws/src
$ cd ~/ros_catkin_ws/src
$ wstool init src https://raw.githubusercontent.com/jsk-ros-pkg/jsk_pr2eus/master/.rosinstall
$ wget https://raw.githubusercontent.com/jsk-ros-pkg/jsk_travis/master/rosdep-install.sh
$ sh ./rosdep-install.sh
$ cd ..
$ catkin_make
$ source devel/setup.bash

3.7 Acknowledgment

Software in this repository is based on the EusLisp language.

jskeus's People

Contributors

708yamaguchi avatar affonso-gui avatar clalancette avatar eisoku9618 avatar ericlesaquiles avatar furushchev avatar garaemon avatar gitter-badger avatar h-kamada avatar inabajsk avatar iory avatar k-kimura avatar k-okada avatar knorth55 avatar mmurooka avatar naoki-hiraoka avatar otl avatar oxcabe avatar pazeshun avatar rkoyama1623-2021 avatar s-noda avatar sasabot avatar snozawa avatar terasawa avatar tkmtnt7000 avatar tnoriaki avatar wkentaro avatar ykawamura96 avatar yoheikakiuchi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

jskeus's Issues

コンパイル失敗対処法

This post was originally posted at http://sourceforge.net/p/jskeus/tickets/3

sudo apt-get install subversion gcc g++ libjpeg62-dev libxext-dev libx11-dev libgl1-mesa-dev libglu1-mesa-dev libpq-dev libpng12-dev xfonts-100dpi xfonts-75dpi msttcorefonts

lsb_release -a

sudo apt-get install libjpeg62-dev
sudo apt-get remove libjpeg-turbo8-dev libjpeg-dev
sudo apt-get remove libjpeg-turbo8-ddev
sudo apt-get remove libjpeg8-dev
sudo apt-get install ubuntu-restricted-extras

dlopen error : jskeus/eus/Cygwin/lib/libirteus on Cygwin [sf#14]

This post was originally posted at http://sourceforge.net/p/jskeus/tickets/14

% echo $PATH
/usr/bin:/home/Administrator/prog/jskeus/eus/Cygwin/bin:/usr/local/bin:/usr/bin:/usr/bin:/usr/bin:/home/Administrator/prog/jskeus/eus/Cygwin/bin:/usr/local/bin:/usr/bin:/usr/bin:/usr/bin:/home/Administrator/prog/jskeus/eus/Cygwin/bin:/usr/local/bin:/usr/bin:/usr/bin:/usr:/usr:/usr
% echo $LD_LIBRARY_PATH
/usr/bin:/usr/lib:/home/Administrator/prog/jskeus/eus/Cygwin/bin

% irteusgl
configuring by "/home/Administrator/prog/jskeus/eus/lib/eusrt.l"
;; readmacro ;; object ;; packsym ;; common ;; constants ;; stream ;; string ;; loader ;; pprint ;; process ;; hashtab ;; array ;; mathtran ;; eusdebug ;; eusforeign ;; coordinates ;; tty ;; history ;; toplevel ;; trans ;; comp ;; builtins ;; par ;; intersection ;; geoclasses ;; geopack ;; geobody ;; primt ;; compose ;; polygon ;; viewing ;; viewport ;; viewsurface ;; hid ;; shadow ;; bodyrel ;; dda ;; helpsub ;; eushelp ;; xforeign ;; Xdecl ;; Xgraphics ;; Xcolor ;; Xeus ;; Xevent ;; Xpanel ;; Xitem ;; Xtext ;; Xmenu ;; Xscroll ;; Xcanvas ;; Xtop ;; Xapplwin
connected to Xserver DISPLAY=:0.0
X events are being asynchronously monitored.
;; pixword ;; RGBHLS ;; convolve ;; piximage ;; pbmfile ;; image_correlation ;; oglforeign ;; gldecl ;; glconst ;; glforeign ;; gluconst ;; gluforeign ;; glxconst ;; glxforeign ;; eglforeign ;; eglfunc ;; glutil ;; gltexture ;; glprim ;; gleus ;; glview ;; toiv-undefined ;; fstringdouble BINLOAD cannot dlopen: No such file or directory
irteusgl: ERROR th=0 file #P"/home/Administrator/prog/jskeus/eus/Cygwin/lib/libirteus" not found in (load-library (format nil "AA/lib/libirteus" eusdir (unix:getenv "ARCHDIR")) '("irtmath" "irtutil" "irtc" "pgsql"))E:

After patch to URL: http://jskeus.svn.sourceforge.net/svnroot/jskeus/trunk/Makefile

% echo $PATH
/home/Administrator/prog/jskeus/eus/Cygwin/bin:/home/Administrator/prog/jskeus/eus/Cygwin/lib:/usr/bin
% echo $LD_LIBRARY_PATH
/home/Administrator/prog/jskeus/eus/Cygwin/bin:

% irteusgl
configuring by "/home/Administrator/prog/jskeus/eus/lib/eusrt.l"
;; readmacro ;; object ;; packsym ;; common ;; constants ;; stream ;; string ;; loader ;; pprint ;; process ;; hashtab ;; array ;; mathtran ;; eusdebug ;; eusforeign ;; coordinates ;; tty ;; history ;; toplevel ;; trans ;; comp ;; builtins ;; par ;; intersection ;; geoclasses ;; geopack ;; geobody ;; primt ;; compose ;; polygon ;; viewing ;; viewport ;; viewsurface ;; hid ;; shadow ;; bodyrel ;; dda ;; helpsub ;; eushelp ;; xforeign ;; Xdecl ;; Xgraphics ;; Xcolor ;; Xeus ;; Xevent ;; Xpanel ;; Xitem ;; Xtext ;; Xmenu ;; Xscroll ;; Xcanvas ;; Xtop ;; Xapplwin
connected to Xserver DISPLAY=:0.0
X events are being asynchronously monitored.
;; pixword ;; RGBHLS ;; convolve ;; piximage ;; pbmfile ;; image_correlation ;; oglforeign ;; gldecl ;; glconst ;; glforeign ;; gluconst ;; gluforeign ;; glxconst ;; glxforeign ;; eglforeign ;; eglfunc ;; glutil ;; gltexture ;; glprim ;; gleus ;; glview ;; toiv-undefined ;; fstringdouble irtmath irtutil irtc pgsql
;; extending gcstack 0x11f5b48[16374] --> 0x13e4238[32748] top=3871
irtgeo euspqp pqp irtscene irtmodel irtdyna irtrobot irtsensor irtx eusjpeg euspng png irtimage irtglrgb irtgl irtviewer
EusLisp 8.26( 608M) for Cygwin created on (Tue Dec 28 15:35:11 2010)
irteusgl$ exit

To compile jskeus on Cygwin on 64bit Windows OS (Windows 7) [sf#15]

This post was originally posted at http://sourceforge.net/p/jskeus/tickets/15

Support for Cygwin on 64bit Windows OS (Windows 7)

uname -s returns "CYGWIN_NT-6.1.-WOW64" in Cygwin on Windows 7 64bit,
(uname -a returns "CYGWIN_NT-6.1-WOW64 hostname 1.7.7(0.230/5/3) 2010-08-31 09:58 i686 Cygwin")
so I think these lines should be included in http://jskeus.svn.sourceforge.net/svnroot/jskeus/trunk/Makefile

URL: http://jskeus.svn.sourceforge.net/svnroot/jskeus/trunk/Makefile

Index: Makefile

--- Makefile (revision 608)
+++ Makefile (working copy)
@@ -20,6 +20,10 @@
export ARCHDIR=Cygwin
export MAKEFILE=Makefile.Cygwin
endif
+ifeq ($(OS),CYGWIN_NT-6.1-WOW64)

  • export ARCHDIR=Cygwin
  • export MAKEFILE=Makefile.Cygwin
    +endif
    ifeq ($(OS),Darwin)
    export ARCHDIR=Darwin
    export MAKEFILE=Makefile.Darwin

cascaded-coordsに:replace-coordsを実装する [sf#23]

This post was originally posted at http://sourceforge.net/p/jskeus/tickets/23

:newcoordsはアドレス渡し

coordinatesのメソッド :newcoords はアドレス渡しなので要注意
1.jskrbeusgl$ setq a (make-coords)
#<coordinates #X9a50a10 0.0 0.0 0.0 / 0.0 0.0 0.0>
2.jskrbeusgl$ setq b (make-coords)
#<coordinates #X9a50a94 0.0 0.0 0.0 / 0.0 0.0 0.0>
3.jskrbeusgl$ send b :newcoords a
#<coordinates #X9a50a94 0.0 0.0 0.0 / 0.0 0.0 0.0>
4.jskrbeusgl$ send b :rotate pi/2 :x
#<coordinates #X9a50a94 0.0 0.0 0.0 / 0.0 0.0 1.571>
5.jskrbeusgl$ a
#<coordinates #X9a50a10 0.0 0.0 0.0 / 0.0 0.0 1.571>

coordinatesでは:replece-coordsを使うとコピーされる。casdaded-coordsには実装がないので、使わない方が無難。
cascaded-coordsに:replace-coordsを実装して、
:newcoords -> 参照渡し
:replace-coords -> コピー渡し というようにしてはどうかと思います。

Index: l/coordinates.l
===================================================================
--- l/coordinates.l     (リビジョン 629)
+++ l/coordinates.l     (作業コピー)
@@ -361,6 +361,9 @@
     (send-super :newcoords c p)
     (send self :changed)
     self)
+ (:replace-rot (r) (prog1 (send-super :replace-rot r) (send self :changed)))
+ (:replace-pos (p) (prog1 (send-super :replace-pos) (send self :changed)))
+ (:replace-coords (c &optional p) (prog1 (send-super :replace-coords c p) (send self :changed)))
  (:changed ()
     (unless changed            ;Is this the first change?
        (setf changed t)        ;Then, propagate changed signal.

eusモデルをcolladaに変換する際に,質量情報も保持したい [sf#38]

This post was originally posted at http://sourceforge.net/p/jskeus/tickets/38

eusモデルをgazeboに描画しようとしていてurdfに変換しないといけないので,
[eusモデル] == convert-rbrain-model-to-collada ==> [collada] ==
collada_to_urdf ==> [urdf]
の順番にurdfを作成しました.

convert-rbrain-model-to-collada の処理の中で質量情報が無くなってしまいurdfファイルに
手書きで質量情報を加える必要がありました.
(加えたらgazebo上にJointありモデルが描画できました)

convert-rbrain-model-to-collada で質量情報を維持するためには,
質量情報に関するcolladaタグ(library_physics_modelsなど)を追加するように
jsk-ros-pkg/euslisp/jskeus/irteus/irtcollada.l
を編集する必要があると思います.

look-at-targetにcoordsを入れられるようにしたい [sf#21]

This post was originally posted at http://sourceforge.net/p/jskeus/tickets/21

https://sourceforge.net/p/jsk-ros-pkg/code/4103/
にある,

  • (send pr2 :inverse-kinematics (send chair :handle)
  • :link-list (list
  • (send pr2 :link-list (send pr2 :larm :end-coords :parent))
  • (send pr2 :link-list (send pr2 :rarm :end-coords :parent)))
  • :move-target (list (send pr2 :larm :end-coords) (send pr2 :rarm :end-coords))
  • :look-at-target t
  • )
  • (send ri :ang
    ですが,両手の真ん中,とか,対象物の先,をみるためにlook-at-targetにcoordsをいれてもいい気がしました.
    いまはt/nilが想定されていそうです.

デモプログラムが実行できない [sf#5]

This post was originally posted at http://sourceforge.net/p/jskeus/tickets/5

http://sourceforge.net/tracker/?func=detail&aid=3575213&group\_id=337851&atid=1415198
を見て、makeし、Macにインストールするところまではいったのですが、デモプログラムを実行すると
irteus/demo/demo.l
configuring by "/Users/kodai/jskeus/eus/lib/eusrt.l"
;; readmacro ;; object ;; packsym ;; common ;; constants ;; stream ;; string ;; loader ;; pprint ;; process ;; hashtab ;; array ;; mathtran ;; eusdebug ;; eusforeign ;; coordinates ;; tty ;; history ;; toplevel ;; trans ;; comp ;; builtins ;; par ;; intersection ;; geoclasses ;; geopack ;; geobody ;; primt ;; compose ;; polygon ;; viewing ;; viewport ;; viewsurface ;; hid ;; shadow ;; bodyrel ;; dda ;; helpsub ;; eushelp ;; xforeign ;; Xdecl ;; Xgraphics ;; Xcolor ;; Xeus ;; Xevent ;; Xpanel ;; Xitem ;; Xtext ;; Xmenu ;; Xscroll ;; Xcanvas ;; Xtop ;; Xapplwin
connected to Xserver DISPLAY=/tmp/launch-GHhqWQ/org.x:0
X events are being asynchronously monitored.
;; pixword ;; RGBHLS ;; convolve ;; piximage ;; pbmfile ;; image_correlation ;; oglforeign ;; gldecl ;; glconst ;; glforeign ;; gluconst ;; gluforeign ;; glxconst ;; glxforeign ;; eglforeign ;; eglfunc ;; glutil ;; gltexture ;; glprim ;; gleus ;; glview ;; toiv-undefined ;; fstringdouble irtmath irtutil irtc irtgeoc irtgraph pgsql irtgeo euspqp pqp irtscene irtmodel irtdyna irtrobot irtsensor irtbvh irtcollada irtpointcloud irtx eusjpeg euspng png irtimage irtglrgb
;; extending gcstack 0x1069cd000[16374] --> 0x106daa000[32748] top=36ae
irtgl irtviewer
EusLisp 8.26(r580 861) for Darwin created on Kodai-Mac.local(Tue Oct 9 17:28:02 JST 2012)

とターミナル上で表示され、X Window Systemが起動するのですが白い画面のままで何も表示されず、X Window Systemが応答しなくなります。
Lisp言語は動かせます。
OSのバージョンはMacOS X 10.7.5です

send *robot* :larm :inverse-kinematics ... :use-torso t [sf#11]

This post was originally posted at http://sourceforge.net/p/jskeus/tickets/11

send robot :larm :inverse-kinematics ... :use-torso t
を使いたいのですが,以下のパッチで出来る気がします.
がこれでいいでしょうか?いままではどうしていましたか?

k-okada@kokada-t430s:~/ros/fuerte/jsk-ros-pkg/euslisp$ svn diff jskeus

Index: jskeus/irteus/irtrobot.l

--- jskeus/irteus/irtrobot.l (リビジョン 883)
+++ jskeus/irteus/irtrobot.l (作業コピー)
@@ -101,11 +101,15 @@
(coerce (mapcar #'(lambda (l) (send l :joint :joint-angle))
(send self limb)) float-vector)))
(:inverse-kinematics

  • (let* ((link-list (if (memq :link-list args)
  •             (cadr (memq :link-list args))
    
  •           (send self :link-list
    
  •             (send self limb :end-coords :parent)
    
  •             (send self limb :root-link))))
    
  • (let* ((link-list (cond ((memq :link-list args)
  •                              (cadr (memq :link-list args)))
    
  •                             ((memq :use-torso args)
    
  •                              (send self :link-list
    
  •                                    (send self limb :end-coords :parent)))
    
  •                             (t
    
  •                              (send self :link-list
    
  •                                    (send self limb :end-coords :parent)
    
  •                                    (send self limb :root-link)))))
    

原因不明のエラー [sf#7]

This post was originally posted at http://sourceforge.net/p/jskeus/tickets/7

3dof-robot(講義で扱ったもの)をつくり、講義の資料どおりに
(setq c (make-cascoords :pos #(100 0 0) :rpy (float-vector 0 pi 0)))
(send r :inverse-kinematics c
:link-list (send r :link-list (send r :end-coords :parent))
:move-target (send r :end-coords)
:translation-axis t
:rotation-axis t
:debug-view t)
としたら、
irteusgl 0 error: vector expected in (send r :inverse-kinematics c :link-list (send r :link-list (send r :end-coords :parent)) :move-target (send r :end-coords) :translation-axis t :rotation-axis t :debug-view t)
とエラーが出ます。どういうことでしょうか。

jskeusで文字列を置換する方法 [sf#18]

This post was originally posted at http://sourceforge.net/p/jskeus/tickets/18

jskeusで簡単に文字列をおきかえる関数か、
一行くらいでできる方法はありますでしょうか。
(defun tmp-reg-replace
(str from to)
(let ((ret ""))
(dotimes (i (length str))
(if (string= from (format nil "~C" (elt str i)))
(setq ret (format nil "AA" ret to))
(setq ret (format nil "AC" ret (elt str i)))
))
ret))
(tmp-reg-replace "aa-bb-cc" "-" "_")
のような感じです。
これに限らず文字列操作の機能はちょっと欲しいです。

kbhitを使えるようにする [sf#32]

This post was originally posted at http://sourceforge.net/p/jskeus/tickets/32

EuslispでEnterを押さないで入力を読めるプログラムを作りたい
という要望が時どきあります.

添付のようなプログラムを使えばうまくいきそうですので,eus本体/irteusに入れても
いいかな,と思いますが,どうでしょうか.

また,sericom周りもついでに入れることになりそうですが,これってどれぐらいの人が
つかっているものですかね.

===

この質問は何回かでていて,各自それぞれ解法がありそうですが,
添付のプログラムでどうでしょうか?
http://hatenaclang.blogspot.jp/2011/03/kbhit.html
を見て作りました.windowsのkbhitと同じ振る舞いになるようです.
他の方法を持っている人は教えて下さい.

プログラム中のコメントにありますがeuslib/jskeus/sericom.l にtermioの定義がありますが,
irteus側に移してもいいのかな.どうでしょうか?使っている人,いますか.

dual-arm-ikでlink-listでデフォルト値を入れる [sf#20]

This post was originally posted at http://sourceforge.net/p/jskeus/tickets/20

https://sourceforge.net/p/jsk-ros-pkg/code/4103/
にある,

  • (send pr2 :inverse-kinematics (send chair :handle)
  •    :link-list (list
    
  •                  (send _pr2_ :link-list (send _pr2_ :larm :end-coords :parent))
    
  •                  (send _pr2_ :link-list (send _pr2_ :rarm :end-coords :parent)))
    
  •    :move-target (list (send _pr2_ :larm :end-coords) (send _pr2_ :rarm :end-coords))
    
  •    :look-at-target t
    
  •    )
    
  • (send ri :ang
    ですが,link-listがなくてもmove-targetから推論してくれるようになっていてもいい気がしました.

無限回転の関節リミットを180から広げる [sf#25]

This post was originally posted at http://sourceforge.net/p/jskeus/tickets/25

無限回転の関節リミットはいま180度になっていますが,そうすると,使いてくても使えない領域がでてしまいます.
具体的には例えば

(send *pr2* :angle-vector #f(23.2337 0.001093 1.09537 0.338847 -24.3546 0.076642 -41.9973 0.030048 -27.0298 -0.629306 -89.9021 -121.542 -179.62 -50.3022 -89.6761 3.07159 49.7042))                                                        
(send *pr2* :rarm :move-end-rot -10 :z)

がダメです.ここを180にする理由は無いので270に広げたいと思います.

あるいは180にしておいて,ikを説くときに180を超えると-180に戻す,あるいはIKを説くときだけ180を超えてもいいようにする,という作戦もあるきがしますが,
その場合,それをロボットに指令するときにどうやって司令したらいいか悩みます.
いまはロボットへの指令はリミットである180度を超えないようにしています.

stringの比較関数の挙動がマニュアルと違う。 [sf#51]

This post was originally posted at http://sourceforge.net/p/jskeus/tickets/51

string<, string<=, string>, string>=関数の挙動がjmanual.pdfでは、

str1 と str2 を先頭から順番に比較して、比較演算が成立した位置を返す。もし、成立しなければ、NIL
を返す。文字の比較は、その文字のコードにに対して行なわれるため、A<Z である。。

とあるが、実際にはtとnilしか返ってこない。

ドキュメンテーションツール [sf#8]

This post was originally posted at http://sourceforge.net/p/jskeus/tickets/8

doctoolsでスロット変数のdocumentation部分を表示するようにして, かつrstで出して,pdf/htmlに変換する,という流れがいいと思います.
doctools

euslib/llib/doctools.l
を直しました。

irteusgl doctools.l
(html-jsk-classes)
として、
gnome-open index.html
とすると、irteusgl で定義されているクラス、(jsk)で定義されているクラス、(rbrain)で
定義されているクラスの3つのリンクを含んだindex.htmlページが表示されます。

$ irteusgl (html-doc-classes "index.html" (jsk-libraries) (rbrain-libraries))

と同じものです。
$ (html-doc-classes "aaa.html" (test1) (test2) ... (testn))
は、(test1) ... (testn)のそれぞれで追加で定義されるクラスの差分の
ドキュメントファイルを生成し、それぞれのファイルへのリンクを含んだ
aaa.htmlファイルを作ります。

なので、(jsk),(rbrain)のそれぞれで定義されるクラスのhtmlを作るには
irteusgl doctools.l
と、irteusglで使う必要があります。

documentation.l

今度は
defun symbol [documentation] lambda-list . body
のdocumentationをただ表示するだけ,という作戦にでてみました.
以前はdoxygenを使ってクラス構造を表示しようとしていましたが,
結局ドキュメントすら出来てないということで,一番簡単なシンプル
バージョンを狙います.
(じつはeus/doc/funcs というファイルがあって,これにdocumentatoinが入れば出来ればOK)

cd euslib/irteus_proposals/
irteusgl documentation.l > documentation.txt
documentation.txt行頭の;;部分を抜いて行頭が
=====ここから
public functions

!
=====ここまで
となるようにして,
rst2pdf documentation.txt
として5分ぐらいかな?まつとと,添付のpdfが作られます.

eus/lisp/l/eusdebug.l に定義されている

pfuncs

という関数で,eus/doc/funcs というファイルが作られていそうだ.

ロードしたhash-tableが使えない

This post was originally posted at http://sourceforge.net/p/jskeus/tickets/9

以下のような話があります。

(setq ht (make-hash-table))
(setf (gethash :test ht) '(1 2 3))
;; (1 2 3)
(gethash :hoge ht) ;; 登録されてないキーに対してはnilが返る
;; nil
(dump-loadable-structure "test.l" ht) ;; 一度ファイルに保存
(load "test.") ;; 再度ロード
(gethash :test ht) ;; 登録されているキーの値は読み出せる
;; (1 2 3)
(gethash :hoge ht) ;; 登録されていないキーの値を取得しようとすると処理が返ってこない

原因はhash-tableの持っている、empty, deletedのシンボルがgensymされたパッケージを持たないシンボルで
readする度に作られてポインタが変わってしまうためです。
hrp2のmin-max-tableでは、emptyをnilにして対応しています。

作戦としては、以下があるでしょうか。

  1. 標準で empty -> nil / deleted -> t にする (この場合、hashのkeyにnil,tが使えない)
  2. 標準でempy/deletedにどこかのパッケージに属する、read毎に変わらないシンボルを設定する
  3. hash-table 用の dump/load 関数を作る

2)かなと思います。

Compile jskeus on Darwin(Mountain Lion 10.8.2, Build 12C54) [sf#16]

This post was originally posted at http://sourceforge.net/p/jskeus/tickets/16

Index: irteus/irtgl.l

--- irteus/irtgl.l (revision 861)
+++ irteus/irtgl.l (working copy)
@@ -28,7 +28,12 @@

(let (gl-lib)
#+:darwin

  • (setq gl-lib ( load-foreign "/opt/local/lib/libGL.dylib"))
  • (progn
  • (cond
    
  •  ((probe-file "/opt/local/lib/libGL.dylib")
    
  •   (setq gl-lib ( load-foreign "/opt/local/lib/libGL.dylib")))
    
  •  (t
    
  •   (setq gl-lib ( load-foreign "/opt/X11/lib/libGL.dylib")))))
    

Index: irteus/irtx.l

--- irteus/irtx.l (revision 861)
+++ irteus/irtx.l (working copy)
@@ -53,7 +53,9 @@

(let (x-lib pname)
#+:darwin

  • (setq pname "/opt/local/lib/libX11.dylib")
  • (if (probe-file "/opt/local/lib/libX11.dylib")
  •  (setq pname "/opt/local/lib/libX11.dylib")
    
  • (setq pname "/opt/X11/lib/libX11.dylib"))

irteusglの関数transparentでメモリーリーク

This post was originally posted at http://sourceforge.net/p/jskeus/tickets/26

小島光晴です。

お世話になっています。

irteusglの関数transparentでopenglのdisplay listをきちんと開放していないためにメモリーリークが起きているようです。

テストプログラムとこちらで考えたパッチをお送りしますので、
ご検討のほどよろしくお願い致します。

Rm command must be called with -f option. [sf#1]

This post was originally posted at http://sourceforge.net/p/jskeus/tickets/1

If there are some errors in previous compiling, "make clean" fails.
So I think rm command must be called with -f option.

URL: http://jskeus.svn.sourceforge.net/svnroot/jskeus/trunk/Makefile

Index: Makefile

--- Makefile (revision 608)
+++ Makefile (working copy)
@@ -74,7 +74,7 @@
cd irteus; make

clean:

  • -rm bashrc.eus manual.pdf jmanual.pdf
  • -rm -f bashrc.eus manual.pdf jmanual.pdf
    if [ -e irteus ]; then cd irteus; make clean ; fi
    if [ -e eus/lisp ]; then cd eus/lisp; make clean ; fi

URL: http://jskeus.svn.sourceforge.net/svnroot/jskeus/trunk/irteus/Makefile

Index: irteus/Makefile

--- irteus/Makefile (revision 608)
+++ irteus/Makefile (working copy)
@@ -160,7 +160,7 @@
chmod a-x Makefile* *.l *.c
(cd PQP;make clean)
(cd $(EUSDIR)/lisp/image/jpeg/; make clean)

  •   -rm $(EUSDIR)/lib/llib/pgsql.c $(EUSDIR)/lib/llib/pgsql.h
    
  •   -rm -f $(EUSDIR)/lib/llib/pgsql.c $(EUSDIR)/lib/llib/pgsql.h
    

$(OBJDIR)/irtmath.$(OSFX): irtmath.l
$(OBJDIR)/irtutil.$(OSFX): irtutil.l

無限回転関節でのIKで,関節リミットを超える [sf#29]

This post was originally posted at http://sourceforge.net/p/jskeus/tickets/29

無限関節は便宜的にリミットを+−270としていますが,
IKを解くときに関節リミットを超えているようです


File Edit Options Buffers Tools Lisp Help                                                                                                       
(load "package://pr2eus/pr2-interface.l")

(defun hoga nil
  (pr2)
  (setq *b* (make-cube 30 30 100))
  (setf (get *b* :face-color) :red)
  (send *b* :move-to (send (send *pr2* :larm :end-coords) :copy-worldcoords) :world)
  (send *b* :translate #f(0 0 50))
  (send (send *pr2* :larm :end-coords) :assoc *b*)
  (objects (list *pr2* *b*)))

(defun hoge nil
  ;; setup                                                                                                                                      
  (setq av0 #f(92.7342 37.2226 12.3315 46.6177 -44.4835 187.553 -30.9676 128.145 -30.7465 10.2422 -59.3904 -105.095 -89.2577 -28.9264 174.513 34.6816 27.3987)
        av1 #f(55.2304 122.301 14.1074 126.756 -121.311 -90.6499 -52.6751 34.2688 -30.7465 10.2422 -59.3904 -105.095 -89.2577 -28.9264 174.513 71.0005 52.6066))
  (send *pr2* :angle-vector av0)
  (setq c0 (send *pr2* :larm :end-coords :copy-worldcoords))
  (send *pr2* :angle-vector av1)
  (setq c1 (send *pr2* :larm :end-coords :copy-worldcoords))
  ;; do ik                                                                                                                                      
  (send *pr2* :angle-vector av0)
  (send *pr2* :larm :inverse-kinematics c1
        :move-joints-hook
        #'(lambda ()
            (print (send *pr2* :larm :angle-vector))
            (send *irtviewer* :draw-objects)
            t)

arm (rapsberry pi) でコンパイルができるようにする

This post was originally posted at http://sourceforge.net/p/jskeus/tickets/35

arm のマシンでコンパイルできるようしたい。

添付のパッチはdebianを入れたrapsberry piでコンパイルできるようにしたもの。

注意点:
rapsberry piでのnativeのGLがOpenGL ESなのでnativeでOpenGLの描画ができない
(他のマシンのXに飛ばすと出来る、未確認だがdirect renderingをやめればできる?)

displayがない状態でobjects, send *irtviewer* :draw-displayが使えるようにする. [sf#33]

This post was originally posted at http://sourceforge.net/p/jskeus/tickets/33

Nozawa : ディスプレイなしのものをかいてみました。
ちょっと微妙かもしれないです。

nozawa@nozawa-ThinkPad-T430:~/prog/euslib/demo/ik$ DISPLAY= irteusgl
3.irteusgl$ load "/tmp/no-display.l
t
4.irteusgl$ make-irtviewer

5.irteusgl$ (objects (list (make-cube 20 20 20)))
;; (objects (#<body #X5c18030 (:cube 20.0 20.0 20.0) 0.0 0.0 0.0 / 0.0 0.0 0.0>)) was called, but no display is found.
(#<body #X5c18030 (:cube 20.0 20.0 20.0) 0.0 0.0 0.0 / 0.0 0.0 0.0>)
6.irteusgl$ send irtviewer :draw-objects
nil
7.irteusgl$ (send (make-coords) :draw-on :flush t)
nil
8.irteusgl$

rotation-angleでnanが返る [sf#6]

This post was originally posted at http://sourceforge.net/p/jskeus/tickets/6

euslispのrotation-angleでnanが返ってくることがあります。
具体的には下のようになります。

56.E15-irteusgl$ (setq rot (make-coords :rpy #f(-1.220e-08 -5.195e-09 1.333e-09)))
#<coordinates #X6de2b18 0.0 0.0 0.0 / -1.220e-08 -5.195e-09 1.333e-09>
57.E15-irteusgl$ rotation-angle (send rotbag :rot)
(1.332685e-08 #f(-nan -nan 0.0))

check self-collision-check in all :inverse-kinematics methods [sf#40]

This post was originally posted at http://sourceforge.net/p/jskeus/tickets/40

euslispの:inverse-kinemaitcsメソッドで、
(send robot :self-collision-check)
をデフォルトで追加して、
(and ik-solved (not collision-p))
みたいなかんじで、IKの解けたかどうかチェックのところで
self-collision-checkでコリジョンをデフォルトでチェックすると
よさそうなのですが、どうでしょうか。

ただ、ロボットモデルの形状によっては、
(send robot :self-collision-check)
で実際にはカウントしたくない自己干渉もでてきてしまう気がします。
(send (pr2) :self-collision-check)
するといっぱい自己干渉リストがかえってきます。

なので、

Index: irtmodel.l

--- irtmodel.l (リビジョン 967)
+++ irtmodel.l (作業コピー)
@@ -1792,6 +1792,7 @@
(t (make-list (length move-target) :initial-element (deg2rad 1)))))
(union-link-list)
(centroid-thre 1.0) (target-centroid-pos) (centroid-offset-func)

  •              (use-self-collision-check nil)
              (dump-command t)
              &allow-other-keys)
    
    ;; target-coords, move-target, rotation-axis, translation-axis, link-list
    @@ -1917,7 +1918,8 @@
    ;; reset weight
    (send self :reset-joint-angle-limit-weight-old union-link-list)
    ;; check solved or not
  • (if (or success (not revert-if-fail))
    
  • (if (and (or success (not revert-if-fail))
    
  •          (if use-self-collision-check (send self :self-collision-check) t))
      (send self :angle-vector)
    (progn
     (when warnp
    

のようにuse-self-collision-checkみたいに引数でチェックするかどうか選べるようにして、
今までのIKとの互換性のためにデフォルトでnil,
形状情報的に意図した自己干渉計算ができそうなロボットでは、
:inverse-kinematicsメソッドを上がいてデフォルトでuse-self-collision-chekをtにする、
というのはいかがでしょうか。
(IKが解けないメッセージで、普通にIkがとけないのか
自己干渉で返り血nilにしているのか、も表示する必要がありそうです)

:move-to をコピーにする [sf#24]

This post was originally posted at http://sourceforge.net/p/jskeus/tickets/24

[#23] と連動していますが、:replace-coordsでコピー渡しできるようになったら、
:move-to 内部の:newcoordsを使っている部分を:replace-coordsに置き換えると、
以下の問題がなくなります。:move-to が参照渡しである動作を前提としているコードはほぼ無いように思います。

(send a :move-to b :world)のあとaやbのcoordsを動かすと,bやaのcoordsも同時に動く.:localの時はaやbを動かしても動かない.
:worldを指定すると:newcoordsになるため。-> コピーに変更した方が良くないか??

91.jskrbeusgl$ (setq a (make-coords))

<coordinates #X89243f8 0.0 0.0 0.0 / 0.0 0.0 0.0>

92.jskrbeusgl$ (setq b (make-coords :pos (float-vector 300 0 0)))

<coordinates #X8924a58 300.0 0.0 0.0 / 0.0 0.0 0.0>

93.jskrbeusgl$ (send a :move-to b :world)

<coordinates #X89243f8 300.0 0.0 0.0 / 0.0 0.0 0.0>

94.jskrbeusgl$ a

<coordinates #X89243f8 300.0 0.0 0.0 / 0.0 0.0 0.0>

95.jskrbeusgl$ b

<coordinates #X8924a58 300.0 0.0 0.0 / 0.0 0.0 0.0>

96.jskrbeusgl$ (send a :translate #f(100 0 0))

<coordinates #X89243f8 400.0 0.0 0.0 / 0.0 0.0 0.0>

97.jskrbeusgl$ a

<coordinates #X89243f8 400.0 0.0 0.0 / 0.0 0.0 0.0>

98.jskrbeusgl$ b

<coordinates #X8924a58 400.0 0.0 0.0 / 0.0 0.0 0.0>

99.jskrbeusgl$ (send a :move-to b)

<coordinates #X89243f8 800.0 0.0 0.0 / 0.0 0.0 0.0>

100.jskrbeusgl$ a

<coordinates #X89243f8 800.0 0.0 0.0 / 0.0 0.0 0.0>

101.jskrbeusgl$ b

<coordinates #X8924a58 400.0 0.0 0.0 / 0.0 0.0 0.0>

102.jskrbeusgl$ (send a :translate #f(100 0 0))

<coordinates #X89243f8 900.0 0.0 0.0 / 0.0 0.0 0.0>

103.jskrbeusgl$ a

<coordinates #X89243f8 900.0 0.0 0.0 / 0.0 0.0 0.0>

104.jskrbeusgl$ b

ikのエラー情報を返す

This post was originally posted at http://sourceforge.net/p/jskeus/tickets/42

fullbody-ik-with-error
はIKがなぜとかなかったか(重心が thre を満たさなかった等)の情報をリストで返すものでもっと賢くかけるきがするのでマージ予定はないです。

(defmethod euscollada-robot
  (:fullbody-inverse-kinematics-with-error
   (target-coords
    &rest
    args
    &key
    (revert-if-fail t)
    link-list move-target
    rotation-axis translation-axis thre rthre
    target-centroid-pos centroid-thre centroid-offset-func
    &allow-other-keys)
   (let* ((initial-av (copy-object (send self :angle-vector)))
      (inital-coords (copy-object (send self :worldcoords)))
      (target-coords
       (mapcar #'(lambda (x)
               (if (functionp x) (funcall x) x))
           target-coords))
      dif-pos dif-rot success cdiff
      )
     (if (atom (car link-list)) (setq link-list (list link-list)))
     (if (atom move-target) (setq move-target (list move-target)))
     (if (atom target-coords) (setq target-coords (list target-coords)))
     (if (atom rotation-axis) (setq rotation-axis (list rotation-axis)))
     (if (atom translation-axis) (setq translation-axis (list translation-axis)))
     (if (atom thre) (setq thre (list thre)))
     (if (atom rthre) (setq rthre (list rthre)))
     (send* self :fullbody-inverse-kinematics target-coords
        :revert-if-fail nil args)
     (setq dif-pos
       (mapcar #'(lambda (mv tc trans-axis)
               (send mv :difference-position tc
                 :translation-axis trans-axis))
           move-target target-coords translation-axis))
     (setq dif-rot
       (mapcar #'(lambda (mv tc rot-axis)
               (send mv :difference-rotation tc
                 :rotation-axis rot-axis))
           move-target target-coords rotation-axis))
     (setq cdiff
       (send self :difference-cog-position
         target-centroid-pos centroid-offset-func))
     (setq success
       (send self :ik-convergence-check
         t dif-pos dif-rot
         rotation-axis translation-axis thre rthre
         centroid-thre target-centroid-pos centroid-offset-func))
     (cond
      ((and (not success) revert-if-fail)
       (send self :angle-vector initial-av)
       (send self :newcoords inital-coords)
       (list
    (cons :dif-pos dif-pos)
    (cons :dif-rot dif-rot)
    (cons :thre thre)
    (cons :rthre rthre)
    (cons :cog-dif cdiff)
    (cons :cthre centroid-thre))
       )
      (t (send self :angle-vector))))))

copy-objectがgcで回収されない? [sf#28]

This post was originally posted at http://sourceforge.net/p/jskeus/tickets/28

話の始まりはhttps://sourceforge.net/p/jsk-ros-pkg/tickets/158/ですが調べてみると
https://sourceforge.net/p/jsk-ros-pkg/code/HEAD/tree/trunk/euslisp/test/coords.l
のようにmake-cascoordsを繰り返すだけでメモリが増えていきます.
さらに調べると,以下の用のcopy-objectを使わないとメモリは増えて行きません.

copy-objectがなにかまずいことになっていますでしょうか?

Index: jskeus/eus/lisp/l/coordinates.l
===================================================================
--- jskeus/eus/lisp/l/coordinates.l (リビジョン 642)
+++ jskeus/eus/lisp/l/coordinates.l (作業コピー)
@@ -547,8 +547,9 @@
     (setf manager self
      changed t ;safer
      worldcoords   ;prepare a world-coordinates holder
-     (instance coordinates :init :rot (copy-object rot)
-                     :pos (copy-object pos)))
+     (instance coordinates :init :rot (matrix (matrix-row rot 0) (matrix-row rot 1) (matrix-row rot 2)) ;(copy-object rot)
+                     :pos (float-vector (elt pos 0) (elt pos 1) (elt pos 2)) ; (copy-object pos)
+                                      ))
     (if par (send par :assoc self at)) 
     self)
 )

convex-hull-3dでエラーになる [sf#17]

This post was originally posted at http://sourceforge.net/p/jskeus/tickets/17

(convex-hull-3d (flatten
(mapcar
#'(lambda (l)
(print l)
(send-all (send l :bodies) :worldcoords)
(send-all (send l :bodies) :vertices)
)
(list (elt (send pr2 :rarm :gripper :links) 0)))))
とすると,
/irteusgl 0 error: float vector expected in (send #:inst31879 :init :faces geometry::faces :edges geometry::edges :vertices geometry::vertices :primitive (list :convex-hull geometry::vertices))
というエラーになります.

条件は詰め切れていないんですが,最終的にconvex-hull-3dの最後の
(setq body (instance body-class :init
:faces faces
:edges edges
:vertices vertices
:primitive (list :convex-hull vertices )))

の_edges_でsend e :set-angleしようとしてエラーになります.

widow-main-one clashes when no display exists [sf#46]

This post was originally posted at http://sourceforge.net/p/jskeus/tickets/46

see following patch for fix this.

Index: Xevent.l
===================================================================
--- Xevent.l    (revision 657)
+++ Xevent.l    (working copy)
@@ -371,6 +371,9 @@
 ;; when the display connection is made.

 (defun window-main-one (&optional fd)
+  (when (or (null x::*display*) (= x::*display* 0))
+    (warning-message 1 ";; (window-main-one ~A) was called, but no display is found.~%" fd)
+    (return-from window-main-one nil))
   (catch :window-main-loop
       (while (> (EventsQueued *display* 1) 0)
       (NextEvent *display* event)

Macでのコンパイル失敗(ljpeg6bがない) [sf#4]

This post was originally posted at http://sourceforge.net/p/jskeus/tickets/4

自分のMacを用いてソフトウェア第三の授業の作業をしたいので、
http://sourceforge.net/apps/mediawiki/jskeus/index.php?title=Main\_Page
を参考に依存環境をインストールしようとしました。
ですが、ここに書いてある方法では、jpeg6bをインストールできませんでした。
なので、
http://slashdot.jp/~Cube/journal/363553
をなどを参考にjpeg6bをインストールしようとしたのですが、
このURLの中の4.で書き換えるところで、/usr/bin/の中にglibtoolは入っておらずlibtoolが入っているので、
s%@libtool@%/usr/bin/libtool%g
と書き換えて、
6.でmakeしたのですが、以下のようなエラーが出ました:

/usr/bin/libtool --mode=compile gcc -O2 -I. -c ./jcapimin.c
/usr/bin/libtool: unknown option character `-' in: --mode=compile
Usage: /usr/bin/libtool -static [-] file [...] [-filelist listfile[,dirname]] [-arch_only arch] [-sacLT]
Usage: /usr/bin/libtool -dynamic [-] file [...] [-filelist listfile[,dirname]] [-arch_only arch] [-o output] [-install_name name] [-compatibility_version #] [-current_version #] [-seg1addr 0x#] [-segs_read_only_addr 0x#] [-segs_read_write_addr 0x#] [-seg_addr_table <filename>] [-seg_addr_table_filename <file_system_path>] [-all_load] [-noall_load]
make: *** [jcapimin.lo] Error 1

この方針では、自力ではインストールできないような気がしてきたので、Macにjpeg6bをインストールする方法を教えていただけないでしょうか?
ちなみにOSは最新の10.8.2です。

また、MacPortからjpeg @8d_0 はインストールできたので、それを用いてjskeusをコンパイルする方法を教えていただいても事足りるかもしれません。

Mac OSX対応 [sf#45]

This post was originally posted at http://sourceforge.net/p/jskeus/tickets/45

OSXでは以下の問題のためeuslispがビルドできない。

  1. OSXではLinuxのOpenGLとパスが違う。これを吸収するディレクトリがX11ライブラリの一部として用意されている。
  2. OSX Mountain LionでX11がOSから切り離され、別インストールになった。
  3. OSX MarvericksではデフォルトのCコンパイラがGNU GCCからLLVMのCラッパであるClangに変わった。Clangではnon-voidな関数にvoidを明示的にreturnするとコンパイルエラーとなる。

以上に対応するため、添付のパッチを書いてみました。
パッチファイルはeus/lispディレクトリをトップとする想定です。

cog-convergence-check を追加する

This post was originally posted at http://sourceforge.net/p/jskeus/tickets/41

cog-convergence-check は 今のIKの挙動を換えないはずなのでそのままマージしたいと思います。重心の収束領域に vector が指定できるようになるので足の支持平面内とかが指定できます。

(defmethod cascaded-link
  (:cog-convergence-check
   (centroid-thre target-centroid-pos &optional centroid-offset-func)
   (let ((cdiff
      (send self :difference-cog-position target-centroid-pos centroid-offset-func)))
     (cond
      ((numberp centroid-thre) (> centroid-thre (norm cdiff)))
      ((functionp centroid-thre) (funcall cdiff))
      ((vectorp centroid-thre) (v< (map float-vector #'abs cdiff) centroid-thre)))))
  )

:draw-arrow してから :draw-on すると挙動がおかしい [sf#34]

This post was originally posted at http://sourceforge.net/p/jskeus/tickets/34

:draw-arrow してから :draw-on するようなコードを書くと,挙動がおかしくなります.

irtviewer では右端で拡大縮小ができると思いますが,
:draw-arrow で表示した矢印が見える範囲では :draw-on で表示させようとしたものが正しく表示されなくなり,
:draw-arrow で表示した矢印が見えなくなるまで縮小すると :draw-on で表示させようとしたものが正しく表示されます.
正しく表示されないというのは,巨大化したり,見えなくなったりするということです.

以下がサンプルコードで,1つ目の do-until-key は上記の症状が起こるサンプルで, 2つ目の do-until-key は正しく動くサンプルです.

よろしくお願いします.

:::lisp
(setq *b* (make-cube 100 100 100))
(send *b* :orient (deg2rad 45) :z)
(objects (list *b*))

;; draw-arrowの後では、draw-onなどの挙動がおかしい
(do-until-key

 (send *irtviewer* :draw-objects :flush nil)
 (send *irtviewer* :viewer :draw-arrow
       (send *b* :worldpos)
       (v+ #f(100 100 100) (send *b* :worldpos)))
 (send (send *b* :worldcoords) :draw-on :flush nil :color #f(0 1 0) :size 100 :color #f(1 0 0))

 (send *irtviewer* :viewer :viewsurface :flush)
 (x::window-main-one)
 )

;; draw-arrowを最後によんでflushすると、問題なさそう
(do-until-key

 (send *irtviewer* :draw-objects :flush nil)
 (send (send *b* :worldcoords) :draw-on :flush nil :color #f(0 1 0) :size 100 :color #f(1 0 0))
 (send *irtviewer* :viewer :draw-arrow
       (send *b* :worldpos)
       (v+ #f(100 100 100) (send *b* :worldpos)))

 (send *irtviewer* :viewer :viewsurface :flush)
 (x::window-main-one)
 )

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.