Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
23 commits
Select commit Hold shift + click to select a range
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
6 changes: 4 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,6 @@ coverage.xml
.hypothesis/
.pytest_cache/
cover/

# Translations
*.mo
*.pot
Expand Down Expand Up @@ -176,4 +175,7 @@ cython_debug/
# Ros build ignored
install
log
build
build

.vscode/
.DS_Store
Binary file added data/EVC_test_footage/vid.mp4

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please delete

Binary file not shown.
5 changes: 2 additions & 3 deletions scripts/start.bash
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
#!/usr/bin/env bash

source /opt/ros/humble/setup.bash
colcon build --symlink-install
[ -f /ws/install/setup.bash ] && source /ws/install/setup.bash
[ -f /ws/.venv/bin/activate ] && source /ws/.venv/bin/activate

colcon build
pkill -f master_api || true
sleep 0.5
ros2 launch autonomous_kart bringup_sim.launch.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,14 @@
from launch import LaunchDescription
from launch.actions import GroupAction
from launch.actions import GroupAction, ExecuteProcess
from launch_ros.actions import Node, SetParameter, SetParametersFromFile
from ament_index_python.packages import get_package_share_directory
from ament_index_python.packages import get_package_share_directory, get_package_prefix
from pathlib import Path
import os


def generate_launch_description():
pkg_share = get_package_share_directory("autonomous_kart")
camera_binary = str(Path(pkg_share).resolve().parents[2] / "autonomous_kart_cpp" / "lib" / "autonomous_kart_cpp" / "camera_node")

