Closed Ryusei-Baba closed 4 months ago
~/ros2_ws/src/EC7D_AIformula_Control/simulator/models/ai_car1/model.sdfにgazebo_ros_forceをプラグインすることで力を加えることができた.
現在は/ai_car1/caster_forceというトピック名で力を送る仕組みになっている.
例) y方向に150[N]の力を加えるトピックをパブリッシュ
ros2 topic pub /ai_car1/caster_force geometry_msgs/msg/Wrench "{force: {x: 0.0, y: 150.0, z: 0.0}, torque: {x: 0.0, y: 0.0, z: 0.0}}"
トピックを送ってシミュレータ環境でロボットを動かしたときの動画です. https://youtu.be/S7bacPv0vc8
従属輪の影響を考慮したシステムの挙動を再現するためには,おそらくURDFファイルを変更したほうが良いと思います. 実ロボットの挙動に合わせて力を加えても再現できるかもしれませんが,モデル化するのは難しいと思いますので,URDFの変更の方が簡単だと思います. (といってもURDFで再現するのも難しいとは思いますが...)
私も調べて初めて知りましたが,従動輪のキャスタのことをswivel casterというのですね. URDFで検索しても,これを再現しているところがあまりなさそうですので,これをモデル化するだけでも価値があるかもしれません.
AIFormula_private/EC7D_AIformula_Control/vehicle/xacro/parts/caster_back_macro.xacroで
<inertia ixx="0.01517" ixy="0.0" ixz="0.0" iyy="0.01517" iyz="0.0" izz="0.025"/>
のizz="0.025"を書き換えることで従動輪が動きにくくなるように慣性を加えようとしたが, シミュレータ上でのロボットの動きに変化が見られなかった.
xacro ai_car1.xacro > ai_car1.urdf
を実行してURDFを作成しなおしたが, シミュレータ上でのロボットの動きに変化は見られなかった.
変更するのは慣性ではなくて摩擦です. どのように重たいものでも氷上のような摩擦が少ない場所では動かすことができます. (加速度は変化しますが...)
摩擦を大きくするとそれを超える力が無いと動かなくなります. gazeboであまり議論している人がいないので,難しい問題かもしれません.
https://github.com/open-rdc/AIFormula_private/issues/35 こちらのissuesにて従属輪問題は解決したのでcloseします.
こちらのissueですが,以下で対応しました. https://github.com/open-rdc/aiformula/pull/5
従動輪の動きですが,ほぼ再現できたと思います. トレイルの距離により動きが変わります. SDFを始めて使用したので,結構試行錯誤が必要でした.
従属輪が元に戻りにくい現象をシミュレータ上で再現するために, gazeboのプラグインを使用して外乱を加えることにする.