shmpwk / jsk_2020_04_carry_dish

0 stars 0 forks source link

launchファイルのrosparmを動的な変数で指定したい #7

Closed shmpwk closed 3 years ago

shmpwk commented 3 years ago

launchファイル内でrosparamに変数を渡したいです。

例えば、DepthImageCreatorでは、param指定に

~translation (Array of double, default: [0, 0, 0])
~rotation (Array of double, default: [0, 0, 0, 1])

とあります。これを例えば、カメラ座標と対象物体座標のtf座標変換に置き換えたいと考えています。

一つの方法としては、tf座標変換をまずyamlファイルに保存して、それを<rosparam command="load" file="$(find rosparam)/example.yaml" />のようにして読み込むことだと思います。(参考). しかし、もう少しスマートな方法はないかなと探しています。

launchファイルでなければ、コマンドラインで$ rosparam getとすればパラメータサーバーから変数を受け取れると思うのですが、、、

shmpwk commented 3 years ago

launchするnode scriptをdynamic reconfigureで直接いじるという方法もありますかね。

pazeshun commented 3 years ago

パラメーターを外部から動的に設定できるようにするのがdynamic reconfigureだから、使いたいnodeがdynamic reconfigure化されていたら、それを使って解決だけど、使いたいnodeがdynamic reconfigure化されてないから面倒、ってことでしょうか。

pazeshun commented 3 years ago

どうするかは場合によると思いますが、DepthImageCreatorが使いたいんだったら、そもそも仮想カメラのcamera_infoを入力にして、その仮想カメラの位置姿勢を自由に動かしたらよいだけではないのでしょうか。translationやrotationはuse_fixed_transformがtrueの時だけ有効ですが、デフォルトがfalseなのは、普通カメラの方を動かすからでは?

shmpwk commented 3 years ago

はい、使いたいノードがdynamic reconfigureではなさそうです。 例えば、上で例として上げたdepth_image_creator_nodelet.cppそのヘッダー見ると、dynamic reconfigureを使っていないと思います。

shmpwk commented 3 years ago

depth image creatorの場合、仮想カメラの位置を動かす際に、対象物を基準に自由に動かすことができればそれで大丈夫です。

kosuke55 commented 3 years ago

これがぱっと見仮想カメラの位置を動的に変えられるような気がします. https://jsk-recognition.readthedocs.io/en/latest/jsk_perception/nodes/virtual_camera_mono.html

publishされるcamera_infoをDepthImageCreatorに渡してあげれば良いと思います.

shmpwk commented 3 years ago

リンクありがとうございます。これは便利ですね。ぜひ使います。

shmpwk commented 3 years ago

本題のissue自体は解決していませんが、回避できそうなので、closeします。 @kosuke55 @pazeshun 迅速なご回答ありがとうございました。

kosuke55 commented 3 years ago

すみません、virtual_camera_monoでdynamic_reconfigureになってるのinterpolation_methodだけでしたよね。 やりたいことはtfをdynamic_reconfigureで変更することなので、何をつかっても良いのですが少し検索してみると https://github.com/Flos/ros-tf2_dynamic というものが見つかりました。 これで出したframeをhttps://jsk-recognition.readthedocs.io/en/latest/jsk_perception/nodes/image_publisher.html などで出力した仮想的なcamera_infoに与えてみると良いと思います。 Screenshot from 2020-09-29 14-50-01

shmpwk commented 3 years ago

virtual_camera_monoでdynamic_reconfigureになってるのinterpolation_methodだけでしたよね

tfに関しては、dynamic reconfigureではなく、rospramで作りだせるのかなと思っていました。

サンプルプログラムを真似して書いたものがこちら です。

ただ、これもうまくいっておらず、こちらでissueを立てています。

ということは、 @kosuke55 さんのようにtfを作る必要があったのかなと今思っています。

kosuke55 commented 3 years ago

https://github.com/Flos/ros-tf2_dynamic を使ったdepth_image_creatorのサンプルも貼っときますね。 https://gist.github.com/kosuke55/4c6dc54b298cca1e27153cb56be6cc51

ちなみにfovは https://gist.github.com/kosuke55/4c6dc54b298cca1e27153cb56be6cc51#file-camera_ifno-yaml こんな感じにrosのcamera_infoを保存して、 https://github.com/iory/cameramodels で 

from cameramodels import PinholeCameraModel
cm = PinholeCameraModel.from_yaml_file('camera_info.yaml')
cm.fovx
cm.fovy

とすると計算できます。

shmpwk commented 3 years ago

ありがとうございます! 確認してみます。

shmpwk commented 3 years ago

仮想カメラの位置動かせそうです。ありがとうございます!

202009292028