Skip to content
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

Si2024 simulator #119

Open
wants to merge 6 commits into
base: test/cartsim
Choose a base branch
from
Open

Si2024 simulator #119

wants to merge 6 commits into from

Conversation

yasuohayashibara
Copy link
Member

SI2024用のシミュレータ検証ソフトウェア

@yasuohayashibara yasuohayashibara changed the base branch from main to test/cartsim September 18, 2024 03:30
@yasuohayashibara
Copy link
Member Author

p3dでgazeboシミュレータ上での正解の位置を出力するようにした.

@yasuohayashibara
Copy link
Member Author

yasuohayashibara commented Sep 18, 2024

経路追従の挙動を計測するプログラムを作成した.
以下のスクリプトで軌道のデータを抽出する.

python3 line_follower.py
ros2 bag record /p3d/odom
ros2 bag play rosbag2_2024_09_18-13_11_16_0.db3
ros2 topic echo /p3d/odom > odom_data.txt
grep "position:" odom_data.txt -A 2 | awk '/x:/ {x=$2} /y:/ {y=$2; print x "," y}' > odom_data.csv

@yasuohayashibara
Copy link
Member Author

1)運営が提供したシミュレータのモデル
ros2 launch simulator gazebo_simulator.launch.py

2)タイヤの摩擦係数を大きくしたモデル
摩擦係数が0.001→0.7

<mu>0.001</mu>
<mu2>0.001</mu2>

3)実車の挙動に近づけたモデル
ros2 launch simulator gazebo_simulator_caster_trail.launch.py
実車にはキャスタの向きを戻すバネがあるが,それに関しては省略した.
-1.0 0 -0.02 1.57 0 1.57 → -0.85 0 -0.02 1.57 0 1.57

<pose>-1.0 0 -0.02 1.57 0 1.57</pose>

<pose>-1.0 0 -0.02 1.57 0 1.57</pose>

<pose>-1.0 0 -0.02 1.57 0 1.57</pose>

<pose>-1.0 0 -0.02 1.57 0 1.57</pose>

4)トレイルを大きくしたモデル
ros2 launch simulator gazebo_simulator_caster_trail.launch.py

5)サーボモータによりヨー軸と駆動する機構
ros2 launch simulator gazebo_simulator_active_caster.launch.py

@yasuohayashibara
Copy link
Member Author

rviz2を使用して経路に対するロボットの挙動を観察した.
/gnss_pathと/tfのframe_idが異なるため,以下を実行してからrviz2で観察した.

ros2 run tf2_ros static_transform_publisher 0 0 0 0 0 0 map odom

IMAGE ALT TEXT HERE

@yasuohayashibara
Copy link
Member Author

yasuohayashibara commented Sep 29, 2024

ros2 bag record /gnss_path /tf
ros2 bag play rosbag2_2024_09_29-23_47_53_0.db3
ros2 topic echo /gnss_path > gnss_path.txt
grep "position:" gnss_path.txt -A 2 | awk '/x:/ {x=$2} /y:/ {y=$2; print x "," y}' > gnss_path.csv
ros2 topic echo /tf > tf.txt
grep "child_frame_id: base_footprint" tf.txt -A 5 | grep translation -A 2 | awk '/x:/ {x=$2} /y:/ {y=$2; print x "," y}' > tf.csv

目標軌道とロボットの軌道を描いたらずれていた.
image

ただし,x方向に4m, 回転方向に-3degロボットの軌道を移動させたらほぼ一致する.
おそらく計算のどこかでこのずれを生じる計算がされていると考える.

image

生データ
gnss_path.xlsx

@yasuohayashibara
Copy link
Member Author

yasuohayashibara commented Oct 20, 2024

トレイルを0.05mずつ変更した場合の挙動

モビリティの動力学パラメータなどを正確に計測することが難しいため定性的にはなるが,トレイルを短くすることで動きに遅れが生じて軌道を速やかに追従できていない様子が見られる.

image
図 トレイルと経路追従の軌道の様子(バネを含まないモデル)

経路追従のソフトウェアはこちら
https://github.com/open-rdc/aiformula/blob/si2024_simulator/simulator/simulator/simulator/line_follower.py

生データ
integration.xlsx

@yasuohayashibara
Copy link
Member Author

yasuohayashibara commented Oct 20, 2024

キャスタのヨー軸の目標角度を求め,計測した角度との違いが速度を0.2rad以下だと速度を0.1m/s(通常は0.5m/s)としたときの挙動

結果
目標角度からの誤差が大きい場合に低速となるが,行き過ぎを抑えながら経路に追従する軌道となった.
できるだけ速度を低下させずに経路追従するためには動力学モデルを考慮した制御則が必要

# caster steering の角度による補正
wheelbase = 0.65
target_caster_steering_angle = -asin(max(min(wheelbase * angular_velocity / self.linear_velocity, 1.0), -1.0))
diff_steering_angle = target_caster_steering_angle - self.caster_steering_angle
print("target: "+str(target_caster_steering_angle)+", current: "+str(self.caster_steering_angle)+", diff_steering_angle: "+str(diff_steering_angle))
if abs(diff_steering_angle) > 0.2:
self.linear_velocity = 0.1
else:
self.linear_velocity = 0.5

トレイル 0.05m
image

トレイル 0.10m
image

@yasuohayashibara
Copy link
Member Author

実行の方法は「3)実車の挙動に近づけたモデル」で変更した部分をすべて変更
-1.0 0 -0.02 1.57 0 1.57 の-1.0を トレイル 0.05 -> -0.85, 0.10 -> -0.90, 0.15 -> -0.95, 0.2 -> -1.0 とする.

実行コマンド

ros2 launch simulator gazebo_simulator_caster_trail.launch.py
python3 line_follower_caster.py & ros2 bag record /p3d/odom
ros2 bag play rosbag2_2024_10_20-23_25_22_0.db3 & ros2 topic echo /p3d/odom > odom_data.txt
grep "position:" odom_data.txt -A 2 | awk '/x:/ {x=$2} /y:/ {y=$2; print x "," y}' > odom_data.csv

なお,上記を実行するとプロセスが残ることがあるので,`kill -9‘でプロセスを終了することが必要になる.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant