4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

自動運転 AIチャレンジ ~導入編~

Posted at

概要

本記事では、自動運転 AIチャレンジのシミュレーション環境を導入して触ってみた!という内容です。なお、筆者はAutowareもros2も初心者なので、記述や認識に誤りがあるかもしれません。優しく見守っていただけると幸いです。

導入

基本的には、公式ドキュメントのSetupに書かれている内容に従います。筆者はUbuntuとDockerを使った環境を用いました。以下、少しだけ引っ掛かったポイントなどを記述します。

初期位置の設定について

ドキュメントにもある通り、

ros2 launch autoware_launch e2e_simulator.launch.xml vehicle_model:=golfcart sensor_model:=awsim_sensor_kit map_path:=/aichallenge/mapfile

で起動した後、初期位置とゴールの位置を設定する必要があります。
awsim_and_autoware.png
上の画像は左がAwsimで右がAutowareの画面なのですが、対応関係がパッと見わかりにくいです。
ここで、左のAwsimの緑色に光っている線(恐らく走行ルート)と右のAutowareの手書きの部分が対応しています。また初期位置は赤い矢印に書かれた部分に設定する必要があります。

手動操縦に関して

Awsimでは、手動操縦が可能です。
awsim_manual.png
手動操縦は、上の画像のManualと書かれた部分をクリックしDキーを押したあと矢印キーで行います。

Local EnvironmentとAutoware-Mini

自作のパッケージを作成するためには、公式ドキュメントのLocal Environmentを参考にdockerやコードをビルド・実行する必要があります。デフォルトでは、Autowareを用いて自動運転をシミュレーションしているのですが、Autowareは少し複雑なので、よりシンプルなAutoware-Miniを導入したほうが良さそうです。導入方法は公式ドキュメントのAutoware-Miniにあります。
ここで、これをlaunchするときはSetupにあったautoware_launch e2e_simulator.launch.xmlではなくLocal Environmentにあった

cd /aichallenge
bash run.sh

で実行する必要があります。

自作パッケージを作って挙動を変えてみる

とりあえず、このシミュレーションをどの様にカスタムすればよいのかを学ぶため、試しに自作のパッケージを作ってみます。
自作パッケージでは、車両の制御部を変更し、経路計画を無視して前進し続けるパッケージを作成することを目標とします。

これを行うためにやるべきことは以下の2点です

  1. trajectory_followerに流れているplanning/scenario_planning/trajectoryというトピックを流れないようにする。そうすることにより、trajectory_followerから出ている車両への指令値であるcontrol/trajectory_follower/control_cmdを止めることができる。
  2. 自作でplanning/scenario_planning/trajectoryをsubscribeしてcontrol/trajectory_follower/control_cmdをpublishするプログラムを書く。

(以下のマーカーが引いてあるトピックです)
memo-134.jpg

1に関して、docker/aichallenge/aichallenge_ws/src/aichallenge_submit/autoware_universe_launch/tier4_control_launch/launch/control.launch.pyの69行目にある("~/input/reference_trajectory", "/planning/scenario_planning/trajectory"),という部分を

            # ("~/input/reference_trajectory", "/planning/scenario_planning/trajectory"),
            ("~/input/reference_trajectory", "/planning/scenario_planning/trajectory2"),

というような適当な名前に書き換えます。

また、2に関しては、docker/aichallenge/aichallenge_ws/src/下に適当なパッケージを作成し、以下のようなノードを作成します。

from typing import List
import rclpy
from rclpy.node import Node
from autoware_auto_control_msgs.msg import AckermannControlCommand
from autoware_auto_planning_msgs.msg import Trajectory


class GoStraightAhead(Node):
    def __init__(self) -> None:
        super().__init__("control_cmd_subscriber")

        self.pub = self.create_publisher(
            AckermannControlCommand,
            "/control/trajectory_follower/control_cmd",
            10,
        )

        self.sub = self.create_subscription(
            Trajectory,
            "/planning/scenario_planning/trajectory",
            self.listener_callback,
            10,
        )
        self.sub

    def listener_callback(self, msg: Trajectory):
        print(msg)
        cmd = AckermannControlCommand()
        # ひたすら前進するように
        cmd.longitudinal.speed = 10000.0
        cmd.longitudinal.acceleration = 10000.0
        self.pub.publish(cmd)


def main(args=None):
    rclpy.init(args=args)

    minimal_subscriber = GoStraightAhead()

    rclpy.spin(minimal_subscriber)

    minimal_subscriber.destroy_node()
    rclpy.shutdown()


if __name__ == "__main__":
    main()

結果

ひたすら前に進み続けるシミュレーションができました!

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?