package pjisuv_msgs

import (
	"github.com/bluenviron/goroslib/v2/pkg/msg"
	"github.com/bluenviron/goroslib/v2/pkg/msgs/geometry_msgs"
	"github.com/bluenviron/goroslib/v2/pkg/msgs/sensor_msgs"
	"github.com/bluenviron/goroslib/v2/pkg/msgs/std_msgs"
)

type AdjustXY struct {
	msg.Package `ros:"autoware_msgs"`
	Header      std_msgs.Header `rosname:"header"`
	X           int32           `rosname:"x"`
	Y           int32           `rosname:"y"`
}

type AutowareCentroids struct {
	msg.Package `ros:"autoware_msgs"`
	Header      std_msgs.Header       `rosname:"header"`
	Points      []geometry_msgs.Point `rosname:"points"`
}

type AutowareCloudCluster struct {
	msg.Package    `ros:"autoware_msgs"`
	Header         std_msgs.Header
	Id             uint32
	Label          string
	Score          float64
	Cloud          sensor_msgs.PointCloud2
	MinPoint       geometry_msgs.PointStamped
	MaxPoint       geometry_msgs.PointStamped
	AvgPoint       geometry_msgs.PointStamped
	CentroidPoint  geometry_msgs.PointStamped
	EstimatedAngle float64
	Dimensions     geometry_msgs.Vector3
	EigenValues    geometry_msgs.Vector3
	EigenVectors   []geometry_msgs.Vector3
	FpfhDescriptor std_msgs.Float32MultiArray
	BoundingBox    BoundingBox
	ConvexHull     geometry_msgs.PolygonStamped
	IndicatorState uint32
}

type AutowareCloudClusterArray struct {
	msg.Package `ros:"autoware_msgs"`
	Header      std_msgs.Header
	Clusters    []AutowareCloudCluster
}

type ValueSet struct {
	msg.Package `ros:"autoware_msgs"`
	Center      int32 `rosname:"center"`
	Range       int32 `rosname:"range"`
}
type ColorSet struct {
	msg.Package `ros:"autoware_msgs"`
	Hue         int32 `rosname:"Hue"`
	Sat         int32 `rosname:"Sat"`
	Val         int32 `rosname:"Val"`
}
type AutowareControlCommand struct {
	msg.Package        `ros:"autoware_msgs"`
	LinearVelocity     int32 `rosname:"linear_velocity"`
	LinearAcceleration int32 `rosname:"linear_acceleration"`
	SteeringAngle      int32 `rosname:"steering_angle"`
}
type AutowareControlCommandStamped struct {
	msg.Package `ros:"autoware_msgs"`
	Cmd         AutowareControlCommand `rosname:"cmd"`
}
type AutowareDTLane struct {
	msg.Package `ros:"autoware_msgs"`
	Dist        float64 `rosname:"dist"`
	Dir         float64 `rosname:"dir"`
	Apara       float64 `rosname:"apara"`
	R           float64 `rosname:"r"`
	Slope       float64 `rosname:"slope"`
	Cant        float64 `rosname:"cant"`
	Lw          float64 `rosname:"lw"`
	Rw          float64 `rosname:"rw"`
}

type AutowareWaypointState struct {
	msg.Package           `ros:"autoware_msgs"`
	Aid                   int32 `rosname:"aid"`
	NullState             uint8 `rosname:"NULLSTATE"`
	LaneChangeState       uint8 `rosname:"lanechange_state"`
	SteeringState         uint8 `rosname:"steering_state"`
	StrLeft               uint8 `rosname:"STR_LEFT"`
	StrRight              uint8 `rosname:"STR_RIGHT"`
	StrStraight           uint8 `rosname:"STR_STRAIGHT"`
	StrBack               uint8 `rosname:"STR_BACK"`
	AccelState            uint8 `rosname:"accel_state"`
	StopState             uint8 `rosname:"stop_state"`
	TypeStopLine          uint8 `rosname:"TYPE_STOPLINE"`
	TypeStop              uint8 `rosname:"TYPE_STOP"`
	EventState            uint8 `rosname:"event_state"`
	TypeEventNull         uint8 `rosname:"TYPE_EVENT_NULL"`
	TypeEventGoal         uint8 `rosname:"TYPE_EVENT_GOAL"`
	TypeEventMiddleGoal   uint8 `rosname:"TYPE_EVENT_MIDDLE_GOAL"`
	TypeEventPositionStop uint8 `rosname:"TYPE_EVENT_POSITION_STOP"`
	TypeEventBusStop      uint8 `rosname:"TYPE_EVENT_BUS_STOP"`
	TypeEventParking      uint8 `rosname:"TYPE_EVENT_PARKING"`
}

