Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
136 commits
Select commit Hold shift + click to select a range
cffde30
Added homework description and starter code
krishauser Jan 27, 2025
efc06c9
Merged with s2025
Jan 28, 2025
97a3de8
Merge branch 'main' into s2025_teamB
krishauser Jan 29, 2025
7c35a51
test
rjsun06 Jan 31, 2025
bcf2949
test
rjsun06 Jan 31, 2025
43be594
added two subscribers for part1-1
ShellyRiver Jan 31, 2025
c76d058
Example commit for planning team A
animeshsingh98 Feb 1, 2025
31c3491
added publisher to blink.py
Feb 1, 2025
be692a1
Fix setup issues and add user to the docker image
harishkumarbalaji Feb 2, 2025
9206116
Dummy commit to trigger sonarqube
harishkumarbalaji Feb 2, 2025
0fcdff4
Fix the requrements.txt to take from the current repo
harishkumarbalaji Feb 2, 2025
cff1e29
Update the docker compose service name
harishkumarbalaji Feb 2, 2025
0242671
Merge pull request #99 from krishauser/A4_Planning_PReg
udymd Feb 2, 2025
2a75f28
script for capturing paird img/points
rjsun06 Feb 2, 2025
753e5ba
Update missing depedencies and ultralytics python packagein requirements
harishkumarbalaji Feb 3, 2025
a7a2e8c
Add. Instructions to check if the container toolkit is working as exp…
harishkumarbalaji Feb 3, 2025
1f6fb93
Update. Readme with latest depedencies
harishkumarbalaji Feb 3, 2025
6618e8f
Update. Readme with post install steps
harishkumarbalaji Feb 3, 2025
ae74011
debug subscriber to pacmod accel
ShellyRiver Feb 3, 2025
a871397
Fixed launch file to work with standard perception pipeline
krishauser Feb 3, 2025
7a66dc1
Merge branch 's2025' into s2025_teamB
krishauser Feb 3, 2025
38deb79
Merge pull request #98 from krishauser/infra-b/fix_setup_issues
krishauser Feb 3, 2025
6f18feb
Update volume mounting to access the files
harishkumarbalaji Feb 3, 2025
b2c7fdd
blink.py publisher minor bug fix
mikayel2 Feb 3, 2025
ca430be
Merge pull request #101 from krishauser/infra-b/update_missing_depede…
krishauser Feb 3, 2025
a6376d6
Merge branch 's2025_teamA' into A1_control
mikayel2 Feb 3, 2025
2f1b7e7
HW1 Part 1.2 code (provided by Yifei Mao) works correctly in simulation.
mikayel2 Feb 3, 2025
8c48e22
blink_component code/have not been tested
Feb 4, 2025
98889c9
Merge branch 'A1_control' of https://github.com/krishauser/GEMstack i…
Feb 4, 2025
cabe2fc
updating some ros topics to match gem e4
AadarshHegde123 Feb 4, 2025
8368354
Merge branch 'EstCal_A' of https://github.com/krishauser/GEMstack int…
rjsun06 Feb 4, 2025
b39e690
Update capture_ouster_oak.py
rjsun06 Feb 4, 2025
88bdc23
changed node name for data capturing
rjsun06 Feb 4, 2025
26f0714
Merge branch 's2025_teamA' into A4_planning
udymd Feb 4, 2025
8725e34
Update longitudinal_planning.py
udymd Feb 4, 2025
a82b3af
try upload
dazhenc2 Feb 5, 2025
9f736bc
Merge branch 's2025_teamA' into EstCal_A
AadarshHegde123 Feb 5, 2025
2b6830c
Add Yielding planning, just stop in front of pedestrian
udymd Feb 5, 2025
63cd8f6
Fix the poses (align to absolute pose)
udymd Feb 5, 2025
e105880
lidar front camera data capture working, camera info intrinsic captur…
Feb 5, 2025
7659c5d
Longitudinal planning setup where we the points are treated as way po…
SimonKato Feb 6, 2025
edfc975
hw1.3
dazhenc2 Feb 7, 2025
9aacb10
Fixed Nan error, modified Brake mode
udymd Feb 7, 2025
8059c53
Fix bug causing crash at end of sim
udymd Feb 7, 2025
df4ff9a
Merge branch 's2025_teamA' into A4_planning
udymd Feb 7, 2025
67348fe
More/better comments
SimonKato Feb 7, 2025
403e71c
Merge branch 'A4_planning_part1_milestones' of github.com:krishauser/…
SimonKato Feb 7, 2025
f91796b
Part1 based on V_max and Triangle profile
RohitMurali18 Feb 8, 2025
15191c7
general code clean up + adding depth subscriber + creating klampt vis…
AadarshHegde123 Feb 8, 2025
2a0f9c2
working depth image capture
AadarshHegde123 Feb 8, 2025
0620cb3
HW1 Part 2: Parameter Tuning (crosstrack gain and decay speed)
mikayel2 Feb 9, 2025
d0771fa
visualization for lidar + oak working, but no intrinsics considered
AadarshHegde123 Feb 10, 2025
e23a5cb
script to fit objects in a line
rjsun06 Feb 11, 2025
555cb55
calibration Lidar to Vehicle. Running OK. To be improved
rjsun06 Feb 11, 2025
734f0b3
update translation_z using magic numbers we measured
rjsun06 Feb 11, 2025
6a38ed0
enhenced visualization
rjsun06 Feb 11, 2025
88ec6ba
semi correct code for icp
jeffbyju Feb 11, 2025
a9fa4c8
better line fitting
rjsun06 Feb 11, 2025
124a75b
good visuals
rjsun06 Feb 12, 2025
34f89eb
Found a bug in longitutdinal_planning which used deceleration instead…
SimonKato Feb 12, 2025
dfbafe2
finalize hw1.3
dazhenc2 Feb 12, 2025
c914a41
Little twick for rx,ry calculation
rjsun06 Feb 13, 2025
a84c3e9
Merge branch 'EstCal_A' of https://github.com/krishauser/GEMstack int…
rjsun06 Feb 13, 2025
ba645ed
Your commit message
RohitMurali18 Feb 13, 2025
d2235bc
after dynamic dt
RohitMurali18 Feb 13, 2025
299768a
Fixed aborting at the end of sim.
udymd Feb 13, 2025
d3d3bf0
Merge branch 'A1_control' into s2025_teamA_control-planning
udymd Feb 13, 2025
03f46c1
Fix jitter at the end of track for simulation
udymd Feb 13, 2025
b5cb190
Merge pull request #107 from krishauser/hw1.3
laneccolin Feb 13, 2025
67eab16
Fine tuning tracking and comfort level, comfort index added as a metric
mikayel2 Feb 14, 2025
7dd38e3
Modified braking function for experiment
udymd Feb 14, 2025
0831c67
Implemented Part 1&2
udymd Feb 14, 2025
0f38270
manual cali lidar to camera
rjsun06 Feb 14, 2025
b21bb65
add logic to avoid unnecessary yielding
Patrick8894 Feb 14, 2025
ca087e3
dumb bug fixed
rjsun06 Feb 14, 2025
1b82a7b
Merge branch 'EstCal_A' into s2025_teamA_control-planning
udymd Feb 14, 2025
ade0559
Modified braking function for experiment
udymd Feb 14, 2025
a825826
Merge branch 's2025_teamA_control-planning' of https://github.com/kri…
udymd Feb 14, 2025
46b6b04
modify code for integrating with other algorithm
Patrick8894 Feb 14, 2025
2b6c1d8
longitudinal plan now taking into account triangle velocity profile c…
SimonKato Feb 14, 2025
20b73b1
Adding cruising speed profile
animeshsingh98 Feb 14, 2025
450a2f8
Temporary fix of variables
udymd Feb 14, 2025
ca68b4e
Merge branch 'A4_planning_part1' into A4_planning_patrick
udymd Feb 14, 2025
6b276ed
Merging and consolidating part 1 branches
SimonKato Feb 14, 2025
b9f9e0e
Add condition that vehicle accels and ped walk to vehicle
udymd Feb 15, 2025
2872e78
Optimising the program
animeshsingh98 Feb 15, 2025
00ddf95
Update longitudinal_planning.py
animeshsingh98 Feb 15, 2025
52e56c3
tmp
Hansen1030 Feb 15, 2025
4b89d5b
Add dx
Hansen1030 Feb 15, 2025
32336da
Fixed syntax errors
udymd Feb 16, 2025
14fcec9
Merge branch 'A4_planning_part1' into A4_planning_patrick
udymd Feb 17, 2025
4ba2efd
Merge branch 's2025' into s2025_teamA_control-planning
udymd Feb 17, 2025
080f8b0
Merge pull request #115 from krishauser/A1_control
alo-20 Feb 17, 2025
3020680
Optimising the program and adding commit by Kris
animeshsingh98 Feb 17, 2025
0cac268
Optimising the program and adding commit by Kris
animeshsingh98 Feb 17, 2025
0300ba9
merge part1 longitudinal_plan and longitudinal_brake with part2 yeild…
Patrick8894 Feb 17, 2025
5755476
Merge branch 'A4_planning_patrick' of github.com:krishauser/GEMstack …
Feb 17, 2025
e5a2232
Revert "merge part1 longitudinal_plan and longitudinal_brake with par…
Patrick8894 Feb 17, 2025
bca6233
merge part1 and part2
Patrick8894 Feb 17, 2025
f3804db
blink_component file test
laneccolin Feb 17, 2025
3a8a282
Merge branch 'A4_planning' into s2025_teamA_control-planning
udymd Feb 19, 2025
466d887
Adjust Change dynamic_dt_k for simulation
udymd Feb 19, 2025
ef3a29a
Merge branch 's2025_teamA' into s2025_teamA_control-planning
udymd Feb 19, 2025
ab6fe4a
Added homework description and starter code
krishauser Jan 27, 2025
2be0d8e
Fixed Klampt drawing problem onboard... still mysterious
krishauser Jan 28, 2025
23eb3fb
added two subscribers for part1-1
ShellyRiver Jan 31, 2025
79616f3
added publisher to blink.py
Feb 1, 2025
ec12f16
debug subscriber to pacmod accel
ShellyRiver Feb 3, 2025
000a052
blink_component code/have not been tested
Feb 4, 2025
1e15536
blink.py publisher minor bug fix
mikayel2 Feb 3, 2025
fa57607
Changed matplotlib to 3D visualization
krishauser Feb 3, 2025
9496bde
Adding github action for linting and documentation
animeshsingh98 Feb 2, 2025
95c5071
Adding github action trigger on all commits
animeshsingh98 Feb 2, 2025
e2bf7c7
Upgrading version of upload artifact
animeshsingh98 Feb 2, 2025
b144c94
Optimizing the workflow yaml
animeshsingh98 Feb 2, 2025
9b3d5f8
Optimizing the workflow yaml
animeshsingh98 Feb 2, 2025
e7ed1a5
Correcting in the key names
animeshsingh98 Feb 2, 2025
c8b3c5a
Removing requirements.txt installation in documentation
animeshsingh98 Feb 2, 2025
8dcb9c9
Correcting name of build artifact for documentation folder
animeshsingh98 Feb 2, 2025
2e6abdf
Removing action trigger on PR
animeshsingh98 Feb 2, 2025
791720c
Fixed diff that was somehow committed
krishauser Feb 3, 2025
cf0485d
Fixed launch file to work with standard perception pipeline
krishauser Feb 3, 2025
f31aed0
HW1 Part 1.2 code (provided by Yifei Mao) works correctly in simulation.
mikayel2 Feb 3, 2025
6acbc59
try upload
dazhenc2 Feb 5, 2025
73b5c95
HW1 Part 2: Parameter Tuning (crosstrack gain and decay speed)
mikayel2 Feb 9, 2025
f063786
hw1.3
dazhenc2 Feb 7, 2025
44af541
finalize hw1.3
dazhenc2 Feb 12, 2025
701c378
Fine tuning tracking and comfort level, comfort index added as a metric
mikayel2 Feb 14, 2025
ba9f62a
Merge branch 'A1_control' of https://github.com/krishauser/GEMstack i…
alo-20 Feb 19, 2025
c4a9abe
Change brake active range to start at 0.25
alo-20 Feb 19, 2025
9a98cba
Change e4 dynamics to have 0.25 start of brake_active_range
alo-20 Feb 19, 2025
973da06
Update gem_e4_dynamics.yaml
laneccolin Feb 19, 2025
fdbed01
Update gem_e4_dynamics.yaml
laneccolin Feb 19, 2025
ad2bd16
Update gem_e4_dynamics.yaml
laneccolin Feb 19, 2025
404e393
Merge branch 'A1_control' into s2025_teamA_control-planning
udymd Feb 19, 2025
95194dc
Merge pull request #120 from krishauser/s2025_teamA_control-planning
laneccolin Feb 19, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file added .DS_Store
Binary file not shown.
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -165,3 +165,7 @@ cython_debug/
# and can be added to the global gitignore or merged into this file. For a more nuclear
# option (not recommended) you can uncomment the following to ignore the entire idea folder.
#.idea/

.vscode/
setup/zed_sdk.run
cuda/
Binary file added GEMstack/.DS_Store
Binary file not shown.
3 changes: 3 additions & 0 deletions GEMstack/knowledge/defaults/computation_graph.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -52,3 +52,6 @@ components:
- trajectory_tracking:
inputs: [vehicle, trajectory]
outputs:
- signaling:
inputs: [intent]
outputs:
6 changes: 3 additions & 3 deletions GEMstack/knowledge/defaults/current.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,12 @@ control:
brake_speed : 2.0
pure_pursuit:
lookahead: 2.0
lookahead_scale: 3.0
crosstrack_gain: 1.0
lookahead_scale: 2.0
crosstrack_gain: 0.5
desired_speed: trajectory
longitudinal_control:
pid_p: 1.0
pid_i: 0.1
pid_i: 0.05
pid_d: 0.0

#configure the simulator, if using
Expand Down
2 changes: 1 addition & 1 deletion GEMstack/knowledge/vehicle/gem_e2_dynamics.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ max_accelerator_power_reverse: 10000.0 #Watts. Power (backwards) in reverse gea

acceleration_model : kris_v1
accelerator_active_range : [0.32, 1.0] #range of accelerator pedal where output acceleration is not flat
brake_active_range : [0,1] #range of brake pedal where output deceleration is not flat
brake_active_range : [0.25,1] #range of brake pedal where output deceleration is not flat

internal_dry_deceleration: 0.2 #m/s^2: deceleration due to internal dry friction (non-speed dependent)
internal_viscous_deceleration: 0.05 #1/s: scales the current velocity to get deceleration due to internal viscous friction (speed dependent)
Expand Down
20 changes: 10 additions & 10 deletions GEMstack/knowledge/vehicle/gem_e4_dynamics.yaml
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
mass: 300.0 #kg
mass: 700.0 #kg
gravity: 9.81 #m/s^2
longitudinal_friction : 1.0 # unitless
lateral_friction : 1.0 # unitless
max_brake_deceleration: 8.0 #m/s^2. Deceleration at max brake pedal
max_accelerator_acceleration: #m/s^2. Acceleration at max accelerator pedal, by gear
longitudinal_friction : 1.0 # unitless TODO find make/model of tires
lateral_friction : 1.0 # unitless (I will bet these things do not have 1 coefficent of fricition)
max_brake_deceleration: 8.0 #m/s^2. Deceleration at max brake pedal TODO (un cap this cap)
max_accelerator_acceleration: #m/s^2. Acceleration at max accelerator pedal, by gear (un cap this cap)
- 0.0
- 5.0
max_accelerator_acceleration_reverse: 2.5 #m/s^2. Acceleration (backwards) in reverse gear
max_accelerator_power: #Watts. Power at max accelerator pedal, by gear
max_accelerator_power: #Watts. Power at max accelerator pedal, by gear (updated from website)
- 0.0
- 10000.0
max_accelerator_power_reverse: 10000.0 #Watts. Power (backwards) in reverse gear
- 5000.0
max_accelerator_power_reverse: 5000.0 #Watts. Power (backwards) in reverse gear

acceleration_model : kris_v1
acceleration_model : hang_v1
accelerator_active_range : [0.2, 1.0] #range of accelerator pedal where output acceleration is not flat
brake_active_range : [0,1] #range of brake pedal where output deceleration is not flat
brake_active_range : [0.5,1] #range of brake pedal where output deceleration is not flat

internal_dry_deceleration: 0.2 #m/s^2: deceleration due to internal dry friction (non-speed dependent)
internal_viscous_deceleration: 0.05 #1/s: scales the current velocity to get deceleration due to internal viscous friction (speed dependent)
Expand Down
3 changes: 1 addition & 2 deletions GEMstack/knowledge/vehicle/gem_e4_sensor_environment.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,4 @@ ros_topics:
top_lidar: /ouster/points
front_camera: /oak/rgb/image_raw
front_depth: /oak/stereo/image_raw
gnss: /septentrio_gnss/insnavgeod

gnss: /novatel/inspva
41 changes: 41 additions & 0 deletions GEMstack/offboard/calibration/camera_info.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# ROS Headers
import rospy
from sensor_msgs.msg import Image,PointCloud2, CameraInfo
import sensor_msgs.point_cloud2 as pc2
import ctypes
import struct
import pickle
import image_geometry

import numpy as np
import os
import time

camera_image = None

def camera_callback(info : CameraInfo):
global camera_image
camera_image = info

