diff --git a/rb_ws/src/buggy/CMakeLists.txt b/rb_ws/src/buggy/CMakeLists.txt index f616900c..f752b8cf 100755 --- a/rb_ws/src/buggy/CMakeLists.txt +++ b/rb_ws/src/buggy/CMakeLists.txt @@ -54,6 +54,7 @@ add_message_files( FILES EncoderStatus.msg LoRaEvent.msg + TrajectoryMsg.msg ) ## Generate services in the 'srv' folder diff --git a/rb_ws/src/buggy/launch/sim_2d_2buggies.launch b/rb_ws/src/buggy/launch/sim_2d_2buggies.launch index 27fe48cb..f94fb307 100755 --- a/rb_ws/src/buggy/launch/sim_2d_2buggies.launch +++ b/rb_ws/src/buggy/launch/sim_2d_2buggies.launch @@ -1,13 +1,13 @@ - + - - + + - + @@ -35,11 +35,11 @@ args="$(arg nand_start_pos) $(arg nand_velocity) NAND"/> - + - + diff --git a/rb_ws/src/buggy/launch/sim_2d_single.launch b/rb_ws/src/buggy/launch/sim_2d_single.launch index 389a6939..5cef4eef 100755 --- a/rb_ws/src/buggy/launch/sim_2d_single.launch +++ b/rb_ws/src/buggy/launch/sim_2d_single.launch @@ -1,6 +1,6 @@ - + diff --git a/rb_ws/src/buggy/msg/TrajectoryMsg.msg b/rb_ws/src/buggy/msg/TrajectoryMsg.msg new file mode 100644 index 00000000..9c952ccf --- /dev/null +++ b/rb_ws/src/buggy/msg/TrajectoryMsg.msg @@ -0,0 +1,4 @@ +float64 time +float64 cur_idx +float64[] easting +float64[] northing \ No newline at end of file diff --git a/rb_ws/src/buggy/scripts/auton/autonsystem.py b/rb_ws/src/buggy/scripts/auton/autonsystem.py index ba37e420..14a3c6cc 100755 --- a/rb_ws/src/buggy/scripts/auton/autonsystem.py +++ b/rb_ws/src/buggy/scripts/auton/autonsystem.py @@ -9,6 +9,7 @@ # ROS Message Imports from std_msgs.msg import Float32, Float64, Bool from nav_msgs.msg import Odometry +from buggy.msg import TrajectoryMsg import numpy as np @@ -69,6 +70,7 @@ def __init__(self, rospy.Subscriber(self_name + "/nav/odom", Odometry, self.update_self_odom) rospy.Subscriber(self_name + "/gnss1/odom", Odometry, self.update_self_odom_backup) + rospy.Subscriber(self_name + "/nav/traj", TrajectoryMsg, self.update_traj) # to report if the filter position has separated (so we need to use the antenna position) rospy.Subscriber(self_name + "/debug/filter_gps_seperation_status", Bool, self.update_use_gps) @@ -123,6 +125,11 @@ def update_other_steering_angle(self, msg): with self.lock: self.other_steering = msg.data + def update_traj(self, msg): + with self.lock: + self.cur_traj, self.local_controller.current_traj_index = Trajectory.unpack(msg) + + def init_check(self): """ @@ -252,10 +259,7 @@ def planner_tick(self): other_pose = self.get_world_pose(self.other_odom_msg) # update local trajectory via path planner - self.cur_traj, cur_idx = self.path_planner.compute_traj( - self_pose, - other_pose) - self.local_controller.current_traj_index = cur_idx + self.path_planner.compute_traj(self_pose, other_pose) def init_parser (): """ diff --git a/rb_ws/src/buggy/scripts/auton/path_planner.py b/rb_ws/src/buggy/scripts/auton/path_planner.py index 552fdeaf..4b3a200d 100755 --- a/rb_ws/src/buggy/scripts/auton/path_planner.py +++ b/rb_ws/src/buggy/scripts/auton/path_planner.py @@ -3,6 +3,7 @@ import rospy from sensor_msgs.msg import NavSatFix from std_msgs.msg import Float64 +from buggy.msg import TrajectoryMsg from pose import Pose from trajectory import Trajectory @@ -44,6 +45,8 @@ def __init__(self, nominal_traj:Trajectory, left_curb:Trajectory) -> None: "/auton/debug/other_buggy_xtrack", Float64, queue_size=1 ) + self.traj_publisher = rospy.Publisher("SC/nav/traj", TrajectoryMsg, queue_size=1) + self.nominal_traj = nominal_traj self.left_curb = left_curb @@ -202,7 +205,7 @@ def compute_traj( self.debug_passing_traj_publisher.publish(reference_navsat) local_traj = Trajectory(json_filepath=None, positions=positions) - + self.traj_publisher.publish(local_traj.pack(self_pose.x, self_pose.y)) return local_traj, \ local_traj.get_closest_index_on_path( self_pose.x, diff --git a/rb_ws/src/buggy/scripts/auton/trajectory.py b/rb_ws/src/buggy/scripts/auton/trajectory.py index ed12cf45..adab5c7f 100755 --- a/rb_ws/src/buggy/scripts/auton/trajectory.py +++ b/rb_ws/src/buggy/scripts/auton/trajectory.py @@ -1,8 +1,11 @@ import json +import time import uuid import matplotlib.pyplot as plt -import numpy as np +from buggy.msg import TrajectoryMsg + +import numpy as np from scipy.interpolate import Akima1DInterpolator, CubicSpline from world import World @@ -347,6 +350,19 @@ def get_closest_index_on_path( + start_index ) + def pack(self, x, y) -> TrajectoryMsg: + traj = TrajectoryMsg() + traj.easting = self.positions[:, 0] + traj.northing = self.positions[:, 1] + traj.time = time.time() + traj.cur_idx = self.get_closest_index_on_path(x,y) + return traj + + def unpack(trajMsg : TrajectoryMsg): + pos = np.array([trajMsg.easting, trajMsg.northing]).transpose(1, 0) + cur_idx = trajMsg.cur_idx + return Trajectory(positions=pos), cur_idx + if __name__ == "__main__": # Example usage