type AutowareWaypoint struct {
	msg.Package `ros:"autoware_msgs"`
	Gid         int32                      `rosname:"gid"`
	Lid         int32                      `rosname:"lid"`
	Pose        geometry_msgs.PoseStamped  `rosname:"pose"`
	Twist       geometry_msgs.TwistStamped `rosname:"twist"`
	DTLane      AutowareDTLane             `rosname:"dtlane"`
	ChangeFlag  int32                      `rosname:"change_flag"`
	WpState     AutowareWaypointState      `rosname:"wpstate"`
	LaneId      uint32                     `rosname:"lane_id"`
	LeftLaneId  uint32                     `rosname:"left_lane_id"`
	RightLaneId uint32                     `rosname:"right_lane_id"`
	StopLineId  uint32                     `rosname:"stop_line_id"`
	Cost        float32                    `rosname:"cost"`
	TimeCost    float32                    `rosname:"time_cost"`
	Direction   uint32                     `rosname:"direction"`
}

type AutowareLane struct {
	msg.Package           `ros:"autoware_msgs"`
	Header                std_msgs.Header    `rosname:"header"`
	Increment             int32              `rosname:"increment"`
	LaneId                int32              `rosname:"lane_id"`
	Waypoints             []AutowareWaypoint `rosname:"waypoints"`
	LaneIndex             uint32             `rosname:"lane_index"`
	Cost                  float32            `rosname:"cost"`
	ClosestObjectDistance float32            `rosname:"closest_object_distance"`
	ClosestObjectVelocity float32            `rosname:"closest_object_velocity"`
	IsBlocked             bool               `rosname:"is_blocked"`
}

type AutowareLaneArray struct {
	msg.Package `ros:"autoware_msgs"`
	Id          int32          `rosname:"id"`
	Lanes       []AutowareLane `rosname:"lanes"`
}
type AutowareDetectedObject struct {
	msg.Package           `ros:"autoware_msgs"`
	Id                    uint32                       `rosname:"id"`
	Label                 string                       `rosname:"label"`
	Score                 float32                      `rosname:"score"`
	Color                 std_msgs.ColorRGBA           `rosname:"color"`
	Valid                 bool                         `rosname:"valid"`
	String                string                       `rosname:"space_frame"`
	Pose                  geometry_msgs.Pose           `rosname:"pose"`
	Dimensions            geometry_msgs.Vector3        `rosname:"dimensions"`
	Variance              geometry_msgs.Vector3        `rosname:"variance"`
	Velocity              geometry_msgs.Twist          `rosname:"velocity"`
	Acceleration          geometry_msgs.Twist          `rosname:"acceleration"`
	PointCloud            sensor_msgs.PointCloud2      `rosname:"pointcloud"`
	ConvexHull            geometry_msgs.PolygonStamped `rosname:"convex_hull"`
	CandidateTrajectories AutowareLaneArray            `rosname:"candidate_trajectories"`
	PoseReliable          bool                         `rosname:"pose_reliable"`
	VelocityReliable      bool                         `rosname:"velocity_reliable"`
	AccelerationReliable  bool                         `rosname:"acceleration_reliable"`
	ImageFrame            string                       `rosname:"image_frame"`
	X                     int32                        `rosname:"x"`
	Y                     int32                        `rosname:"y"`
	Width                 int32                        `rosname:"width"`
	Height                int32                        `rosname:"height"`
	Angle                 float32                      `rosname:"angle"`
	RoiImage              sensor_msgs.Image            `rosname:"roi_image"`
	IndicatorState        uint8                        `rosname:"indicator_state"`
	BehaviorState         uint8                        `rosname:"behavior_state"`
	UserDefinedInfo       []string                     `rosname:"user_defined_info"`
}
type AutowareDetectedObjectArray struct {
	msg.Package `ros:"autoware_msgs"`
	Header      std_msgs.Header          `rosname:"header"`
	Objects     []AutowareDetectedObject `rosname:"objects"`
}