motor_yaml = os.path.join(pkg_share, "params", "motor.yaml")
steering_yaml = os.path.join(pkg_share, "params", "steering.yaml")
Expand Down Expand Up @@ -37,7 +39,7 @@ def generate_launch_description():
parameters=[steering_yaml],
),
Node(
package="autonomous_kart",
package="autonomous_kart_cpp",
executable="camera_node",
name="camera_node",
parameters=[camera_yaml],
Expand Down
32 changes: 29 additions & 3 deletions src/autonomous_kart/autonomous_kart/launch/bringup_sim.launch.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,39 @@
from launch import LaunchDescription
from launch.actions import DeclareLaunchArgument, GroupAction
from launch.actions import DeclareLaunchArgument, GroupAction, ExecuteProcess
from launch.substitutions import LaunchConfiguration
from launch_ros.actions import Node, SetParameter, SetParametersFromFile
from ament_index_python.packages import get_package_share_directory
from ament_index_python.packages import get_package_share_directory, get_package_prefix
from pathlib import Path
import os


def _get_camera_binary(pkg_share: str) -> str:
"""Resolve camera binary path.

Prefer the installed prefix for `autonomous_kart_cpp` if available;
fall back to deriving the sibling install layout relative to `pkg_share`.
"""
try:
prefix = get_package_prefix("autonomous_kart_cpp")
candidate = Path(prefix) / "lib" / "autonomous_kart_cpp" / "camera_node"
if candidate.exists():
return str(candidate)
except Exception:
pass

# fallback derived path (works in typical overlay layout)
return str(
Path(pkg_share).resolve().parents[2]
/ "autonomous_kart_cpp"
/ "lib"
/ "autonomous_kart_cpp"
/ "camera_node"
)


def generate_launch_description():
pkg_share = get_package_share_directory("autonomous_kart")
camera_binary = _get_camera_binary(pkg_share)

motor_yaml = os.path.join(pkg_share, "params", "motor.yaml")
steering_yaml = os.path.join(pkg_share, "params", "steering.yaml")
Expand Down Expand Up @@ -40,7 +66,7 @@ def generate_launch_description():
parameters=[steering_yaml],
),
Node(
package="autonomous_kart",
package="autonomous_kart_cpp",
executable="camera_node",
name="camera_node",
parameters=[camera_yaml],
Expand Down
150 changes: 0 additions & 150 deletions src/autonomous_kart/autonomous_kart/nodes/camera/camera_node.py

This file was deleted.

2 changes: 1 addition & 1 deletion src/autonomous_kart/autonomous_kart/params/camera.yaml
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Camera config settings
camera_node:
ros__parameters:
fps: 60.0 # float
fps: 0 # 0 == use system frequency
9 changes: 4 additions & 5 deletions src/autonomous_kart/autonomous_kart/params/pathfinder.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,26 +7,25 @@ pathfinder_node:
max_steering: 10
steering_accel: 0.05
line_path: /ws/data/racing_line/line.csv

# Auto mode (Nav2 params)
wheelbase_m: 1.05 # kart wheelbase in meters (rear axle -> front axle)
v_max_mps: 15.0 # kart max speed in m/s (used for %<->m/s conversion)
steer_max_deg: 25.0 # physical max front-wheel steering angle (degrees)

use_velocity_scaled_lookahead: true # Nav2: use_velocity_scaled_lookahead_dist
lookahead_time_s: 0.6 # Nav2: lookahead_time (s)
min_lookahead_m: 3.0 # Nav2: min_lookahead_dist (m)
max_lookahead_m: 8.0 # Nav2: max_lookahead_dist (m)

use_curvature_regulation: true # Nav2: use_regulated_linear_velocity_scaling
min_radius_m: 12.0 # Nav2: regulated_linear_scaling_min_radius (m)
min_reg_speed_pct: 0.20 # like regulated_linear_scaling_min_speed / v_max

approach_dist_m: 1.0 # Nav2: approach_velocity_scaling_dist (m)
min_approach_speed_pct: 0.05 # like min_approach_linear_velocity / v_max

search_window: 80 # Bounded forward search window (number of waypoints)
initial_sync_done: false # First autonomous tick after pose_ready does an O(n) full-line nearest
max_resync_dist: 80 # Max allowed distance to race line (m) before falling back to a full O(n) search
max_closed_dist: 2 # Max distance between start and end for track to be considered closed (m)

1 change: 1 addition & 0 deletions src/autonomous_kart/package.xml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@

<depend>rclpy</depend>
<depend>geometry_msgs</depend>
<exec_depend>autonomous_kart_cpp</exec_depend>

<test_depend>ament_copyright</test_depend>
<test_depend>ament_flake8</test_depend>
Expand Down
63 changes: 31 additions & 32 deletions src/autonomous_kart/setup.py
Original file line number Diff line number Diff line change
@@ -1,26 +1,26 @@
from glob import glob
from setuptools import setup

package_name = 'autonomous_kart'
package_name = "autonomous_kart"

setup(
name=package_name,
version="0.0.1",
packages=[
'autonomous_kart',
'autonomous_kart.nodes',
'autonomous_kart.nodes.motor',
'autonomous_kart.nodes.steering',
'autonomous_kart.nodes.camera',
'autonomous_kart.nodes.gps',
'autonomous_kart.nodes.pathfinder',
'autonomous_kart.nodes.opencv_pathfinder',
'autonomous_kart.nodes.e_comms',
'autonomous_kart.nodes.3dgs_localization',
'autonomous_kart.nodes.metrics',
'autonomous_kart.nodes.master',
'autonomous_kart.nodes.localization',
'autonomous_kart.nodes.pathfinder.strategies',
"autonomous_kart",
"autonomous_kart.nodes",
"autonomous_kart.nodes.motor",
"autonomous_kart.nodes.steering",
"autonomous_kart.nodes.camera",
"autonomous_kart.nodes.gps",
"autonomous_kart.nodes.pathfinder",
"autonomous_kart.nodes.opencv_pathfinder",
"autonomous_kart.nodes.e_comms",
"autonomous_kart.nodes.3dgs_localization",
"autonomous_kart.nodes.metrics",
"autonomous_kart.nodes.master",
"autonomous_kart.nodes.localization",
"autonomous_kart.nodes.pathfinder.strategies",
],
data_files=[

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please revert these changes, its irrelevant to the PR.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

While I agree that it is irrelevant to the pr, I disagree that the formatting errors should remain

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We don't have a standard linter for this project, so if the formatting issue is cosmetic and still works, we shouldn't make it. Two competing linters would create extra clutter/merge conflicts. If you are making this change, it should then be for the entire codebase.

("share/ament_index/resource_index/packages", ["resource/" + package_name]),
Expand All @@ -30,25 +30,24 @@
],
install_requires=["setuptools"],
zip_safe=True,
maintainer='Purdue EVC',
maintainer_email='shay.manor@gmail.com',
license='Apache-2.0',
maintainer="Purdue EVC",
maintainer_email="shay.manor@gmail.com",
license="Apache-2.0",
description="Package containing all nodes for driving in different states.",
tests_require=["pytest"],
entry_points={
'console_scripts': [
'motor_node = autonomous_kart.nodes.motor.motor_node:main',
'pathfinder_node = autonomous_kart.nodes.pathfinder.pathfinder_node:main',
'manual_pathfinder_api = autonomous_kart.nodes.manual.pathfinder_api:main',
'gps_node = autonomous_kart.nodes.gps.gps_node:main',
'3dgs_localization_node = autonomous_kart.nodes.3dgs_localization.3dgs_localization_node:main',
'opencv_pathfinder_node = autonomous_kart.nodes.opencv_pathfinder.opencv_pathfinder_node:main',
'e_comms_node = autonomous_kart.nodes.e_comms.e_comms_node:main',
'steering_node = autonomous_kart.nodes.steering.steering_node:main',
'camera_node = autonomous_kart.nodes.camera.camera_node:main',
'metrics_node = autonomous_kart.nodes.metrics.metrics_node:main',
'master_api = autonomous_kart.nodes.master.master_api:main',
'localization_node = autonomous_kart.nodes.localization.localization_node:main',
"console_scripts": [
"motor_node = autonomous_kart.nodes.motor.motor_node:main",
"pathfinder_node = autonomous_kart.nodes.pathfinder.pathfinder_node:main",
"manual_pathfinder_api = autonomous_kart.nodes.manual.pathfinder_api:main",
"gps_node = autonomous_kart.nodes.gps.gps_node:main",
"3dgs_localization_node = autonomous_kart.nodes.3dgs_localization.3dgs_localization_node:main",
"opencv_pathfinder_node = autonomous_kart.nodes.opencv_pathfinder.opencv_pathfinder_node:main",
"e_comms_node = autonomous_kart.nodes.e_comms.e_comms_node:main",
"steering_node = autonomous_kart.nodes.steering.steering_node:main",
"metrics_node = autonomous_kart.nodes.metrics.metrics_node:main",
"master_api = autonomous_kart.nodes.master.master_api:main",
"localization_node = autonomous_kart.nodes.localization.localization_node:main",
],
},
)
)
Loading
Loading