こんにちは、
UUV Simに車両を実装しようとしています。車両を浮かせようとしています。また、図のように<neutrally_buoyant>1</neutrally_buoyant>
タグを設定しましたが、アップロードされた瞬間に車両が沈み続けます。 この車両を中立的に、または積極的に浮力を持たせるために役立つアドバイスはありますか?
やあ、
報告してくれてありがとう、私はそれをチェックします。 一方、 rexrov
モデルhttps://github.com/uuvsimulator/uuv_simulator/のように、 rexrov
neutrally_buoyant
フラグをゼロに設定し、代わりに音量を設定すると、車両を積極的に浮力にすることができます。 blob / master / uuv_descriptions / models / rexrov / urdf / rexrov.gazebo.xacro#L32。
次に、その体積を使用して浮力ベクトルを計算します。
こんにちは、
音量をかなり大きく設定してみました。 rexrov
ほど大きくはなく、まだ沈んでいました。 私はそれを試してあなたに戻りますが、私はそれを浮かせるために私の音量を上げ、質量を下げようとしました。 でも、すぐに結果をお返しします。
そのため、音量を3.1093918 m3
し、質量を0.123497
に設定しましたが、車両はまだ沈んでいます。 ボリュームにrexrov
設定されているものに正確に設定しようとする場合があります。また、 <box>
タグをrexrov
と流体力学モデルに設定することもできます。 。 そのため、どこで問題を確認すればよいかわかりません。
<neutrally_buoyant>0</neutrally_buoyant>
を設定しましたか?
@musamarcusso <neutrally_buoyant>
を0
と1
。 実際の変更はありません。
こんにちは@atomoclast 、これはあなたがモデル化したい車両ですか?
http://www.videoray.com/images/specsheets/2016/2016_P4STANDARDBASE_FINAL.pdf
これを再現するために、ここでこれらのパラメーターを置き換えてみます。
@musamarcussoはい、これは私がモデル化しようとしている車両です。
必要に応じてメッシュファイルを用意しています。
浮力プラグインであると理解しているテストボックスを起動しようとしましたが、 neutrally_buoyant
タグを0
と1
両方に設定してテストしました。まだ両方の時間沈んだ。 また、 [Wrn] [UnderwaterObjectPlugin.cc:207] Relative angular acceleration is invalid -nan
エラーを何度も出力していました。
以下に両方のファイルを確認してください。 問題が何であるかわからない。 コメントにアップロードできるように、 .txt
拡張子を追加しました。
エラーRelative angular acceleration is invalid
が表示されるとすぐに、UnderwaterObjectPluginは力やトルクを適用しなくなります。これは、物理エンジンが壊れていることを明確に示しているためです。
私はあなたの箱の定義を見ました:
<inertia ixx="0" ixy="0" ixz="0" iyy="0" iyz="0" izz="0" />
これが犯人です。 剛体に慣性モーメントや質量がゼロであってはなりません。 Gazeboが力/トルクから加速度を計算する方法のため、これはゼロによる除算になります。
これで問題が解決するかどうかをお知らせください。
@sebastianschererそれは完全に理にかなっています。 基本的な楕円体を使用して車両の慣性を推定しましたが、現在は浮いています。
スラスタープラグインの理解に移りましょう! 私もそこでいくつかの問題を抱えています。
望楼のターミナルで私は見る:
[Msg] Thruster #0 initialized
[Msg] - Link: videoray_pro4/thruster_0
[Msg] - Robot model: videoray_pro4
[Msg] - Input command Gazebo topic: /videoray_pro4/thrusters/0/input
[Msg] - Thrust output Gazebo topic: /videoray_pro4/thrusters/0/thrust
[Msg] Thruster #1 initialized
[Msg] - Link: videoray_pro4/thruster_1
[Msg] - Robot model: videoray_pro4
[Msg] - Input command Gazebo topic: /videoray_pro4/thrusters/1/input
[Msg] - Thrust output Gazebo topic: /videoray_pro4/thrusters/1/thrust
[Msg] Thruster #2 initialized
[Msg] - Link: videoray_pro4/thruster_2
[Msg] - Robot model: videoray_pro4
[Msg] - Input command Gazebo topic: /videoray_pro4/thrusters/2/input
[Msg] - Thrust output Gazebo topic: /videoray_pro4/thrusters/2/thrust
[Msg] JointStatePublisher::robotNamespace=videoray_pro4
スラスターターミナルには、次のように表示されます。
process[videoray_pro4/thruster_allocator-1]: started with pid [26422]
[INFO] [1500390755.909692, 0.000000]: ThrusterManager::update_rate=50
output_dir= /home/andrew/Development/ underwater_ws/install/share/videoray_description/config/videoray_pro4
ThrusterManager: updating thruster poses
conversion_fcn= proportional
conversion_fcn_params= {'gain': 0.00031}
transform: /videoray_pro4/base_link -> /videoray_pro4/thruster_0
could not get transform from: /videoray_pro4/base_link
to: /videoray_pro4/thruster_0
[]
rosrun tf view_frames
、これが出力でした。 TFツリーがbase_linkとスラスターの間の変換を示しているのがわかります...
frame.pdf
worldと車両のbase_linkの間のフレームは、 hector_localization
パッケージの一部であるmessage_to_tf
ノードによって生成されます。 RexROVモデルの起動ファイルの例はこれです
起動ファイルでこれをどのように述べましたか?
@musamarcusso wikiチュートリアルに従って、私は次のように変換を呼び出しました。
<!-- Publish state and tf for in relation to the world frame -->
<group ns="$(arg namespace)">
<node name="ground_truth_to_tf" pkg="message_to_tf" type="message_to_tf" output="screen">
<param name="odometry_topic" value="/$(arg namespace)/pose_gt" />
<param name="frame_id" value="/$(arg world_frame)" />
<param name="tf_prefix" value="$(arg namespace)" />
</node>
</group>
あなたが上で呼びかけた行とは違うようです。 今からやってみます。
これで送ってくれたブロックを交換してみてください
<include file="$(find uuv_descriptions)/models/common/launch/message_to_tf.launch">
<arg name="namespace" value="$(arg namespace)"/>
</include>
この修正が機能する場合は、すぐにチュートリアルを修正します。
ブロックをあなたのブロックに置き換えようとしましたが、うまくいきませんでした。 それが機能する唯一の方法は、両方のブロックが一緒に呼び出されることでした。
VelocityControllerNode: initializing node
Thruster #0 - proportional - thrusters/0/input
transform: /videoray_pro4/base_link -> /videoray_pro4/thruster_1
Thruster #1 - proportional - thrusters/1/input
transform: /videoray_pro4/base_link -> /videoray_pro4/thruster_2
Thruster #2 - proportional - thrusters/2/input
transform: /videoray_pro4/base_link -> /videoray_pro4/thruster_3
could not get transform from: /videoray_pro4/base_link
to: /videoray_pro4/thruster_3
[<uuv_thrusters.models.thruster_proportional.ThrusterProportional object at 0x7efc4bdb8a50>, <uuv_thrusters.models.thruster_proportional.ThrusterProportional object at 0x7efc4bdb8c10>, <uuv_thrusters.models.thruster_proportional.ThrusterProportional object at 0x7efc4bd4c190>]
TAM=
[[ 1. 0. 0. ]
[ 0. 0. 0. ]
[ 0. 0.99999968 0.99999968]
[ 0. 0.09999997 -0.09999997]
[ 0.1 0.15249995 0.15249995]
[ 0. 0. 0. ]]
ThrusterManager: ready
ThrusterManager: ready
ここで、スラスター3からTFを取得できない理由を確認する必要があります。
自分のバージョンのjoy_velocity.launch
を起動することはできますが、コントローラーで車両を制御できません。
私は物事をデバッグしようとしていて、ノードのrqt_graph
視覚化の出力を比較しています。 これらは私が見ている2つのネットワークです。 正確に機能しない理由がわかりません。
私が気付いたもう1つの更新:
Wikiの呼び出し: <xacro:property name="prop_mesh_file" value="file://$(find uuv_descriptions_example)/models/rov_example/mesh/propeller.dae"/>
あるべき: <xacro:property name="prop_mesh_file" value="file://$(find uuv_descriptions)/models/rexrov/mesh/prop.dae"/>
こんにちは@atomoclast 、
いいえ、チュートリアルでは正しいです。 チュートリアルの例は機能的な例ではありません。そのため、このREADME.mdをメッシュフォルダーに配置しました。そのため、このprop_mesh_file
は、新しい車両モデルを作成する人が編集する必要があります。
joy_velocity
は、XBoxコントローラーマッピングのデフォルトで定義されています。 あなたが持っているコントローラーのモデルは何ですか?
Githubのどこかにファイルがありますか? 私はそれを実行してみて、あなたにフィードバックを与えることができます。
@musamarcussoここにリポジトリをアップロードしました: https :
こんにちは@musamarcusso 、あなたはこのリポジトリを
はい、クローンを作成しました。 本日遅くにフィードバックを差し上げます。