type ExtractedPosition struct {
	msg.Package `ros:"autoware_msgs"`
	SignalId    int32   `rosname:"signalId"`
	U           int32   `rosname:"u"`
	V           int32   `rosname:"v"`
	Radius      int32   `rosname:"radius"`
	X           float64 `rosname:"x"`
	Y           float64 `rosname:"y"`
	Z           float64 `rosname:"z"`
	Hang        float64 `rosname:"hang"`
	Type        int8    `rosname:"type"`
	LinkId      int32   `rosname:"linkId"`
	PlId        int32   `rosname:"plId"`
}

type GeometricRectangle struct {
	msg.Package `ros:"autoware_msgs"`
	Wl          float32 `rosname:"wl"`
	Wr          float32 `rosname:"wr"`
	Lf          float32 `rosname:"lf"`
	Lb          float32 `rosname:"lb"`
}
type ICPStat struct {
	msg.Package    `ros:"autoware_msgs"`
	Header         std_msgs.Header `rosname:"header"`
	ExeTime        float32         `rosname:"exe_time"`
	Score          float32         `rosname:"score"`
	Velocity       float32         `rosname:"velocity"`
	Acceleration   float32         `rosname:"acceleration"`
	UsePredictPose int32           `rosname:"use_predict_pose"`
}
type ImageLaneObjects struct {
	msg.Package `ros:"autoware_msgs"`
	Header      std_msgs.Header `rosname:"header"`
	LaneLX1     int32           `rosname:"lane_l_x1"`
	LaneLY1     int32           `rosname:"lane_l_y1"`
	LaneLX2     int32           `rosname:"lane_l_x2"`
	LaneLY2     int32           `rosname:"lane_l_y2"`
	LaneRX1     int32           `rosname:"lane_r_x1"`
	LaneRY1     int32           `rosname:"lane_r_y1"`
	LaneRX2     int32           `rosname:"lane_r_x2"`
	LaneRY2     int32           `rosname:"lane_r_y2"`
}
type ImageRect struct {
	msg.Package `ros:"autoware_msgs"`
	X           int32   `rosname:"x"`
	Y           int32   `rosname:"y"`
	Height      int32   `rosname:"height"`
	Width       int32   `rosname:"width"`
	Score       float32 `rosname:"score"`
}
type ImageObj struct {
	msg.Package `ros:"autoware_msgs"`
	Header      std_msgs.Header `rosname:"header"`
	Type        string          `rosname:"type"`
	Obj         []ImageRect     `rosname:"obj"`
}
type ImageObjects struct {
	msg.Package `ros:"autoware_msgs"`
	Header      std_msgs.Header `rosname:"header"`
	CarNum      uint8           `rosname:"car_num"`
	CarType     []int32         `rosname:"car_type"`
	Score       []float32       `rosname:"score"`
	CornerPoint []int32         `rosname:"corner_point"`
}
type ImageRectRanged struct {
	msg.Package `ros:"autoware_msgs"`
	Rect        ImageRect `rosname:"rect"`
	Range       float32   `rosname:"range"`
	MinHeight   float32   `rosname:"min_height"`
	MaxHeight   float32   `rosname:"max_height"`
}
type ImageObjRanged struct {
	msg.Package `ros:"autoware_msgs"`
	Header      std_msgs.Header   `rosname:"header"`
	Type        string            `rosname:"type"`
	Obj         []ImageRectRanged `rosname:"obj"`
}

type ImageObjTracked struct {
	msg.Package `ros:"autoware_msgs"`
	Header      std_msgs.Header   `rosname:"header"`
	Type        string            `rosname:"type"`
	TotalNum    uint8             `rosname:"total_num"`
	ObjId       []int32           `rosname:"obj_id"`
	RectRanged  []ImageRectRanged `rosname:"rect_ranged"`
	RealData    []int32           `rosname:"real_data"`
	Lifespan    []int32           `rosname:"lifespan"`
}
type IndicatorCmd struct {
	msg.Package `ros:"autoware_msgs"`
	Header      std_msgs.Header `rosname:"header"`
	L           int32           `rosname:"l"`
	R           int32           `rosname:"r"`
}

type NDTStat struct {
	msg.Package    `ros:"autoware_msgs"`
	Header         std_msgs.Header `rosname:"header"`
	ExeTime        float32         `rosname:"exe_time"`
	Iteration      int32           `rosname:"iteration"`
	Score          float32         `rosname:"score"`
	Velocity       float32         `rosname:"velocity"`
	Acceleration   float32         `rosname:"acceleration"`
	UsePredictPose int32           `rosname:"use_predict_pose"`
}
type ObjLabel struct {
	msg.Package    `ros:"autoware_msgs"`
	Header         std_msgs.Header       `rosname:"header"`
	Type           string                `rosname:"type"`
	ObjId          []int32               `rosname:"obj_id"`
	ReprojectedPos []geometry_msgs.Point `rosname:"reprojected_pos"`
}
type ObjPose struct {
	msg.Package `ros:"autoware_msgs"`
	Header      std_msgs.Header           `rosname:"header"`
	Type        string                    `rosname:"type"`
	ObjId       []int32                   `rosname:"obj_id"`
	Obj         []geometry_msgs.PoseArray `rosname:"obj"`
}
type PointsImage struct {
	msg.Package `ros:"autoware_msgs"`
	Header      std_msgs.Header `rosname:"header"`
	Distance    []float32       `rosname:"distance"`
	Intensity   []float32       `rosname:"intensity"`
	MinHeight   []float32       `rosname:"min_height"`
	MaxHeight   []float32       `rosname:"max_height"`
	MaxY        int32           `rosname:"max_y"`
	MinY        int32           `rosname:"min_y"`
	ImageHeight int32           `rosname:"image_height"`
	ImageWidth  int32           `rosname:"image_width"`
}

type ProjectionMatrix struct {
	msg.Package      `ros:"autoware_msgs"`
	Header           std_msgs.Header `rosname:"header"`
	ProjectionMatrix [16]float64     `rosname:"projection_matrix"`
}

type SteerCmd struct {
	msg.Package `ros:"autoware_msgs"`
	Header      std_msgs.Header `rosname:"header"`
	Steer       int32           `rosname:"steer"`
}

type AccelCmd struct {
	msg.Package `ros:"autoware_msgs"`
	Header      std_msgs.Header `rosname:"header"`
	Accel       int32           `rosname:"accel"`
}
type BrakeCmd struct {
	msg.Package `ros:"autoware_msgs"`
	Header      std_msgs.Header `rosname:"header"`
	Brake       int32           `rosname:"brake"`
}
type LampCmd struct {
	msg.Package `ros:"autoware_msgs"`
	Header      std_msgs.Header `rosname:"header"`
	L           int32           `rosname:"l"`
	R           int32           `rosname:"r"`
}
type Gear struct {
	msg.Package `ros:"autoware_msgs"`
	None        uint8 `rosname:"NONE"`
	Park        uint8 `rosname:"PARK"`
	Reverse     uint8 `rosname:"REVERSE"`
	Neutral     uint8 `rosname:"NEUTRAL"`
	Drive       uint8 `rosname:"DRIVE"`
	Low         uint8 `rosname:"LOW"`
	Gear        uint8 `rosname:"gear"`
}

type AutoWareVehicleCmd struct {
	msg.Package `ros:"autoware_msgs"`
	Header      std_msgs.Header            `rosname:"header"`
	SteerCmd    SteerCmd                   `rosname:"steer_cmd"`
	AccelCmd    AccelCmd                   `rosname:"accel_cmd"`
	BrakeCmd    BrakeCmd                   `rosname:"brake_cmd"`
	LampCmd     LampCmd                    `rosname:"lamp_cmd"`
	GearCmd     Gear                       `rosname:"gear_cmd"`
	mode        int32                      `rosname:"mode"`
	TwistCmd    geometry_msgs.TwistStamped `rosname:"twist_cmd"`
	CtrlCmd     AutowareControlCommand     `rosname:"ctrl_cmd"`
	Emergency   int32                      `rosname:"emergency"`
}

type RemoteCmd struct {
	msg.Package `ros:"autoware_msgs"`
	Header      std_msgs.Header    `rosname:"header"`
	VehicleCmd  AutoWareVehicleCmd `rosname:"vehicle_cmd"`
	ControlMode int32              `rosname:"control_mode"`
}
type ScanImage struct {
	msg.Package `ros:"autoware_msgs"`
	Header      std_msgs.Header `rosname:"header"`
	Distance    []float32       `rosname:"distance"`
	Intensity   []float32       `rosname:"intensity"`
	MaxY        int32           `rosname:"max_y"`
	MinY        int32           `rosname:"min_y"`
}
type Signals struct {
	msg.Package `ros:"autoware_msgs"`
	Header      std_msgs.Header     `rosname:"header"`
	Signals     []ExtractedPosition `rosname:"Signals"`
}
type State struct {
	msg.Package   `ros:"autoware_msgs"`
	Header        std_msgs.Header `rosname:"header"`
	VehicleState  string          `rosname:"vehicle_state"`
	MissionState  string          `rosname:"mission_state"`
	BehaviorState string          `rosname:"behavior_state"`
	MotionState   string          `rosname:"motion_state"`
}
type StateCmd struct {
	msg.Package `ros:"autoware_msgs"`
	Header      std_msgs.Header `rosname:"header"`
	Cmd         int32           `rosname:"cmd"`
}
type SyncTimeDiff struct {
	msg.Package `ros:"autoware_msgs"`
	Header      std_msgs.Header `rosname:"header"`
	TimeDiff    float64         `rosname:"time_diff"`
	Camera      std_msgs.Time   `rosname:"camera"`
	Lidar       std_msgs.Time   `rosname:"lidar"`
}
type SyncTimeMonitor struct {
	msg.Package      `ros:"autoware_msgs"`
	Header           std_msgs.Header `rosname:"header"`
	ImageRaw         float64         `rosname:"image_raw"`
	PointsRaw        float64         `rosname:"points_raw"`
	PointsImage      float64         `rosname:"points_image"`
	VscanPoints      float64         `rosname:"vscan_points"`
	VscanImage       float64         `rosname:"vscan_image"`
	ImageObj         float64         `rosname:"image_obj"`
	ImageObjRanged   float64         `rosname:"image_obj_ranged"`
	ImageObjTracked  float64         `rosname:"image_obj_tracked"`
	CurrentPose      float64         `rosname:"current_pose"`
	ObjLabel         float64         `rosname:"obj_label"`
	ClusterCentroids float64         `rosname:"cluster_centroids"`
	ObjPose          float64         `rosname:"obj_pose"`
	ExecutionTime    float64         `rosname:"execution_time"`
	CycleTime        float64         `rosname:"cycle_time"`
	TimeDiff         float64         `rosname:"time_diff"`
}
type TrafficLight struct {
	msg.Package  `ros:"autoware_msgs"`
	Header       std_msgs.Header
	TrafficLight int32
}
type TrafficLightResult struct {
	msg.Package          `ros:"autoware_msgs"`
	Header               std_msgs.Header
	LightId              int32
	RecognitionResult    int32
	RecognitionResultStr string
	LaneId               int32
}
type TrafficLightResultArray struct {
	msg.Package `ros:"autoware_msgs"`
	Header      std_msgs.Header
	Results     []TrafficLightResult
}
type TunedResult struct {
	msg.Package `ros:"autoware_msgs"`
	Header      std_msgs.Header
	Red         ColorSet `rosname:"Red"`
	Yellow      ColorSet `rosname:"Yellow"`
	Green       ColorSet `rosname:"Green"`
}
type VehicleLocation struct {
	msg.Package   `ros:"autoware_msgs"`
	Header        std_msgs.Header
	LaneArrayId   int32
	WaypointIndex int32
}
type VehicleStatus struct {
	msg.Package     `ros:"autoware_msgs"`
	msg.Definitions `ros:"int32 MODE_MANUAL=0,int32 MODE_AUTO=1,int32 LAMP_LEFT=1,int32 LAMP_RIGHT=2,int32 LAMP_HAZARD=3"`
	Header          std_msgs.Header
	Tm              string
	Drivemode       int32
	Steeringmode    int32
	CurrentGear     Gear
	Speed           float64
	Drivepedal      int32
	Brakepedal      int32
	Angle           float64
	Lamp            int32
	Light           int32
}
type VscanTracked struct {
	msg.Package `ros:"autoware_msgs"`
	Position    geometry_msgs.Point
	Orientation float32
	Velocity    float32
	GeoRect     GeometricRectangle
}
type VscanTrackedArray struct {
	msg.Package `ros:"autoware_msgs"`
	Header      std_msgs.Header
	ObjTracked  []VscanTracked
}