def get_intrinsics():
model = image_geometry.PinholeCameraModel()
model.fromCameraInfo(camera_image)
print(model.intrinsicMatrix())

def main(folder='data',start_index=1):
rospy.init_node("capture_cam_info",disable_signals=True)
caminfo_sub = rospy.Subscriber("/oak/rgb/camera_info", CameraInfo, camera_callback)
while True:
if camera_image:
time.sleep(1)
get_intrinsics()

if __name__ == '__main__':
import sys
folder = 'data'
start_index = 1
if len(sys.argv) >= 2:
folder = sys.argv[1]
if len(sys.argv) >= 3:
start_index = int(sys.argv[2])
main(folder,start_index)
102 changes: 102 additions & 0 deletions GEMstack/offboard/calibration/capture_ouster_oak.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,102 @@
# ROS Headers
import rospy
from sensor_msgs.msg import Image,PointCloud2
import sensor_msgs.point_cloud2 as pc2
import ctypes
import struct

# OpenCV and cv2 bridge
import cv2
from cv_bridge import CvBridge
import numpy as np
import os
import time

lidar_points = None
camera_image = None
depth = None
depth_image = None
bridge = CvBridge()

def lidar_callback(lidar : PointCloud2):
global lidar_points
lidar_points = lidar

def camera_callback(img : Image):
global camera_image
camera_image = img

def depth_callback(img : Image):
global depth_image
depth_image = img

def pc2_to_numpy(pc2_msg, want_rgb = False):
gen = pc2.read_points(pc2_msg, skip_nans=True)
if want_rgb:
xyzpack = np.array(list(gen),dtype=np.float32)
if xyzpack.shape[1] != 4:
raise ValueError("PointCloud2 does not have points")
xyzrgb = np.empty((xyzpack.shape[0],6))
xyzrgb[:,:3] = xyzpack[:,:3]
for i,x in enumerate(xyzpack):
rgb = x[3]
# cast float32 to int so that bitwise operations are possible
s = struct.pack('>f' ,rgb)
i = struct.unpack('>l',s)[0]
# you can get back the float value by the inverse operations
pack = ctypes.c_uint32(i).value
r = (pack & 0x00FF0000)>> 16
g = (pack & 0x0000FF00)>> 8
b = (pack & 0x000000FF)
#r,g,b values in the 0-255 range
xyzrgb[i,3:] = (r,g,b)
return xyzrgb
else:
return np.array(list(gen),dtype=np.float32)[:,:3]

def save_scan(lidar_fn,color_fn,depth_fn):
print("Saving scan to",lidar_fn,color_fn)

pc = pc2_to_numpy(lidar_points,want_rgb=False) # convert lidar feed to numpy
np.savez(lidar_fn,pc)
cv2.imwrite(color_fn,bridge.imgmsg_to_cv2(camera_image))

dimage = bridge.imgmsg_to_cv2(depth_image)
dimage_non_nan = dimage[np.isfinite(dimage)]
print("Depth range",np.min(dimage_non_nan),np.max(dimage_non_nan))
dimage = np.nan_to_num(dimage,nan=0,posinf=0,neginf=0)
dimage = (dimage/4000*0xffff)
print("Depth pixel range",np.min(dimage),np.max(dimage))
dimage = dimage.astype(np.uint16)
cv2.imwrite(depth_fn,dimage)

def main(folder='data',start_index=1):
rospy.init_node("capture_ouster_oak",disable_signals=True)
lidar_sub = rospy.Subscriber("/ouster/points", PointCloud2, lidar_callback)
camera_sub = rospy.Subscriber("/oak/rgb/image_raw", Image, camera_callback)
depth_sub = rospy.Subscriber("/oak/stereo/image_raw", Image, depth_callback)
index = 0
print(" Storing lidar point clouds as npz")
print(" Storing color images as png")
print(" Storing depth images as tif")
print(" Ctrl+C to quit")
while True:
if camera_image and depth_image:
cv2.imshow("result",bridge.imgmsg_to_cv2(camera_image))
time.sleep(.5)
files = [
os.path.join(folder,'lidar{}.npz'.format(index)),
os.path.join(folder,'color{}.png'.format(index)),
os.path.join(folder,'depth{}.tif'.format(index))]
save_scan(*files)
index += 1

if __name__ == '__main__':
import sys
folder = 'data'
start_index = 1
if len(sys.argv) >= 2:
folder = sys.argv[1]
if len(sys.argv) >= 3:
start_index = int(sys.argv[2])
main(folder,start_index)
Loading