-
Notifications
You must be signed in to change notification settings - Fork 41
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
Introducing robot-init
function
#175
Comments
robot-interface.lに一票です。
難しいですね。
でまとめておく、というのもなきにしもあらずなきがします。 |
nodeletは各パッケージ(子供パッケージ)のpackage.xmlに <export>
<nodelet plugin="${prefix}/jsk_pcl_nodelets.xml"/>
</export> とかくと、親パッケージ(=nodelet)からその一覧を取得しています。
|
ためしに、pr2eus/package.xmlに以下のような内容を記述 <export>
<roseus name="pr2" file="${prefix}/pr2-interface.l" />
</export> ついでにpeppereusにも追記。 <export>
<roseus name="pepper" file="${prefix}/pepper-interface.l" />
</export> rospack pluginsで取得してみる
|
つまり作戦としては、
というのでどうでしょうか。 |
rospack pluginsは使ったことないのですが、 書かなくてはいけないコードは減ってなくて、かつ覚えなければいけないことが増えてるようなきがちょっとだけします。 |
はい、並べて書くだけでOKです。
考えられる作戦は
の2つしかないと思っていて、2を採用した場合は 覚えなければいけないこと対策としては、robot-initのエラーで丁寧に"package.xmlにこれこれかかれていないんじゃない?"ということを出すというので対応できないですかね。 |
でrospack pluginsを使うとすると、
で書き下す方式から書いてあるファイルが変わるだけで、 |
でしかできないメリットをかんがえてみたところ、 例えば、クローズドなロボットを使っていてrobot-initの中にかくPRが送れないとなったときに、 と考えると
にした方が良いですね。 |
それはそうですね。
|
rospack pluginsでパッケージを明示的に師弟するだけにして、_load-path_とかを駆使したら |
rospack pluginsの呼び出し回数はそこまできにしなくて良いと思います。 また、暗黙的なルールを導入すると書く分量はへって玄人的には使いやすくなると思うのですが、例えばxx-interface.lというファイルが必ずpackage/euslispの下にあるとか、それよりは明示的に書いたほうが良いかなと個人的には思います。(この例だとファイルシステムをスキャンするので重そう) |
確かにそうですね。 |
https://github.com/jsk-ros-pkg/jsk_roseus/pull/369/commits 1.irteusgl$ (pprint (ros::rospack-plugins "pr2eus" "robot-name"))
(("hrpsys_ros_bridge_tutorials" . "hrp2jsk")
("hrpsys_ros_bridge_tutorials" . "hrp2jsknt")
("hrpsys_ros_bridge_tutorials" . "hrp2jsknts")
("hrpsys_ros_bridge_tutorials" . "jaxon")
("hrpsys_ros_bridge_tutorials" . "jaxon_red")
("pr2eus" . "pr2"))
nil
2.irteusgl$ (pprint (ros::rospack-plugins "pr2eus" "interface-file"))
(("hrpsys_ros_bridge_tutorials"
. "/home/lueda/ros/hydro/src/rtm-ros-robotics/rtmros_tutorials/hrpsys_ros_bridge_tutorials/euslisp/hrp2jsk-interface.l")
("hrpsys_ros_bridge_tutorials"
. "/home/lueda/ros/hydro/src/rtm-ros-robotics/rtmros_tutorials/hrpsys_ros_bridge_tutorials/euslisp/hrp2jsknt-interface.l")
("hrpsys_ros_bridge_tutorials"
. "/home/lueda/ros/hydro/src/rtm-ros-robotics/rtmros_tutorials/hrpsys_ros_bridge_tutorials/euslisp/hrp2jsknts-interface.l")
("hrpsys_ros_bridge_tutorials"
. "/home/lueda/ros/hydro/src/rtm-ros-robotics/rtmros_tutorials/hrpsys_ros_bridge_tutorials/euslisp/jaxon-interface.l")
("hrpsys_ros_bridge_tutorials"
. "/home/lueda/ros/hydro/src/rtm-ros-robotics/rtmros_tutorials/hrpsys_ros_bridge_tutorials/euslisp/jaxon_red-interface.l")
("pr2eus"
. "/home/lueda/ros/hydro/src/jsk-ros-pkg/jsk_pr2eus/pr2eus/pr2-interface.l"))
nil 追加したのは
hrpsys_ros_bridge_tutorials/package.xml
(defun robot-name-interface-file ()
(mapcar #'(lambda (robot-name robot-file)
(cons (cdr robot-name) (cdr robot-file)))
(ros::rospack-plugins "pr2eus" "robot-name")
(ros::rospack-plugins "pr2eus" "interface-file"))
)
(pprint (robot-name-interface-file))
(("hrp2jsk"
. "/home/lueda/ros/hydro/src/rtm-ros-robotics/rtmros_tutorials/hrpsys_ros_bridge_tutorials/euslisp/hrp2jsk-interface.l")
("hrp2jsknt"
. "/home/lueda/ros/hydro/src/rtm-ros-robotics/rtmros_tutorials/hrpsys_ros_bridge_tutorials/euslisp/hrp2jsknt-interface.l")
("hrp2jsknts"
. "/home/lueda/ros/hydro/src/rtm-ros-robotics/rtmros_tutorials/hrpsys_ros_bridge_tutorials/euslisp/hrp2jsknts-interface.l")
("jaxon"
. "/home/lueda/ros/hydro/src/rtm-ros-robotics/rtmros_tutorials/hrpsys_ros_bridge_tutorials/euslisp/jaxon-interface.l")
("jaxon_red"
. "/home/lueda/ros/hydro/src/rtm-ros-robotics/rtmros_tutorials/hrpsys_ros_bridge_tutorials/euslisp/jaxon_red-interface.l")
("pr2"
. "/home/lueda/ros/hydro/src/jsk-ros-pkg/jsk_pr2eus/pr2eus/pr2-interface.l")) |
よさそうですね。 |
I'll create PR for this. |
これの現状を整理すると、 #222 によって、
のうち、3は解決されてそうな感じです。 1は3と同じような意味だと思っていますが、もし各ロボット用のinit関数をなくすことを目指していたとすると、#222 でも結局、 #222 でも、 |
すみません、robotのインスタンスが、
のように、 |
robot-init関数を導入したい。
解決したい問題は
pr2-init
やhrp2jsk-init
のような関数を書くのが面倒(load "package://hrpsys_ros_bridge_tutorials/euslisp/hrp2jsk-interface.l)"
と書くのが結構面倒解決する方法は
robot-init (robot-name)
という関数を導入する.ロボットの定義がどのファイルに書いてあるかは仕方ないので手書きしておく(
robot-interface-file
)。移行について
2段階で移行する。
hogehoge-init
をrobot-init
を利用するように書き換えて、warningを出すhogehoge-init
を消すhogehoge-init
➡️robot-init
の変換のためのsedスクリプトみたいなものは用意したい。手順
rospack pluginsをroseusでサポートする
[roseus] Add ros::rospack-plugins function. It is equivalent to
rospack plugins
jsk_roseus#369robot-init関数の実装
robots.lみたいなのを作る?
pr2を移行
pepper,rtm,baxterを移行
議論ポイント
どこに定義するのか?
robot-interface.lが良いきがする。ちょっと依存関係はおかしいかも.
➡️ robot-interface.l
本当にファイルを書き下さなくてはいけないのか
package.xmlにうまいことexportタグで書くという技がある気がしてきた
➡️
rospack plugins
作戦移行をどうするか
The text was updated successfully, but these errors were encountered: