├── igvc_gazebo ├── config │ ├── waypoints.csv │ ├── ramp_lane.csv │ ├── waypoints_qual_2.csv │ ├── waypoints_qual_4.csv │ ├── waypoints_qual_5.csv │ ├── waypoints_qual_6.csv │ ├── waypoints_qual_7.csv │ ├── waypoints_qual_9.csv │ ├── waypoints_qual_10.csv │ ├── waypoints_qual_8.csv │ ├── waypoints_qual_0.csv │ ├── waypoints_qual_1.csv │ ├── waypoints_qual_3.csv │ ├── waypoints_autonav_0.csv │ ├── waypoints_autonav_1.csv │ └── swervi_joint_limits.yaml ├── nodes │ ├── magnetometer │ │ ├── CMakeLists.txt │ │ └── main.cpp │ ├── swerve_control │ │ └── CMakeLists.txt │ ├── ground_truth │ │ └── CMakeLists.txt │ ├── sim_color_detector │ │ └── CMakeLists.txt │ └── scan_to_pointcloud │ │ ├── CMakeLists.txt │ │ └── scan_to_pointcloud.h ├── launch │ ├── ramp_lane.launch │ ├── sim_detector.launch │ ├── autonav.launch │ ├── autonav_low.launch │ └── autonav_mesh.launch └── CMakeLists.txt ├── igvc_perception ├── src │ ├── cnn │ │ └── __init__.py │ ├── nn_viz │ │ ├── __init__.py │ │ ├── models │ │ │ └── __init__.py │ │ └── nn_viz.py │ ├── tests │ │ └── CMakeLists.txt │ ├── train_eval │ │ ├── __init__.py │ │ ├── models │ │ │ └── __init__.py │ │ ├── cfg │ │ │ └── igvc.cfg │ │ └── train_test_generation.py │ ├── multiclass_segmentation │ │ ├── __init__.py │ │ ├── data_utils │ │ │ └── __init__.py │ │ ├── train_utils │ │ │ ├── __init__.py │ │ │ └── get_args.py │ │ ├── .gitignore │ │ ├── example │ │ │ └── model_prediction.png │ │ ├── jupyter_notebook │ │ │ └── UNetWithEfficientNet.pdf │ │ ├── requirements.txt │ │ └── config │ │ │ └── igvc.yaml │ ├── pointcloud_segmentation │ │ ├── example │ │ │ ├── example.png │ │ │ └── raw_lidar points.png │ │ ├── ground_filter.h │ │ ├── clustering.h │ │ └── CMakeLists.txt │ ├── pointcloud_filter │ │ ├── pointcloud_filter_node.cpp │ │ ├── bundle.cpp │ │ ├── radius_filter │ │ │ ├── radius_filter_config.cpp │ │ │ └── radius_filter.cpp │ │ ├── back_filter │ │ │ ├── back_filter_config.cpp │ │ │ └── back_filter.cpp │ │ ├── ground_filter │ │ │ ├── ground_filter_config.cpp │ │ │ └── ground_filter.cpp │ │ ├── raycast_filter │ │ │ └── raycast_filter_config.cpp │ │ ├── pointcloud_filter_config.cpp │ │ ├── fast_segment_filter │ │ │ └── fast_segment_filter_config.cpp │ │ └── CMakeLists.txt │ ├── slope_filter │ │ ├── CMakeLists.txt │ │ └── slope_filter.h │ ├── elevation_map_height_node │ │ ├── CMakeLists.txt │ │ └── elevation_map_height_node.h │ └── robot_pose_type_converter │ │ ├── CMakeLists.txt │ │ ├── robot_pose_type_converter.h │ │ └── robot_pose_type_converter.cpp ├── mainpage.dox ├── config │ ├── ground_filter.yaml │ ├── visualization │ │ ├── raw.yaml │ │ └── fused.yaml │ ├── pointcloud_segmentation.yaml │ └── elevation_mapping.yaml ├── launch │ ├── slope_filter.launch │ ├── elevation_map_height.launch │ ├── pointcloud_filter.launch │ ├── nn_viz.launch │ ├── elevation_map_visualization.launch │ ├── elevation_mapping.launch │ ├── ptseg.launch │ ├── actual_barrel_segmentation.launch │ └── multiclass_segmentation.launch ├── include │ └── pointcloud_filter │ │ ├── filter.h │ │ ├── radius_filter │ │ ├── radius_filter_config.h │ │ └── radius_filter.h │ │ ├── back_filter │ │ ├── back_filter_config.h │ │ └── back_filter.h │ │ ├── ground_filter │ │ ├── ground_filter_config.h │ │ └── ground_filter.h │ │ ├── raycast_filter │ │ ├── raycast_filter_config.h │ │ └── raycast_filter.h │ │ ├── bundle.h │ │ ├── fast_segment_filter │ │ └── fast_segment_filter_config.h │ │ ├── pointcloud_filter_config.h │ │ └── tf_transform_filter │ │ └── tf_transform_filter.h └── setup.py ├── .gitattributes ├── igvc_msgs ├── srv │ └── BackCircle.srv ├── msg │ ├── action_path.msg │ ├── barrels.msg │ ├── igvc_path.msg │ ├── trajectory.msg │ ├── trajectory_point.msg │ ├── velocity_pair.msg │ ├── system_stats.msg │ ├── map.msg │ ├── velocity_quad.msg │ └── lights.msg └── CMakeLists.txt ├── igvc_sandbox ├── waypoints │ ├── lane_following_test.csv │ ├── comp_test.csv │ ├── u_test.csv │ ├── johns_creek.csv │ ├── qualification.csv │ ├── comp │ │ ├── north.csv │ │ └── south.csv │ ├── gps_check.csv │ ├── waypoints.csv │ ├── parking_lot_loop.csv │ └── carpark_back_and_forth.csv ├── CMakeLists.txt ├── install_udev_rules.sh ├── camera_pose_estimation │ └── CMakeLists.txt ├── package.xml ├── camera_config │ ├── cam_right.yaml │ ├── cam_center.yaml │ ├── cam_left.yaml │ ├── usb_cam_right.yaml │ ├── usb_cam_center.yaml │ └── usb_cam_left.yaml ├── detectors_config_gazebo.yaml ├── detectors_config_realworld.yaml └── igvc.rules ├── igvc_navigation ├── config │ ├── planners.yaml │ ├── controllers.yaml │ ├── back_circle.yaml │ ├── recovery_behaviors.yaml │ ├── back_up_recovery.yaml │ ├── swerve_drive.yaml │ ├── gridmap_viz.yaml │ └── local_costmap_params.yaml ├── mainpage.dox ├── launch │ ├── set_waypoint_file_path.launch │ ├── back_circle_server.launch │ ├── gridmap_viz.launch │ ├── navigation_client.launch │ ├── swerve_drive.launch │ ├── swerve_wheel_odometry.launch │ ├── navigation_server.launch │ ├── mbf_navigation.launch │ └── navigation_simulation.launch ├── src │ ├── mapper │ │ ├── lidar_layer_config.cpp │ │ ├── rolling_layer_config.cpp │ │ ├── line_layer_config.cpp │ │ ├── rolling_layer_config.h │ │ ├── unrolling_layer_config.cpp │ │ ├── unrolling_layer_config.h │ │ ├── lidar_config.h │ │ ├── lidar_layer_config.h │ │ ├── projection_config.h │ │ ├── traversability_layer_config.h │ │ ├── line_layer_config.h │ │ ├── map_config.h │ │ ├── traversability_layer_config.cpp │ │ ├── projection_config.cpp │ │ ├── camera_config.h │ │ ├── gridmap_layer.h │ │ ├── lidar_config.cpp │ │ ├── map_config.cpp │ │ ├── rolling_layer.h │ │ └── back_circle_layer.h │ ├── back_up_recovery │ │ ├── back_up_recovery.xml │ │ └── CMakeLists.txt │ ├── swerve_drive │ │ ├── CMakeLists.txt │ │ └── swerve_drive.h │ ├── swerve_wheel_odometer │ │ └── CMakeLists.txt │ ├── back_circle │ │ ├── CMakeLists.txt │ │ └── back_circle_server.h │ ├── tests │ │ ├── CMakeLists.txt │ │ └── test │ │ │ └── test_mapper.test │ ├── navigation_server │ │ └── CMakeLists.txt │ ├── navigation_client │ │ └── CMakeLists.txt │ └── state_estimator │ │ ├── CMakeLists.txt │ │ └── ThreadedQueue.hpp ├── setup.py └── include │ └── mapper │ └── probability_utils.h ├── documents ├── research │ ├── imu_issue │ │ └── Imu_issue.png │ └── README.md ├── design │ ├── navigation_state_machine │ │ └── navigation_state_machine.gif │ ├── testing_library.md │ ├── barrel_detection.md │ ├── add_noise_to_simulation_2.md │ ├── README.md │ └── swerve_module.md └── README.md ├── igvc_description ├── urdf │ ├── textures │ │ ├── autonav_course.png │ │ ├── ground_grass_texture.jpg │ │ └── qualification_course.png │ ├── models │ │ ├── barrel │ │ │ ├── meshes │ │ │ │ └── Barrel.png │ │ │ ├── model.config │ │ │ └── model.sdf │ │ ├── ramp │ │ │ ├── meshes │ │ │ │ └── RampTexture.png │ │ │ ├── model.config │ │ │ └── model.sdf │ │ ├── barrels_low │ │ │ ├── meshes │ │ │ │ └── Barrel.png │ │ │ ├── model.config │ │ │ └── model.sdf │ │ ├── sun │ │ │ ├── model.config │ │ │ └── model.sdf │ │ ├── ramp_lane │ │ │ ├── model.config │ │ │ └── model.sdf │ │ ├── autonav │ │ │ ├── model.config │ │ │ └── model.sdf │ │ ├── qualification │ │ │ ├── model.config │ │ │ └── model.sdf │ │ ├── autonav_mesh │ │ │ ├── model.config │ │ │ └── model.sdf │ │ ├── grass_plane │ │ │ ├── model.config │ │ │ ├── model.sdf │ │ │ ├── model-1_2.sdf │ │ │ └── model-1_4.sdf │ │ └── construction_barrel │ │ │ └── model.config │ └── worlds │ │ └── ramp_lane.world ├── launch │ ├── robot_state_publisher.launch │ ├── simulationTesting.launch │ └── spawn_swervi.launch ├── CMakeLists.txt └── package.xml ├── igvc_rviz_plugins ├── launch │ └── rviz.launch ├── src │ ├── .editorconfig │ ├── imu_viz │ │ └── CMakeLists.txt │ └── igvc_rviz_plugins_old │ │ ├── num_button.cpp │ │ ├── my_thread.cpp │ │ ├── bat_panel.cpp │ │ ├── time_panel.cpp │ │ ├── eStop_panel.cpp │ │ └── CMakeLists.txt ├── include │ └── igvc_rviz_plugins_old │ │ ├── my_thread.h │ │ ├── speedometer.h │ │ ├── eStop_panel.h │ │ ├── bat_panel.h │ │ ├── num_button.h │ │ ├── time_panel.h │ │ ├── launch_panel.h │ │ ├── waypoint_panel.h │ │ └── node_panel.h ├── package.xml └── HOWTO.md ├── igvc_utils ├── mainpage.dox ├── launch │ ├── system_stats.launch │ ├── speed_compare.launch │ ├── compressed_to_raw.launch │ ├── rosbag.launch │ ├── imu_to_rpy.launch │ └── mapper_bag.launch ├── setup.py ├── src │ ├── ethernet │ │ └── CMakeLists.txt │ ├── state │ │ ├── CMakeLists.txt │ │ └── robot_control.cpp │ ├── system_stats │ │ └── CMakeLists.txt │ ├── quaternion_to_rpy │ │ └── CMakeLists.txt │ └── pid_tester │ │ ├── encrecord.cpp │ │ ├── CMakeLists.txt │ │ └── main.cpp └── include │ └── igvc_utils │ ├── StringUtils.hpp │ └── robot_control.h ├── igvc_platform ├── mainpage.dox ├── src │ ├── imu │ │ ├── yostlab_driver_node.cpp │ │ └── CMakeLists.txt │ ├── system_stats │ │ └── CMakeLists.txt │ ├── tests │ │ └── test │ │ │ ├── test_swerve_drive.test │ │ │ ├── test_scan_to_pointcloud.test │ │ │ ├── test_segmented_camera.test │ │ │ ├── test_swerve_control.test │ │ │ ├── test_swerve_joystick_driver.test │ │ │ └── test_sim_color_detector.test │ ├── swerve_joystick_driver │ │ ├── CMakeLists.txt │ │ └── swerve_joystick.h │ ├── segmented_camera │ │ ├── CMakeLists.txt │ │ └── segmented_camera_info_publisher.h │ └── motor_controller │ │ └── CMakeLists.txt ├── launch │ ├── quaternion_to_rpy.launch │ ├── gps.launch │ ├── calibrate_imus.launch │ ├── joystick_driver.launch │ ├── imu_bottom.launch │ ├── imu_top.launch │ ├── seg_cam.launch │ ├── lidar.launch │ └── motor_controller.launch ├── setup.py ├── include │ └── igvc_platform │ │ └── nanopb │ │ ├── swerve_commands.pb.c │ │ └── protos │ │ └── swerve_commands.proto └── config │ └── analyzers.yaml ├── .pep8speaks.yaml ├── Makefile ├── install_dependencies.sh ├── .github └── PULL_REQUEST_TEMPLATE.md ├── .gitmodules ├── Dockerfile ├── license.txt ├── .gitignore ├── igvc.cmake └── .editorconfig /igvc_gazebo/config/waypoints.csv: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /igvc_perception/src/cnn/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /igvc_perception/src/nn_viz/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /igvc_perception/src/tests/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /igvc_perception/src/train_eval/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /igvc_perception/src/nn_viz/models/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | *.ipynb linguist-detectable=false 2 | -------------------------------------------------------------------------------- /igvc_perception/src/train_eval/models/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /igvc_perception/src/multiclass_segmentation/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /igvc_gazebo/config/ramp_lane.csv: -------------------------------------------------------------------------------- 1 | 33.7744970036, -84.4048174628 -------------------------------------------------------------------------------- /igvc_gazebo/config/waypoints_qual_2.csv: -------------------------------------------------------------------------------- 1 | 33.7746187315, -84.404655538 -------------------------------------------------------------------------------- /igvc_gazebo/config/waypoints_qual_4.csv: -------------------------------------------------------------------------------- 1 | 33.7745781594, -84.4046771290 -------------------------------------------------------------------------------- /igvc_gazebo/config/waypoints_qual_5.csv: -------------------------------------------------------------------------------- 1 | 33.774528570, -84.4046771297 -------------------------------------------------------------------------------- /igvc_gazebo/config/waypoints_qual_6.csv: -------------------------------------------------------------------------------- 1 | 33.7744970156, -84.4046771288 -------------------------------------------------------------------------------- /igvc_gazebo/config/waypoints_qual_7.csv: -------------------------------------------------------------------------------- 1 | 33.774469970, -84.4046771283 -------------------------------------------------------------------------------- /igvc_gazebo/config/waypoints_qual_9.csv: -------------------------------------------------------------------------------- 1 | 33.7743662886, -84.4046771292 -------------------------------------------------------------------------------- /igvc_msgs/srv/BackCircle.srv: -------------------------------------------------------------------------------- 1 | --- 2 | float64[] x 3 | float64[] y 4 | -------------------------------------------------------------------------------- /igvc_perception/src/multiclass_segmentation/data_utils/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /igvc_perception/src/multiclass_segmentation/train_utils/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /igvc_gazebo/config/waypoints_qual_10.csv: -------------------------------------------------------------------------------- 1 | 33.7743347316, -84.4046771296 -------------------------------------------------------------------------------- /igvc_gazebo/config/waypoints_qual_8.csv: -------------------------------------------------------------------------------- 1 | 33.77441587480856, -84.40467713087766 -------------------------------------------------------------------------------- /igvc_msgs/msg/action_path.msg: -------------------------------------------------------------------------------- 1 | Header header 2 | velocity_quad[] actions 3 | -------------------------------------------------------------------------------- /igvc_msgs/msg/barrels.msg: -------------------------------------------------------------------------------- 1 | Header header 2 | geometry_msgs/Point[] barrels 3 | -------------------------------------------------------------------------------- /igvc_sandbox/waypoints/lane_following_test.csv: -------------------------------------------------------------------------------- 1 | 42.6782006067, -83.1955530317 2 | 3 | -------------------------------------------------------------------------------- /igvc_gazebo/config/waypoints_qual_0.csv: -------------------------------------------------------------------------------- 1 | 33.7747404520, -84.4050010479 2 | 33.7746932055, -84.4046567163 -------------------------------------------------------------------------------- /igvc_gazebo/config/waypoints_qual_1.csv: -------------------------------------------------------------------------------- 1 | 33.774690857, -84.4050010059 2 | 33.774655721, -84.4046558027 -------------------------------------------------------------------------------- /igvc_sandbox/waypoints/comp_test.csv: -------------------------------------------------------------------------------- 1 | 42.6783392433, -83.195379885 2 | 42.6781936433, -83.19532161 3 | -------------------------------------------------------------------------------- /igvc_msgs/msg/igvc_path.msg: -------------------------------------------------------------------------------- 1 | Header header 2 | geometry_msgs/PoseStamped[] poses 3 | float64 path_resolution 4 | -------------------------------------------------------------------------------- /igvc_msgs/msg/trajectory.msg: -------------------------------------------------------------------------------- 1 | Header header 2 | igvc_msgs/trajectory_point[] trajectory 3 | float64 time_resolution 4 | -------------------------------------------------------------------------------- /igvc_msgs/msg/trajectory_point.msg: -------------------------------------------------------------------------------- 1 | Header header 2 | geometry_msgs/Pose pose 3 | float64 curvature 4 | float64 velocity 5 | -------------------------------------------------------------------------------- /igvc_msgs/msg/velocity_pair.msg: -------------------------------------------------------------------------------- 1 | Header header 2 | float64 left_velocity 3 | float64 right_velocity 4 | float64 duration 5 | -------------------------------------------------------------------------------- /igvc_sandbox/waypoints/u_test.csv: -------------------------------------------------------------------------------- 1 | # 42.6783117583, -83.1953921817 # Right one 2 | 42.67840476, -83.1951267967 # Left one -------------------------------------------------------------------------------- /igvc_gazebo/config/waypoints_qual_3.csv: -------------------------------------------------------------------------------- 1 | 33.774623239, -84.4051035645 2 | 33.774623238, -84.4048984439 3 | 33.774623236, -84.4046771293 -------------------------------------------------------------------------------- /igvc_navigation/config/planners.yaml: -------------------------------------------------------------------------------- 1 | planners: 2 | - name: 'GlobalPlanner' 3 | type: 'global_planner/GlobalPlanner' 4 | -------------------------------------------------------------------------------- /igvc_sandbox/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 2.8.3) 2 | project(igvc_sandbox) 3 | 4 | include(../igvc.cmake) 5 | 6 | -------------------------------------------------------------------------------- /igvc_sandbox/waypoints/johns_creek.csv: -------------------------------------------------------------------------------- 1 | # John's creek start 2 | 34.0052905233, -84.1967098617 3 | 34.0053390767, -84.19657077 4 | -------------------------------------------------------------------------------- /documents/research/imu_issue/Imu_issue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboJackets/igvc-software/HEAD/documents/research/imu_issue/Imu_issue.png -------------------------------------------------------------------------------- /igvc_navigation/config/controllers.yaml: -------------------------------------------------------------------------------- 1 | controllers: 2 | - name: 'TebLocalPlannerROS' 3 | type: 'teb_local_planner/TebLocalPlannerROS' 4 | -------------------------------------------------------------------------------- /igvc_perception/mainpage.dox: -------------------------------------------------------------------------------- 1 | /** 2 | 3 | \mainpage 4 | 5 | \b igvc_perception is the package assosciated with sensor input and processing. 6 | **/ 7 | -------------------------------------------------------------------------------- /documents/research/README.md: -------------------------------------------------------------------------------- 1 | # Research Docs 2 | * [Barrel detection](barrel_detection.md) 3 | * [IOP](iop.md) 4 | * [IMU Issues](imu_issue/imu_issue.md) 5 | -------------------------------------------------------------------------------- /igvc_navigation/config/back_circle.yaml: -------------------------------------------------------------------------------- 1 | back_circle: 2 | width: 1.5 3 | length: 2.0 4 | grid_size: 0.1 5 | thickness: 0.2 6 | offset: -0.5 -------------------------------------------------------------------------------- /igvc_navigation/config/recovery_behaviors.yaml: -------------------------------------------------------------------------------- 1 | recovery_behaviors: 2 | - name: 'back_up_recovery' 3 | type: 'back_up_recovery/BackUpRecovery' 4 | -------------------------------------------------------------------------------- /igvc_description/urdf/textures/autonav_course.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboJackets/igvc-software/HEAD/igvc_description/urdf/textures/autonav_course.png -------------------------------------------------------------------------------- /igvc_description/urdf/models/barrel/meshes/Barrel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboJackets/igvc-software/HEAD/igvc_description/urdf/models/barrel/meshes/Barrel.png -------------------------------------------------------------------------------- /igvc_perception/src/multiclass_segmentation/.gitignore: -------------------------------------------------------------------------------- 1 | data/*.npy 2 | content/ 3 | predictions/ 4 | igvc_utils/__pycache__ 5 | data_utils/__pycache__ 6 | __pycache__ -------------------------------------------------------------------------------- /igvc_description/urdf/models/ramp/meshes/RampTexture.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboJackets/igvc-software/HEAD/igvc_description/urdf/models/ramp/meshes/RampTexture.png -------------------------------------------------------------------------------- /igvc_description/urdf/textures/ground_grass_texture.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboJackets/igvc-software/HEAD/igvc_description/urdf/textures/ground_grass_texture.jpg -------------------------------------------------------------------------------- /igvc_description/urdf/textures/qualification_course.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboJackets/igvc-software/HEAD/igvc_description/urdf/textures/qualification_course.png -------------------------------------------------------------------------------- /igvc_sandbox/waypoints/qualification.csv: -------------------------------------------------------------------------------- 1 | # north 2 | 42.6781933763, -83.1956187338 3 | 42.6782057583, -83.195617585 4 | 5 | # south 6 | # 42.6779877119, -83.1956194079 7 | -------------------------------------------------------------------------------- /igvc_description/urdf/models/barrels_low/meshes/Barrel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboJackets/igvc-software/HEAD/igvc_description/urdf/models/barrels_low/meshes/Barrel.png -------------------------------------------------------------------------------- /igvc_navigation/config/back_up_recovery.yaml: -------------------------------------------------------------------------------- 1 | back_up_recovery: 2 | frequency: 20.0 3 | velocity: 0.8 4 | threshold_distance: 0.7 5 | obstacle_distance: 0.25 6 | -------------------------------------------------------------------------------- /igvc_rviz_plugins/launch/rviz.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /igvc_msgs/msg/system_stats.msg: -------------------------------------------------------------------------------- 1 | Header header 2 | float64 total_cpu_usage # (% of total) 3 | float64[] cpu # (% per core) 4 | float64 used_memory # (GB) 5 | float64 total_memory # (GB) 6 | -------------------------------------------------------------------------------- /igvc_perception/src/pointcloud_segmentation/example/example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboJackets/igvc-software/HEAD/igvc_perception/src/pointcloud_segmentation/example/example.png -------------------------------------------------------------------------------- /documents/design/navigation_state_machine/navigation_state_machine.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboJackets/igvc-software/HEAD/documents/design/navigation_state_machine/navigation_state_machine.gif -------------------------------------------------------------------------------- /igvc_perception/src/multiclass_segmentation/example/model_prediction.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboJackets/igvc-software/HEAD/igvc_perception/src/multiclass_segmentation/example/model_prediction.png -------------------------------------------------------------------------------- /igvc_perception/src/pointcloud_segmentation/example/raw_lidar points.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboJackets/igvc-software/HEAD/igvc_perception/src/pointcloud_segmentation/example/raw_lidar points.png -------------------------------------------------------------------------------- /igvc_rviz_plugins/src/.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = space 5 | indent_size = 2 6 | end_of_line = lf 7 | charset = utf-8 8 | trim_trailing_whitespace = true 9 | insert_final_newline = true -------------------------------------------------------------------------------- /igvc_utils/mainpage.dox: -------------------------------------------------------------------------------- 1 | /** 2 | 3 | \mainpage 4 | 5 | \b igvc_navigation is the package associated with the desired movement of the robot as well as creating a representation of the robot's environment. 6 | **/ 7 | -------------------------------------------------------------------------------- /igvc_navigation/mainpage.dox: -------------------------------------------------------------------------------- 1 | /** 2 | 3 | \mainpage 4 | 5 | \b igvc_navigation is the package associated with the desired movement of the robot as well as creating a representation of the robot's environment. 6 | **/ 7 | -------------------------------------------------------------------------------- /igvc_platform/mainpage.dox: -------------------------------------------------------------------------------- 1 | /** 2 | 3 | \mainpage 4 | 5 | \b igvc_navigation is the package associated with the desired movement of the robot as well as creating a representation of the robot's environment. 6 | **/ 7 | -------------------------------------------------------------------------------- /igvc_msgs/msg/map.msg: -------------------------------------------------------------------------------- 1 | Header header 2 | sensor_msgs/Image image 3 | float32 resolution 4 | float32 orientation 5 | uint32 length 6 | uint32 width 7 | uint32 x 8 | uint32 y 9 | uint32 x_initial 10 | uint32 y_initial 11 | -------------------------------------------------------------------------------- /igvc_perception/src/multiclass_segmentation/jupyter_notebook/UNetWithEfficientNet.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/RoboJackets/igvc-software/HEAD/igvc_perception/src/multiclass_segmentation/jupyter_notebook/UNetWithEfficientNet.pdf -------------------------------------------------------------------------------- /igvc_sandbox/install_udev_rules.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | #Moves file containing udev rules for addressing sensors to appropriate folder 3 | 4 | sudo cp igvc.rules /etc/udev/rules.d/ 5 | sudo service udev restart 6 | exit 7 | $SHELL 8 | -------------------------------------------------------------------------------- /igvc_gazebo/config/waypoints_autonav_0.csv: -------------------------------------------------------------------------------- 1 | 33.7742906118346, -84.40482946425239 2 | 33.7744032479795, -84.40493470388343 3 | 33.7744015516094, -84.40507763991296 4 | 33.7742906402805, -84.40517679775147 5 | 33.7747034526282, -84.40500116144553 -------------------------------------------------------------------------------- /igvc_gazebo/config/waypoints_autonav_1.csv: -------------------------------------------------------------------------------- 1 | 33.7742906402805, -84.40517679775147 2 | 33.7744015516094, -84.40507763991296 3 | 33.7744032479795, -84.40493470388343 4 | 33.7742906118346, -84.40482946425239 5 | 33.7747034526282, -84.40500116144553 -------------------------------------------------------------------------------- /igvc_navigation/config/swerve_drive.yaml: -------------------------------------------------------------------------------- 1 | swerve_drive: 2 | # order: fl, bl, br, fr 3 | positions: [[0.362, 0.188],[-0.362, 0.188], [-0.362, -0.188], [0.362, -0.188]] 4 | limits: [[-1.88, 1.88], [-1.88, 1.88], [-1.88, 1.88], [-1.88, 1.88]] -------------------------------------------------------------------------------- /igvc_perception/config/ground_filter.yaml: -------------------------------------------------------------------------------- 1 | topic: 2 | input: "/lidar/transformed" 3 | filtered: "/ground_segmentation" 4 | range: 5 | frame_id: "base_link" 6 | x: 5.0 7 | y: 5.0 8 | height_min: 0.3 9 | height_max: 2.0 -------------------------------------------------------------------------------- /igvc_sandbox/camera_pose_estimation/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 2.8) 2 | project( solvepnp ) 3 | find_package( OpenCV REQUIRED ) 4 | add_executable( solvepnp solvepnp.cpp ) 5 | target_link_libraries( solvepnp ${OpenCV_LIBS} ) 6 | -------------------------------------------------------------------------------- /igvc_rviz_plugins/src/imu_viz/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | #set(SRC_FILES 2 | # imu_display.cpp 3 | # imu_visual.cpp 4 | # ) 5 | # 6 | #add_library(imu_viz ${SRC_FILES}) 7 | #target_link_libraries(imu_viz Qt5::Widgets ${catkin_LIBRARIES} ${Boost_LIBRARIES}) 8 | -------------------------------------------------------------------------------- /igvc_msgs/msg/velocity_quad.msg: -------------------------------------------------------------------------------- 1 | Header header 2 | float64 fl_velocity 3 | float64 fr_velocity 4 | float64 bl_velocity 5 | float64 br_velocity 6 | float64 fl_angle 7 | float64 fr_angle 8 | float64 bl_angle 9 | float64 br_angle 10 | float64 duration -------------------------------------------------------------------------------- /igvc_utils/launch/system_stats.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /igvc_sandbox/waypoints/comp/north.csv: -------------------------------------------------------------------------------- 1 | 42.6790651932, -83.1949756404 # Auto nav north 2 | 42.6789723207, -83.1951336744 # Ramp north 3 | 42.6788536649, -83.1951441500 # Ramp south 4 | 42.6787645626, -83.1949480515 # Auto nav south 5 | # INSERT END WAYPOINT HERE 6 | -------------------------------------------------------------------------------- /igvc_sandbox/waypoints/comp/south.csv: -------------------------------------------------------------------------------- 1 | 42.6787645626, -83.1949480515 # Auto nav south 2 | 42.6788536649, -83.1951441500 # Ramp south 3 | 42.6789723207, -83.1951336744 # Ramp north 4 | 42.6790651932, -83.1949756404 # Auto nav north 5 | # INSERT END WAYPOINT HERE 6 | -------------------------------------------------------------------------------- /igvc_navigation/launch/set_waypoint_file_path.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /igvc_navigation/config/gridmap_viz.yaml: -------------------------------------------------------------------------------- 1 | grid_map_topic: /mapper/debug/lidar/gridmap 2 | grid_map_visualizations: 3 | - name: occupancy_grid 4 | type: occupancy_grid 5 | params: 6 | layer: "probability" 7 | data_min: 0.0 8 | data_max: 1.0 9 | -------------------------------------------------------------------------------- /igvc_navigation/launch/back_circle_server.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /igvc_perception/src/multiclass_segmentation/requirements.txt: -------------------------------------------------------------------------------- 1 | segmentation-models-pytorch 2 | tensorboard 3 | torchvision 4 | torch 5 | catalyst==20.12 6 | numpy 7 | opencv-python 8 | scikit-learn 9 | matplotlib 10 | 11 | # Make sure to install the dependencies for each. 12 | -------------------------------------------------------------------------------- /igvc_perception/src/train_eval/cfg/igvc.cfg: -------------------------------------------------------------------------------- 1 | # Text file containing list of paths to training/testing images. 2 | # Example: /media/justin_zheng/OS/Data/igvc/3-2/train.txt 3 | train = '' 4 | test = '' 5 | 6 | # Directory for saving model checkpoints during training. 7 | backup = '' 8 | -------------------------------------------------------------------------------- /igvc_sandbox/waypoints/gps_check.csv: -------------------------------------------------------------------------------- 1 | # West part of small strip 2 | 42.6785886633, -83.1953199933 # Our GPS 3 | 42.6785891496, -83.1953224937 # Their GPS 4 | 5 | # East part of small strip 6 | 42.67858314, -83.1951827267 # Our GPS 7 | 42.6785779773167, -83.1951895559 # Their GPS 8 | -------------------------------------------------------------------------------- /igvc_perception/launch/slope_filter.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /igvc_navigation/launch/gridmap_viz.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /igvc_platform/src/imu/yostlab_driver_node.cpp: -------------------------------------------------------------------------------- 1 | #include "YostLabDriver.h" 2 | 3 | int main(int argc, char **argv) 4 | { 5 | ros::init(argc, argv, "imu"); 6 | ros::NodeHandle nh; 7 | ros::NodeHandle priv_nh("~"); 8 | YostLabDriver imu_drv(nh, priv_nh); 9 | imu_drv.run(); 10 | } 11 | -------------------------------------------------------------------------------- /igvc_perception/launch/elevation_map_height.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /igvc_perception/launch/pointcloud_filter.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /.pep8speaks.yaml: -------------------------------------------------------------------------------- 1 | scanner: 2 | diff_only: True # If False, the entire file touched by the Pull Request is scanned for errors. If True, only the diff is scanned. 3 | linter: flake8 4 | 5 | pycodestyle: # Same as scanner.linter value. Other option is flake8 6 | max-line-length: 120 # Default is 79 in PEP 8 7 | -------------------------------------------------------------------------------- /igvc_platform/launch/quaternion_to_rpy.launch: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /igvc_utils/launch/speed_compare.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /igvc_navigation/launch/navigation_client.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /igvc_msgs/msg/lights.msg: -------------------------------------------------------------------------------- 1 | Header header 2 | 3 | # Underglow color (RGB) 4 | uint8[3] underglow_color 5 | 6 | # Underglow Brightness 7 | # 0-2 : Bar 1, sections 1-3 8 | # 3-5 : Bar 2, sections 1-3 9 | uint8[6] underglow_brightness 10 | 11 | # Safety Light flashing status 12 | # true : flashing 13 | # false : solid 14 | bool safety_flashing 15 | -------------------------------------------------------------------------------- /igvc_perception/src/pointcloud_filter/pointcloud_filter_node.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | int main(int argc, char** argv) 5 | { 6 | ros::init(argc, argv, "pointcloud_filter_node"); 7 | 8 | pointcloud_filter::PointcloudFilter pointcloud_filter{}; 9 | 10 | ros::spin(); 11 | } 12 | -------------------------------------------------------------------------------- /igvc_navigation/src/mapper/lidar_layer_config.cpp: -------------------------------------------------------------------------------- 1 | #include "lidar_layer_config.h" 2 | 3 | #include 4 | 5 | namespace lidar_layer 6 | { 7 | LidarLayerConfig::LidarLayerConfig(const ros::NodeHandle &parent_nh) 8 | : nh{ parent_nh, "lidar_layer" }, map{ nh }, lidar{ nh } 9 | { 10 | } 11 | } // namespace lidar_layer 12 | -------------------------------------------------------------------------------- /igvc_perception/include/pointcloud_filter/filter.h: -------------------------------------------------------------------------------- 1 | #ifndef SRC_FILTER_H 2 | #define SRC_FILTER_H 3 | 4 | #include 5 | 6 | namespace pointcloud_filter 7 | { 8 | class Filter 9 | { 10 | public: 11 | virtual void filter(Bundle& bundle) = 0; 12 | }; 13 | } // namespace pointcloud_filter 14 | 15 | #endif // SRC_FILTER_H 16 | -------------------------------------------------------------------------------- /igvc_utils/setup.py: -------------------------------------------------------------------------------- 1 | ## ! DO NOT MANUALLY INVOKE THIS setup.py, USE CATKIN INSTEAD 2 | from setuptools import setup 3 | from catkin_pkg.python_setup import generate_distutils_setup 4 | # fetch values from package.xml 5 | setup_args = generate_distutils_setup( 6 | packages=['igvc_utils'], 7 | package_dir={'': 'src'}, 8 | ) 9 | setup(**setup_args) 10 | -------------------------------------------------------------------------------- /igvc_navigation/setup.py: -------------------------------------------------------------------------------- 1 | ## ! DO NOT MANUALLY INVOKE THIS setup.py, USE CATKIN INSTEAD 2 | from setuptools import setup 3 | from catkin_pkg.python_setup import generate_distutils_setup 4 | # fetch values from package.xml 5 | setup_args = generate_distutils_setup( 6 | packages=['igvc_navigation'], 7 | package_dir={'': 'src'}, 8 | ) 9 | setup(**setup_args) 10 | -------------------------------------------------------------------------------- /igvc_navigation/src/back_up_recovery/back_up_recovery.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | A recovery behavior which makes the robot back up. 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /igvc_perception/setup.py: -------------------------------------------------------------------------------- 1 | ## ! DO NOT MANUALLY INVOKE THIS setup.py, USE CATKIN INSTEAD 2 | from setuptools import setup 3 | from catkin_pkg.python_setup import generate_distutils_setup 4 | # fetch values from package.xml 5 | setup_args = generate_distutils_setup( 6 | packages=['igvc_perception'], 7 | package_dir={'': 'src'}, 8 | ) 9 | setup(**setup_args) 10 | -------------------------------------------------------------------------------- /igvc_platform/setup.py: -------------------------------------------------------------------------------- 1 | ## ! DO NOT MANUALLY INVOKE THIS setup.py, USE CATKIN INSTEAD 2 | from setuptools import setup 3 | from catkin_pkg.python_setup import generate_distutils_setup 4 | # fetch values from package.xml 5 | setup_args = generate_distutils_setup( 6 | packages=['igvc_platform'], 7 | package_dir={'': 'src'}, 8 | ) 9 | setup(**setup_args) 10 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | # This file is used for aliases for long commands such as clang-format 2 | files := $(shell find . \( -name '*.h' -or -name '*.hpp' -or -name '*.cpp' \) -not -path "./external/*") 3 | 4 | format: 5 | clang-format -i $(files) 6 | 7 | autofix: format tidy-fix 8 | 9 | tidy: 10 | .circleci/utils/tidy.sh 11 | 12 | tidy-fix: 13 | .circleci/utils/tidy.sh -fix 14 | -------------------------------------------------------------------------------- /igvc_platform/src/system_stats/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | find_package(PkgConfig REQUIRED) 2 | pkg_search_module(GLIBTOP REQUIRED libgtop-2.0) 3 | 4 | 5 | add_executable(system_stats main.cpp) 6 | target_link_libraries(system_stats ${catkin_LIBRARIES} ${GLIBTOP_LIBRARIES}) 7 | include_directories(${GLIBTOP_INCLUDE_DIRS}) 8 | target_compile_options(system_stats PUBLIC ${GLIBTOP_CFLAGS_OTHER}) 9 | -------------------------------------------------------------------------------- /igvc_navigation/launch/swerve_drive.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /igvc_sandbox/waypoints/waypoints.csv: -------------------------------------------------------------------------------- 1 | #33.7872206317,-84.4059438933 2 | #33.7871938383,-84.4061946033 3 | #33.7873257033, -84.40596121 4 | #33.7874183083, -84.406307115 5 | #42.6785192010, -83.1954101921 6 | #42.6782470225, -83.1953990408 7 | #42.6781036, -83.1954691 8 | #42.6784602, -83.1946805 9 | # quals 10 | #42.6782191223, -83.1955080989 11 | 42.6778987274, -83.1954820799 12 | #test 13 | -------------------------------------------------------------------------------- /igvc_utils/src/ethernet/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_library(EthernetSocket EthernetSocket.cpp) 2 | target_link_libraries(EthernetSocket ${Boost_LIBRARIES}) 3 | 4 | install( 5 | TARGETS EthernetSocket 6 | ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 7 | LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 8 | RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 9 | ) 10 | -------------------------------------------------------------------------------- /igvc_description/urdf/models/sun/model.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Sun 5 | 1.0 6 | model.sdf 7 | 8 | 9 | Nate Koenig 10 | nate@osrfoundation.org 11 | 12 | 13 | 14 | A directional light for the sun. 15 | 16 | -------------------------------------------------------------------------------- /igvc_description/urdf/models/barrel/model.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Barrel 5 | 1.0 6 | model.sdf 7 | 8 | 9 | Oswin So 10 | oswinso@gmail.com 11 | 12 | 13 | 14 | A model of a traffic barrel 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /igvc_description/urdf/models/ramp/model.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Ramp 5 | 1.0 6 | model.sdf 7 | 8 | 9 | Oswin So 10 | oswinso@gmail.com 11 | 12 | 13 | 14 | A model of the Continental(TM) ramp 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /igvc_description/urdf/models/ramp_lane/model.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Ramp Plane 5 | 1.0 6 | model.sdf 7 | 8 | 9 | Oswin So 10 | oswinso@gmail.edu 11 | 12 | 13 | 14 | A plane for the ramp lane world 15 | 16 | 17 | -------------------------------------------------------------------------------- /igvc_description/urdf/models/barrels_low/model.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Barrel_low 5 | 1.0 6 | model.sdf 7 | 8 | 9 | Oswin So 10 | oswinso@gmail.com 11 | 12 | 13 | 14 | A model of a traffic barrel 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /igvc_navigation/src/mapper/rolling_layer_config.cpp: -------------------------------------------------------------------------------- 1 | #include "rolling_layer_config.h" 2 | #include 3 | 4 | namespace rolling_layer 5 | { 6 | RollingLayerConfig::RollingLayerConfig(const ros::NodeHandle &parent_nh) 7 | { 8 | ros::NodeHandle nh(parent_nh, "rolling_layer"); 9 | 10 | assertions::getParam(nh, "topic", topic); 11 | } 12 | } // namespace rolling_layer 13 | -------------------------------------------------------------------------------- /igvc_perception/config/visualization/raw.yaml: -------------------------------------------------------------------------------- 1 | grid_map_visualizations: 2 | 3 | - name: elevation_cloud 4 | type: point_cloud 5 | params: 6 | layer: elevation 7 | 8 | - name: sigma_cloud 9 | type: point_cloud 10 | params: 11 | layer: two_sigma_bound 12 | 13 | - name: map_region 14 | type: map_region 15 | params: 16 | color: 16777215 17 | line_width: 0.003 18 | -------------------------------------------------------------------------------- /igvc_platform/src/tests/test/test_swerve_drive.test: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /igvc_rviz_plugins/include/igvc_rviz_plugins_old/my_thread.h: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include 4 | 5 | class MyThread : public QThread 6 | { 7 | Q_OBJECT 8 | 9 | protected: 10 | void run(); 11 | 12 | public: 13 | void setCmd(const char*); 14 | void close(); 15 | 16 | public Q_SLOTS: 17 | 18 | protected Q_SLOTS: 19 | 20 | protected: 21 | char cmd[100]; 22 | QProcess* proc; 23 | }; -------------------------------------------------------------------------------- /igvc_description/urdf/models/autonav/model.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Autonav Plane 5 | 1.0 6 | model.sdf 7 | 8 | 9 | Tan Gemicioglu 10 | tgemici@gatech.edu 11 | 12 | 13 | 14 | The IGVC Auto-Nav Challenge course 15 | 16 | 17 | -------------------------------------------------------------------------------- /igvc_navigation/src/mapper/line_layer_config.cpp: -------------------------------------------------------------------------------- 1 | #include "line_layer_config.h" 2 | 3 | namespace line_layer 4 | { 5 | LineLayerConfig::LineLayerConfig(const ros::NodeHandle &parent_nh) 6 | : nh{ parent_nh, "line_layer" } 7 | , map{ nh } 8 | , cameras{ { nh, "/cam/center" }, { nh, "/cam/left" }, { nh, "/cam/right" } } 9 | , projection{ nh, map.resolution } 10 | { 11 | } 12 | } // namespace line_layer 13 | -------------------------------------------------------------------------------- /igvc_description/urdf/models/qualification/model.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Grass Plane 5 | 1.0 6 | model.sdf 7 | 8 | 9 | Jason Gibson 10 | jgibson37@gatech.edu 11 | 12 | 13 | 14 | A the IGVC qualification course 15 | 16 | 17 | -------------------------------------------------------------------------------- /igvc_utils/launch/compressed_to_raw.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /igvc_navigation/src/mapper/rolling_layer_config.h: -------------------------------------------------------------------------------- 1 | #ifndef SRC_ROLLING_LAYER_CONFIG_H 2 | #define SRC_ROLLING_LAYER_CONFIG_H 3 | 4 | #include 5 | 6 | namespace rolling_layer 7 | { 8 | class RollingLayerConfig 9 | { 10 | public: 11 | RollingLayerConfig(const ros::NodeHandle& parent_nh); 12 | 13 | std::string topic; 14 | }; 15 | } // namespace rolling_layer 16 | 17 | #endif // SRC_ROLLING_LAYER_CONFIG_H 18 | -------------------------------------------------------------------------------- /igvc_navigation/src/mapper/unrolling_layer_config.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include "unrolling_layer_config.h" 4 | 5 | namespace unrolling_layer 6 | { 7 | UnrollingLayerConfig::UnrollingLayerConfig(const ros::NodeHandle &parent_nh) 8 | { 9 | ros::NodeHandle nh{ parent_nh, "unrolling_layer" }; 10 | 11 | assertions::getParam(nh, "topic", topic); 12 | } 13 | } // namespace unrolling_layer 14 | -------------------------------------------------------------------------------- /igvc_navigation/src/mapper/unrolling_layer_config.h: -------------------------------------------------------------------------------- 1 | #ifndef SRC_UNROLLING_LAYER_CONFIG_H 2 | #define SRC_UNROLLING_LAYER_CONFIG_H 3 | 4 | #include 5 | 6 | namespace unrolling_layer 7 | { 8 | struct UnrollingLayerConfig 9 | { 10 | UnrollingLayerConfig(const ros::NodeHandle& parent_nh); 11 | 12 | std::string topic; 13 | }; 14 | } // namespace unrolling_layer 15 | 16 | #endif // SRC_UNROLLING_LAYER_CONFIG_H 17 | -------------------------------------------------------------------------------- /igvc_platform/src/imu/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_executable(imu YostLabDriver.cpp yostlab_driver_node.cpp) 2 | add_dependencies(imu ${catkin_EXPORTED_TARGETS}) 3 | target_link_libraries(imu ${catkin_LIBRARIES}) 4 | 5 | install( 6 | TARGETS imu 7 | ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 8 | LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 9 | RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 10 | ) 11 | -------------------------------------------------------------------------------- /igvc_description/urdf/models/autonav_mesh/model.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Autonav Mesh 5 | 1.0 6 | model.sdf 7 | 8 | 9 | Tan Gemicioglu 10 | tgemici@gatech.edu 11 | 12 | 13 | 14 | The IGVC Auto-Nav Challenge course, but with a 3D mesh 15 | 16 | 17 | -------------------------------------------------------------------------------- /install_dependencies.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | if [ ! -d "/usr/local/include/kindr/" ]; then 3 | git clone https://github.com/ANYbotics/kindr.git 4 | cd kindr 5 | mkdir build 6 | cd build 7 | cmake .. 8 | sudo make install 9 | cd ../.. 10 | rm -rf kindr 11 | fi 12 | 13 | rosdep update 14 | rosdep install -iy --from-paths ../../src --skip-keys='kindr serial' 15 | pip3 install --no-cache-dir torch torchvision 16 | -------------------------------------------------------------------------------- /igvc_utils/src/state/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_library(igvc_state robot_control.cpp robot_state.cpp) 2 | add_dependencies(igvc_state ${catkin_EXPORTED_TARGETS}) 3 | target_link_libraries(igvc_state ${catkin_LIBRARIES}) 4 | 5 | install( 6 | TARGETS igvc_state 7 | ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 8 | LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 9 | RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 10 | ) 11 | -------------------------------------------------------------------------------- /igvc_navigation/src/swerve_drive/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_executable(swerve_drive swerve_drive.cpp) 2 | add_dependencies(swerve_drive ${catkin_EXPORTED_TARGETS}) 3 | target_link_libraries(swerve_drive ${catkin_LIBRARIES}) 4 | 5 | install( 6 | TARGETS swerve_drive 7 | ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 8 | LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 9 | RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 10 | ) 11 | -------------------------------------------------------------------------------- /igvc_perception/config/pointcloud_segmentation.yaml: -------------------------------------------------------------------------------- 1 | option: "euclidean" # option ["euclidean" or "region_growing"] 2 | frame_id: "base_link" 3 | euclidean: 4 | tolerance: 0.25 5 | min: 20 6 | max: 300 7 | 8 | region_growing: 9 | kSearch: 30 10 | min: 20 11 | max: 300 12 | numberOfNeighbours: 30 13 | smoothnessThreshold: 3.0 14 | curvatureThreshold: 1.0 15 | outlier_filter: 16 | meanK: 50 17 | stdDevMulThresh: 1.0 -------------------------------------------------------------------------------- /igvc_perception/src/pointcloud_filter/bundle.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | namespace pointcloud_filter 4 | { 5 | Bundle::Bundle(const PointCloud::ConstPtr& raw_pointcloud) 6 | : pointcloud{ new PointCloud }, occupied_pointcloud{ new PointCloud }, free_pointcloud{ new PointCloud } 7 | { 8 | pointcloud->points = raw_pointcloud->points; 9 | pointcloud->header = raw_pointcloud->header; 10 | } 11 | } // namespace pointcloud_filter 12 | -------------------------------------------------------------------------------- /igvc_utils/src/system_stats/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_executable(system_stats main.cpp cpu_usage.hpp) 2 | add_dependencies(system_stats ${catkin_EXPORTED_TARGETS}) 3 | target_link_libraries(system_stats ${catkin_LIBRARIES}) 4 | 5 | install( 6 | TARGETS system_stats 7 | ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 8 | LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 9 | RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 10 | ) 11 | -------------------------------------------------------------------------------- /igvc_utils/include/igvc_utils/StringUtils.hpp: -------------------------------------------------------------------------------- 1 | #ifndef STRINGUTILS_H 2 | #define STRINGUTILS_H 3 | 4 | #include 5 | #include 6 | 7 | std::vector split(const std::string &s, const char &delim) 8 | { 9 | std::vector elems; 10 | std::stringstream ss(s); 11 | std::string item; 12 | while (getline(ss, item, delim)) 13 | { 14 | elems.push_back(item); 15 | } 16 | return elems; 17 | } 18 | 19 | #endif 20 | -------------------------------------------------------------------------------- /igvc_gazebo/nodes/magnetometer/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_executable(mag_republisher main.cpp) 2 | add_dependencies(mag_republisher ${catkin_EXPORTED_TARGETS}) 3 | target_link_libraries(mag_republisher ${catkin_LIBRARIES}) 4 | 5 | install( 6 | TARGETS mag_republisher 7 | ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 8 | LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 9 | RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 10 | ) -------------------------------------------------------------------------------- /igvc_gazebo/nodes/swerve_control/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_executable(swerve_control swerve_control.cpp) 2 | add_dependencies(swerve_control ${catkin_EXPORTED_TARGETS}) 3 | target_link_libraries(swerve_control ${catkin_LIBRARIES}) 4 | 5 | install( 6 | TARGETS swerve_control 7 | ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 8 | LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 9 | RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 10 | ) 11 | -------------------------------------------------------------------------------- /igvc_platform/include/igvc_platform/nanopb/swerve_commands.pb.c: -------------------------------------------------------------------------------- 1 | /* Automatically generated nanopb constant definitions */ 2 | /* Generated by nanopb-0.4.6-dev */ 3 | 4 | #include "swerve_commands.pb.h" 5 | #if PB_PROTO_HEADER_VERSION != 40 6 | #error Regenerate this file with the current version of nanopb generator. 7 | #endif 8 | 9 | PB_BIND(ResponseMessage, ResponseMessage, AUTO) 10 | 11 | 12 | PB_BIND(RequestMessage, RequestMessage, AUTO) 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /igvc_utils/src/quaternion_to_rpy/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_executable(quaternion_to_rpy main.cpp) 2 | add_dependencies(quaternion_to_rpy ${catkin_EXPORTED_TARGETS}) 3 | target_link_libraries(quaternion_to_rpy ${catkin_LIBRARIES}) 4 | 5 | install( 6 | TARGETS quaternion_to_rpy 7 | ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 8 | LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 9 | RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 10 | ) 11 | -------------------------------------------------------------------------------- /igvc_navigation/src/swerve_wheel_odometer/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_executable(swerve_odometer swerve_odometer.cpp) 2 | add_dependencies(swerve_odometer ${catkin_EXPORTED_TARGETS}) 3 | target_link_libraries(swerve_odometer ${catkin_LIBRARIES}) 4 | 5 | install( 6 | TARGETS swerve_odometer 7 | ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 8 | LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 9 | RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 10 | ) -------------------------------------------------------------------------------- /igvc_perception/src/slope_filter/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_executable(slope_filter slope_filter.cpp) 2 | add_dependencies(slope_filter ${catkin_EXPORTED_TARGETS}) 3 | target_link_libraries(slope_filter ${catkin_LIBRARIES}) 4 | 5 | install( 6 | TARGETS slope_filter 7 | ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 8 | LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 9 | RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 10 | ) 11 | -------------------------------------------------------------------------------- /igvc_platform/launch/gps.launch: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /igvc_navigation/src/back_circle/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_executable(back_circle back_circle_server.cpp) 2 | add_dependencies(back_circle ${catkin_EXPORTED_TARGETS}) 3 | target_link_libraries(back_circle ${catkin_LIBRARIES} ${OPENCV_LIBRARIES}) 4 | 5 | install( 6 | TARGETS back_circle 7 | ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 8 | LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 9 | RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 10 | ) 11 | -------------------------------------------------------------------------------- /igvc_navigation/src/tests/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_rostest_gtest(TestMapper test/test_mapper.test test_mapper.cpp) 2 | target_link_libraries(TestMapper ${catkin_LIBRARIES}) 3 | 4 | #add_rostest_gtest(TestPathPlanner test/test_path_planner.test test_path_planner.cpp) 5 | #target_link_libraries(TestPathPlanner ${catkin_LIBRARIES}) 6 | 7 | #add_rostest_gtest(TestPathFollower test/test_path_follower.test test_path_follower.cpp) 8 | #target_link_libraries(TestPathFollower ${catkin_LIBRARIES}) 9 | -------------------------------------------------------------------------------- /igvc_platform/src/tests/test/test_scan_to_pointcloud.test: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /igvc_navigation/src/navigation_server/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_executable(navigation_server navigation_server.cpp) 2 | add_dependencies(navigation_server ${catkin_EXPORTED_TARGETS}) 3 | target_link_libraries(navigation_server ${catkin_LIBRARIES}) 4 | 5 | install( 6 | TARGETS navigation_server 7 | ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 8 | LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 9 | RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 10 | ) 11 | -------------------------------------------------------------------------------- /igvc_perception/src/pointcloud_filter/radius_filter/radius_filter_config.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | namespace pointcloud_filter 5 | { 6 | RadiusFilterConfig::RadiusFilterConfig(const ros::NodeHandle &nh) 7 | { 8 | ros::NodeHandle child_nh{ nh, "radius_filter" }; 9 | 10 | assertions::getParam(child_nh, "radius_squared", radius_squared); 11 | } 12 | } // namespace pointcloud_filter 13 | -------------------------------------------------------------------------------- /igvc_description/urdf/models/grass_plane/model.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Grass Plane 5 | 1.0 6 | model-1_2.sdf 7 | model-1_4.sdf 8 | model.sdf 9 | 10 | 11 | Jason Gibson 12 | jgibson37@gatech.edu 13 | 14 | 15 | 16 | A simple grass plane 17 | 18 | 19 | -------------------------------------------------------------------------------- /igvc_gazebo/nodes/ground_truth/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_executable(ground_truth_republisher main.cpp) 2 | add_dependencies(ground_truth_republisher ${catkin_EXPORTED_TARGETS}) 3 | target_link_libraries(ground_truth_republisher ${catkin_LIBRARIES}) 4 | 5 | install( 6 | TARGETS ground_truth_republisher 7 | ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 8 | LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 9 | RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 10 | ) 11 | -------------------------------------------------------------------------------- /igvc_navigation/src/back_up_recovery/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_library(back_up_recovery back_up_recovery.cpp) 2 | add_dependencies(back_up_recovery ${catkin_EXPORTED_TARGETS}) 3 | target_link_libraries(back_up_recovery ${catkin_LIBRARIES}) 4 | 5 | install( 6 | TARGETS back_up_recovery 7 | ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 8 | LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 9 | RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 10 | ) 11 | -------------------------------------------------------------------------------- /igvc_perception/include/pointcloud_filter/radius_filter/radius_filter_config.h: -------------------------------------------------------------------------------- 1 | #ifndef SRC_RADIUS_FILTER_CONFIG_H 2 | #define SRC_RADIUS_FILTER_CONFIG_H 3 | 4 | #include 5 | 6 | namespace pointcloud_filter 7 | { 8 | struct RadiusFilterConfig 9 | { 10 | double radius_squared = 0.0; 11 | 12 | RadiusFilterConfig() = default; 13 | RadiusFilterConfig(const ros::NodeHandle& nh); 14 | }; 15 | } // namespace pointcloud_filter 16 | 17 | #endif // SRC_RADIUS_FILTER_CONFIG_H 18 | -------------------------------------------------------------------------------- /igvc_navigation/src/navigation_client/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_executable(navigation_client navigation_client.cpp) 2 | add_dependencies(navigation_client ${catkin_EXPORTED_TARGETS}) 3 | target_link_libraries(navigation_client ${catkin_LIBRARIES}) 4 | 5 | install( 6 | TARGETS navigation_client 7 | ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 8 | LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 9 | RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 10 | ) 11 | -------------------------------------------------------------------------------- /igvc_perception/include/pointcloud_filter/back_filter/back_filter_config.h: -------------------------------------------------------------------------------- 1 | #ifndef SRC_BACK_FILTER_CONFIG_H 2 | #define SRC_BACK_FILTER_CONFIG_H 3 | 4 | #include 5 | 6 | namespace pointcloud_filter 7 | { 8 | struct BackFilterConfig 9 | { 10 | double start_angle = 0.0; 11 | double end_angle = 0.0; 12 | 13 | BackFilterConfig() = default; 14 | BackFilterConfig(const ros::NodeHandle& nh); 15 | }; 16 | } // namespace pointcloud_filter 17 | 18 | #endif // SRC_BACK_FILTER_CONFIG_H 19 | -------------------------------------------------------------------------------- /igvc_sandbox/waypoints/parking_lot_loop.csv: -------------------------------------------------------------------------------- 1 | # parking lot start 2 | 33.7872523, -84.406461795 3 | 4 | # p1 5 | 33.7872660915, -84.4066058544 6 | 7 | #p2 8 | 33.7873060948, -84.40678956 9 | 10 | #p3 11 | 33.7873185961, -84.4069968251 12 | 13 | # p4 14 | 33.7874426834, -84.4069728324 15 | 16 | # p5 17 | 33.7874514702, -84.406608273 18 | 19 | # p6 20 | 33.7874295302, -84.4061920366 21 | 22 | # p7 23 | 33.787252605, -84.4060825642 24 | 25 | # parking lot end 26 | 33.7872534074, -84.4063491636 27 | -------------------------------------------------------------------------------- /igvc_gazebo/nodes/sim_color_detector/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_executable(sim_color_detector sim_color_detector.cpp) 2 | add_dependencies(sim_color_detector ${catkin_EXPORTED_TARGETS}) 3 | target_link_libraries(sim_color_detector ${catkin_LIBRARIES} ${OpenCV_LIBRARIES}) 4 | 5 | install( 6 | TARGETS sim_color_detector 7 | ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 8 | LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 9 | RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 10 | ) 11 | -------------------------------------------------------------------------------- /igvc_platform/src/swerve_joystick_driver/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_executable(swerve_joystick_driver swerve_joystick.cpp) 2 | add_dependencies(swerve_joystick_driver ${catkin_EXPORTED_TARGETS}) 3 | target_link_libraries(swerve_joystick_driver ${catkin_LIBRARIES}) 4 | 5 | install( 6 | TARGETS swerve_joystick_driver 7 | ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 8 | LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 9 | RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 10 | ) 11 | -------------------------------------------------------------------------------- /igvc_rviz_plugins/include/igvc_rviz_plugins_old/speedometer.h: -------------------------------------------------------------------------------- 1 | #ifndef SPEEDOMETER_H 2 | #define SPEEDOMETER_H 3 | 4 | #include 5 | 6 | class Speedometer : public QWidget 7 | { 8 | Q_OBJECT 9 | public: 10 | explicit Speedometer(QWidget *parent = 0); 11 | void setValue(float value); 12 | void setMaxValue(float maxVal); 13 | 14 | protected: 15 | void paintEvent(QPaintEvent *event) override; 16 | 17 | private: 18 | float value; 19 | float maxVal; 20 | }; 21 | 22 | #endif // SPEEDOMETER_H 23 | -------------------------------------------------------------------------------- /igvc_perception/include/pointcloud_filter/ground_filter/ground_filter_config.h: -------------------------------------------------------------------------------- 1 | #ifndef SRC_GROUND_FILTER_CONFIG_H 2 | #define SRC_GROUND_FILTER_CONFIG_H 3 | 4 | #include 5 | 6 | namespace pointcloud_filter 7 | { 8 | struct GroundFilterConfig 9 | { 10 | double height_min = 0.0; 11 | double height_max = 0.0; 12 | 13 | GroundFilterConfig() = default; 14 | GroundFilterConfig(const ros::NodeHandle& nh); 15 | }; 16 | } // namespace pointcloud_filter 17 | 18 | #endif // SRC_GROUND_FILTER_CONFIG_H 19 | -------------------------------------------------------------------------------- /igvc_perception/src/pointcloud_segmentation/ground_filter.h: -------------------------------------------------------------------------------- 1 | #ifndef GroundFilter_H 2 | #define GroundFilter_H 3 | 4 | #include 5 | #include 6 | 7 | class GroundFilterNode 8 | { 9 | public: 10 | GroundFilterNode(); 11 | 12 | private: 13 | ros::NodeHandle private_nh_; 14 | ros::Subscriber raw_pts_sub_; 15 | ros::Publisher ground_filter_pub_; 16 | 17 | void groundFilterCallback(const sensor_msgs::PointCloud2ConstPtr& input_cloud); 18 | }; 19 | 20 | #endif // GroundFilter_H -------------------------------------------------------------------------------- /igvc_perception/config/visualization/fused.yaml: -------------------------------------------------------------------------------- 1 | grid_map_visualizations: 2 | 3 | - name: elevation_cloud 4 | type: point_cloud 5 | params: 6 | layer: elevation 7 | 8 | - name: upper_bound_cloud 9 | type: point_cloud 10 | params: 11 | layer: upper_bound 12 | 13 | - name: lower_bound_cloud 14 | type: point_cloud 15 | params: 16 | layer: lower_bound 17 | 18 | - name: map_region 19 | type: map_region 20 | params: 21 | color: 16777215 22 | line_width: 0.003 23 | -------------------------------------------------------------------------------- /igvc_gazebo/nodes/scan_to_pointcloud/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_executable(scan_to_pointcloud scan_to_pointcloud.cpp scan_to_pointcloud.h) 2 | add_dependencies(scan_to_pointcloud ${catkin_EXPORTED_TARGETS}) 3 | target_link_libraries(scan_to_pointcloud ${catkin_LIBRARIES} ${PCL_LIBRARIES}) 4 | 5 | install( 6 | TARGETS scan_to_pointcloud 7 | ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 8 | LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 9 | RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 10 | ) 11 | -------------------------------------------------------------------------------- /igvc_navigation/include/mapper/probability_utils.h: -------------------------------------------------------------------------------- 1 | #ifndef SRC_PROBABILITY_UTILS_H 2 | #define SRC_PROBABILITY_UTILS_H 3 | 4 | #include 5 | 6 | namespace probability_utils 7 | { 8 | template 9 | T toLogOdds(T probability) 10 | { 11 | return std::log(probability / (1 - probability)); 12 | } 13 | 14 | template 15 | T fromLogOdds(T logodds) 16 | { 17 | return 1.0 - (1.0 / (1 + std::exp(logodds))); 18 | } 19 | } // namespace probability_utils 20 | 21 | #endif // SRC_PROBABILITY_UTILS_H 22 | -------------------------------------------------------------------------------- /igvc_navigation/src/mapper/lidar_config.h: -------------------------------------------------------------------------------- 1 | #ifndef SRC_LIDAR_CONFIG_H 2 | #define SRC_LIDAR_CONFIG_H 3 | 4 | #include 5 | 6 | namespace lidar_layer 7 | { 8 | class LidarConfig 9 | { 10 | public: 11 | LidarConfig(const ros::NodeHandle& parent_nh); 12 | 13 | std::string occupied_topic; 14 | std::string free_topic; 15 | 16 | double scan_miss; 17 | double scan_hit; 18 | double free_miss; 19 | double hit_exponential_coeff; 20 | }; 21 | } // namespace lidar_layer 22 | 23 | #endif // SRC_LIDAR_CONFIG_H 24 | -------------------------------------------------------------------------------- /igvc_perception/src/pointcloud_filter/back_filter/back_filter_config.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | namespace pointcloud_filter 5 | { 6 | BackFilterConfig::BackFilterConfig(const ros::NodeHandle &nh) 7 | { 8 | ros::NodeHandle child_nh{ nh, "back_filter" }; 9 | 10 | assertions::getParam(child_nh, "start_angle", start_angle); 11 | assertions::getParam(child_nh, "end_angle", end_angle); 12 | } 13 | } // namespace pointcloud_filter 14 | -------------------------------------------------------------------------------- /igvc_navigation/src/mapper/lidar_layer_config.h: -------------------------------------------------------------------------------- 1 | #ifndef SRC_LIDAR_LAYER_CONFIG_H 2 | #define SRC_LIDAR_LAYER_CONFIG_H 3 | 4 | #include 5 | #include "lidar_config.h" 6 | #include "map_config.h" 7 | 8 | namespace lidar_layer 9 | { 10 | class LidarLayerConfig 11 | { 12 | public: 13 | explicit LidarLayerConfig(const ros::NodeHandle& parent_nh); 14 | 15 | ros::NodeHandle nh; 16 | 17 | map::MapConfig map; 18 | LidarConfig lidar; 19 | }; 20 | } // namespace lidar_layer 21 | 22 | #endif // SRC_LIDAR_LAYER_CONFIG_H 23 | -------------------------------------------------------------------------------- /igvc_description/urdf/models/sun/model.sdf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | true 5 | 0 0 10 0 0 0 6 | 0.8 0.8 0.8 1 7 | 0.2 0.2 0.2 1 8 | 9 | 1000 10 | 0.9 11 | 0.01 12 | 0.001 13 | 14 | -0.5 0.1 -0.9 15 | 16 | -------------------------------------------------------------------------------- /igvc_perception/src/elevation_map_height_node/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_executable(elevation_map_height_node elevation_map_height_node.cpp) 2 | add_dependencies(elevation_map_height_node ${catkin_EXPORTED_TARGETS}) 3 | target_link_libraries(elevation_map_height_node ${catkin_LIBRARIES}) 4 | 5 | install( 6 | TARGETS elevation_map_height_node 7 | ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 8 | LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 9 | RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 10 | ) 11 | -------------------------------------------------------------------------------- /igvc_perception/src/pointcloud_filter/ground_filter/ground_filter_config.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | namespace pointcloud_filter 5 | { 6 | GroundFilterConfig::GroundFilterConfig(const ros::NodeHandle &nh) 7 | { 8 | ros::NodeHandle child_nh{ nh, "ground_filter" }; 9 | 10 | assertions::getParam(child_nh, "height_min", height_min); 11 | assertions::getParam(child_nh, "height_max", height_max); 12 | } 13 | } // namespace pointcloud_filter 14 | -------------------------------------------------------------------------------- /igvc_perception/src/pointcloud_segmentation/clustering.h: -------------------------------------------------------------------------------- 1 | #ifndef Clustering_H 2 | #define Clustering_H 3 | 4 | #include 5 | #include 6 | 7 | class ClusteringNode 8 | { 9 | public: 10 | ClusteringNode(); 11 | 12 | private: 13 | ros::NodeHandle private_nh_; 14 | ros::Subscriber ground_filter_sub_; 15 | ros::Publisher clustering_pub_; 16 | ros::Publisher marker_pub_; 17 | 18 | void clusteringCallback(const sensor_msgs::PointCloud2ConstPtr& input_cloud); 19 | }; 20 | 21 | #endif // Clustering_H -------------------------------------------------------------------------------- /igvc_perception/src/robot_pose_type_converter/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_executable(robot_pose_type_converter robot_pose_type_converter.cpp) 2 | add_dependencies(robot_pose_type_converter ${catkin_EXPORTED_TARGETS}) 3 | target_link_libraries(robot_pose_type_converter ${catkin_LIBRARIES}) 4 | 5 | install( 6 | TARGETS robot_pose_type_converter 7 | ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 8 | LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 9 | RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 10 | ) 11 | -------------------------------------------------------------------------------- /igvc_description/launch/robot_state_publisher.launch: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /igvc_utils/launch/rosbag.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 11 | 12 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | # Description 2 | 3 | {{ State the context of this PR }} 4 | 5 | This PR does the following: 6 | - Thing 1 7 | - Thing 2 8 | - Thing 3 9 | 10 | Fixes #{{ github issue }} 11 | 12 | # Testing steps (If relevant) 13 | ## Test Case 1 14 | 1. Do this thing 15 | 2. Do that thing 16 | 3. Make the thing do the thing 17 | 18 | Expectation: The thing which does the thing does the thing 19 | 20 | # Self Checklist 21 | - [ ] I have formatted my code using `make format` 22 | - [ ] I have tested that the new behaviour works 23 | -------------------------------------------------------------------------------- /igvc_gazebo/config/swervi_joint_limits.yaml: -------------------------------------------------------------------------------- 1 | joint_limits: 2 | fl_swivel_rev: 3 | has_position_limits: true 4 | min_position: -3.14 5 | max_position: 3.14 6 | 7 | fr_swivel_rev: 8 | has_position_limits: true 9 | min_position: -3.14 10 | max_position: 3.14 11 | 12 | bl_swivel_rev: 13 | has_position_limits: true 14 | min_position: -3.14 15 | max_position: 3.14 16 | 17 | br_swivel_rev: 18 | has_position_limits: true 19 | min_position: -1.57 20 | max_position: 3.14 -------------------------------------------------------------------------------- /igvc_description/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 2.8.3) 2 | project(igvc_description) 3 | find_package(catkin REQUIRED) 4 | catkin_package() 5 | 6 | install(DIRECTORY launch/ 7 | DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/launch 8 | FILES_MATCHING PATTERN "*.launch" PATTERN "*.machine" PATTERN "*.yaml" PATTERN "*.urdf" 9 | ) 10 | 11 | install(DIRECTORY urdf/ 12 | DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/urdf 13 | FILES_MATCHING PATTERN "*.dae" PATTERN "*.stl" PATTERN "*.xacro" PATTERN "*.yaml" PATTERN "*.urdf" 14 | ) 15 | -------------------------------------------------------------------------------- /igvc_description/urdf/models/construction_barrel/model.config: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Construction Barrel 5 | 1.0 6 | model-1_2.sdf 7 | model-1_3.sdf 8 | model-1_4.sdf 9 | model.sdf 10 | 11 | 12 | Jason Gibson 13 | jgibson37@gatech.edu 14 | 15 | 16 | 17 | A smple construction barrel 18 | 19 | 20 | -------------------------------------------------------------------------------- /igvc_navigation/src/mapper/projection_config.h: -------------------------------------------------------------------------------- 1 | #ifndef SRC_PROJECTION_CONFIG_H 2 | #define SRC_PROJECTION_CONFIG_H 3 | 4 | #include 5 | 6 | namespace line_layer 7 | { 8 | class ProjectionConfig 9 | { 10 | public: 11 | ProjectionConfig(const ros::NodeHandle& parent_nh, double resolution); 12 | 13 | double length_x; 14 | double length_y; 15 | int size_x; 16 | int size_y; 17 | 18 | int line_closing_kernel_size; 19 | int freespace_closing_kernel_size; 20 | }; 21 | } // namespace line_layer 22 | 23 | #endif // SRC_PROJECTION_CONFIG_H 24 | -------------------------------------------------------------------------------- /igvc_sandbox/waypoints/carpark_back_and_forth.csv: -------------------------------------------------------------------------------- 1 | 33.787181195, -84.4062056633 2 | 33.7872007933, -84.40596125 3 | 33.787181195, -84.4062056633 4 | 33.7872007933, -84.40596125 5 | 33.787181195, -84.4062056633 6 | 33.7872007933, -84.40596125 7 | 33.787181195, -84.4062056633 8 | 33.7872007933, -84.40596125 9 | 33.787181195, -84.4062056633 10 | 33.7872007933, -84.40596125 11 | 33.787181195, -84.4062056633 12 | 33.7872007933, -84.40596125 13 | 33.787181195, -84.4062056633 14 | 33.7872007933, -84.40596125 15 | 33.787181195, -84.4062056633 16 | 33.7872007933, -84.40596125 17 | -------------------------------------------------------------------------------- /igvc_platform/launch/calibrate_imus.launch: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /igvc_navigation/src/mapper/traversability_layer_config.h: -------------------------------------------------------------------------------- 1 | #ifndef SRC_TRAVERSABILITY_CONFIG_H 2 | #define SRC_TRAVERSABILITY_CONFIG_H 3 | 4 | #include 5 | #include "map_config.h" 6 | 7 | namespace traversability_layer 8 | { 9 | class TraversabilityLayerConfig 10 | { 11 | public: 12 | explicit TraversabilityLayerConfig(const ros::NodeHandle& parent_nh); 13 | 14 | ros::NodeHandle nh; 15 | 16 | map::MapConfig map; 17 | 18 | double logodd_increment; 19 | double slope_threshold; 20 | }; 21 | } // namespace traversability_layer 22 | 23 | #endif // SRC_TRAVERSABILITY_CONFIG_H 24 | -------------------------------------------------------------------------------- /igvc_perception/include/pointcloud_filter/raycast_filter/raycast_filter_config.h: -------------------------------------------------------------------------------- 1 | #ifndef SRC_RAYCAST_FILTER_CONFIG_H 2 | #define SRC_RAYCAST_FILTER_CONFIG_H 3 | 4 | #include 5 | 6 | namespace pointcloud_filter 7 | { 8 | struct RaycastFilterConfig 9 | { 10 | double end_distance = 0.0; 11 | double angular_resolution = 0.0; 12 | double start_angle = 0.0; 13 | double end_angle = 0.0; 14 | double min_range = 0.0; 15 | 16 | explicit RaycastFilterConfig(const ros::NodeHandle& nh); 17 | }; 18 | } // namespace pointcloud_filter 19 | 20 | #endif // SRC_RAYCAST_FILTER_CONFIG_H 21 | -------------------------------------------------------------------------------- /igvc_platform/src/segmented_camera/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | find_package(PkgConfig REQUIRED) 2 | 3 | 4 | add_executable(segmented_camera_info_publisher segmented_camera_info_publisher.cpp) 5 | add_dependencies(segmented_camera_info_publisher ${catkin_EXPORTED_TARGETS}) 6 | target_link_libraries(segmented_camera_info_publisher ${catkin_LIBRARIES}) 7 | 8 | 9 | install( 10 | TARGETS segmented_camera_info_publisher 11 | ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 12 | LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 13 | RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 14 | ) 15 | -------------------------------------------------------------------------------- /igvc_navigation/launch/swerve_wheel_odometry.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /igvc_navigation/src/mapper/line_layer_config.h: -------------------------------------------------------------------------------- 1 | #ifndef SRC_LINE_LAYER_CONFIG_H 2 | #define SRC_LINE_LAYER_CONFIG_H 3 | 4 | #include 5 | #include "camera_config.h" 6 | #include "map_config.h" 7 | #include "projection_config.h" 8 | 9 | namespace line_layer 10 | { 11 | class LineLayerConfig 12 | { 13 | public: 14 | explicit LineLayerConfig(const ros::NodeHandle& parent_nh); 15 | 16 | ros::NodeHandle nh; 17 | 18 | map::MapConfig map; 19 | std::vector cameras; 20 | ProjectionConfig projection; 21 | }; 22 | } // namespace line_layer 23 | 24 | #endif // SRC_LINE_LAYER_CONFIG_H 25 | -------------------------------------------------------------------------------- /igvc_perception/include/pointcloud_filter/bundle.h: -------------------------------------------------------------------------------- 1 | #ifndef SRC_POINTCLOUD_BUNDLE_H 2 | #define SRC_POINTCLOUD_BUNDLE_H 3 | 4 | #include 5 | #include "pointcloud_filter/point_types.h" 6 | 7 | namespace pointcloud_filter 8 | { 9 | struct Bundle 10 | { 11 | using PointCloud = pcl::PointCloud; 12 | 13 | PointCloud::Ptr pointcloud; 14 | PointCloud::Ptr occupied_pointcloud; 15 | PointCloud::Ptr free_pointcloud; 16 | 17 | Bundle(const PointCloud::ConstPtr& raw_pointcloud); 18 | }; 19 | } // namespace pointcloud_filter 20 | 21 | #endif // SRC_POINTCLOUD_BUNDLE_H 22 | -------------------------------------------------------------------------------- /igvc_perception/src/robot_pose_type_converter/robot_pose_type_converter.h: -------------------------------------------------------------------------------- 1 | #ifndef SRC_ROBOT_POSE_TYPE_CONVERTER_H 2 | #define SRC_ROBOT_POSE_TYPE_CONVERTER_H 3 | 4 | #include 5 | #include 6 | #include 7 | 8 | class RobotPoseTypeConveter 9 | { 10 | public: 11 | RobotPoseTypeConveter(); 12 | 13 | private: 14 | ros::NodeHandle private_nh_; 15 | ros::Publisher pose_publisher_; 16 | ros::Subscriber pose_subscriber_; 17 | 18 | void poseCallback(const nav_msgs::Odometry& odometry); 19 | }; 20 | 21 | #endif // SRC_ROBOT_POSE_TYPE_CONVERTER_H 22 | -------------------------------------------------------------------------------- /igvc_platform/launch/joystick_driver.launch: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /igvc_utils/launch/imu_to_rpy.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /igvc_navigation/src/mapper/map_config.h: -------------------------------------------------------------------------------- 1 | #ifndef SRC_MAP_CONFIG_H 2 | #define SRC_MAP_CONFIG_H 3 | 4 | #include 5 | 6 | namespace map 7 | { 8 | class MapConfig 9 | { 10 | public: 11 | MapConfig(const ros::NodeHandle& parent_nh); 12 | 13 | double resolution; 14 | double length_x; 15 | double length_y; 16 | 17 | double max_occupancy; 18 | double min_occupancy; 19 | 20 | std::string frame_id; 21 | std::string costmap_topic; 22 | 23 | double occupied_threshold; 24 | 25 | struct 26 | { 27 | std::string map_topic; 28 | bool enabled; 29 | } debug; 30 | }; 31 | } // namespace map 32 | 33 | #endif // SRC_MAP_CONFIG_H 34 | -------------------------------------------------------------------------------- /igvc_perception/src/pointcloud_segmentation/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_executable(ground_filter ground_filter.cpp) 2 | add_dependencies(ground_filter ${catkin_EXPORTED_TARGETS}) 3 | target_link_libraries(ground_filter ${catkin_LIBRARIES}) 4 | 5 | add_executable(clustering clustering.cpp) 6 | add_dependencies(clustering ${catkin_EXPORTED_TARGETS}) 7 | target_link_libraries(clustering ${catkin_LIBRARIES}) 8 | 9 | install( 10 | TARGETS ground_filter clustering 11 | ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 12 | LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 13 | RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 14 | ) 15 | -------------------------------------------------------------------------------- /igvc_rviz_plugins/include/igvc_rviz_plugins_old/eStop_panel.h: -------------------------------------------------------------------------------- 1 | #ifndef ESTOP_PANEL_H 2 | #define ESTOP_PANEL_H 3 | 4 | #include 5 | #include 6 | #include 7 | 8 | #include 9 | 10 | class QLineEdit; 11 | 12 | namespace rviz_plugins 13 | { 14 | class EStopPanel : public rviz::Panel 15 | { 16 | Q_OBJECT 17 | public: 18 | EStopPanel(QWidget* parent = 0); 19 | 20 | private: 21 | void subCallback(const std_msgs::Bool& msg); 22 | 23 | protected: 24 | ros::Subscriber sub; 25 | ros::NodeHandle nh_; 26 | QLabel* output_topic_editor_; 27 | }; 28 | } // namespace rviz_plugins 29 | 30 | #endif // ESTOP_PANEL_H -------------------------------------------------------------------------------- /igvc_navigation/config/local_costmap_params.yaml: -------------------------------------------------------------------------------- 1 | local_costmap: 2 | global_frame: odom 3 | robot_base_frame: base_link 4 | plugins: 5 | - {name: rolling_layer, type: "rolling_layer::RollingLayer"} 6 | publish_frequency: 5.0 7 | footprint: [[-0.4318,0.3048],[0.4318,0.3048],[0.4318,-0.3048],[-0.4318,-0.3048]] 8 | width: 20 9 | height: 20 10 | origin_x: -10 11 | origin_y: -10 12 | update_frequency: 10 13 | track_unknown_space: false 14 | unknown_cost_value: 30 15 | static_map: false 16 | rolling_window: true 17 | resolution: 0.1 18 | rolling_layer: 19 | topic: "/move_base_flex/global_costmap/costmap" 20 | -------------------------------------------------------------------------------- /igvc_perception/src/slope_filter/slope_filter.h: -------------------------------------------------------------------------------- 1 | #ifndef SRC_SLOPE_FILTER_H 2 | #define SRC_SLOPE_FILTER_H 3 | 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | class TraversabilityFilter 10 | { 11 | public: 12 | TraversabilityFilter(); 13 | 14 | private: 15 | ros::NodeHandle private_nh_; 16 | ros::Subscriber elevation_map_sub_; 17 | ros::Publisher traversability_map_pub_; 18 | filters::FilterChain filter_chain_; 19 | 20 | void elevationMapCallback(const grid_map_msgs::GridMap& message); 21 | }; 22 | 23 | #endif // SRC_SLOPE_FILTER_H 24 | -------------------------------------------------------------------------------- /igvc_perception/include/pointcloud_filter/fast_segment_filter/fast_segment_filter_config.h: -------------------------------------------------------------------------------- 1 | #ifndef SRC_FAST_SEGMENT_FILTER_CONFIG_H 2 | #define SRC_FAST_SEGMENT_FILTER_CONFIG_H 3 | 4 | #include 5 | 6 | namespace pointcloud_filter 7 | { 8 | struct FastSegmentFilterConfig 9 | { 10 | int num_segments; 11 | double error_t; 12 | double slope_t; 13 | double dist_t; 14 | std::string ground_topic; 15 | std::string nonground_topic; 16 | bool debug_viz; 17 | 18 | FastSegmentFilterConfig() = default; 19 | FastSegmentFilterConfig(const ros::NodeHandle& nh); 20 | }; 21 | } // namespace pointcloud_filter 22 | 23 | #endif // SRC_FAST_SEGMENT_FILTER_CONFIG_H -------------------------------------------------------------------------------- /igvc_perception/launch/nn_viz.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /igvc_platform/src/tests/test/test_segmented_camera.test: -------------------------------------------------------------------------------- 1 | 2 | 3 | ["/cam/center", "/cam/left", "/cam/right"] 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /igvc_rviz_plugins/src/igvc_rviz_plugins_old/num_button.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include 4 | #include 5 | 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | 12 | #include 13 | #include 14 | 15 | #include 16 | 17 | namespace rviz_plugins 18 | { 19 | NumButton::NumButton(const QString &text, QWidget *parent, int n) : QPushButton(text, parent) 20 | { 21 | num = n; 22 | connect(this, SIGNAL(clicked()), this, SLOT(emitNum())); 23 | } 24 | 25 | void NumButton::emitNum() 26 | { 27 | Q_EMIT numClicked(num); 28 | } 29 | } // namespace rviz_plugins 30 | -------------------------------------------------------------------------------- /igvc_rviz_plugins/include/igvc_rviz_plugins_old/bat_panel.h: -------------------------------------------------------------------------------- 1 | #ifndef BAT_PANEL_H 2 | #define BAT_PANEL_H 3 | 4 | #include 5 | #include 6 | #include 7 | 8 | #include 9 | 10 | class QLineEdit; 11 | 12 | namespace rviz_plugins 13 | { 14 | class BatPanel : public rviz::Panel 15 | { 16 | Q_OBJECT 17 | public: 18 | BatPanel(QWidget* parent = 0); 19 | 20 | private: 21 | void batCallback(const std_msgs::UInt8& msg); 22 | 23 | public Q_SLOTS: 24 | 25 | protected Q_SLOTS: 26 | 27 | protected: 28 | ros::Subscriber sub; 29 | ros::NodeHandle nh_; 30 | QLabel* output_topic_editor_; 31 | }; 32 | } // namespace rviz_plugins 33 | 34 | #endif // BAT_PANEL_H -------------------------------------------------------------------------------- /igvc_navigation/src/mapper/traversability_layer_config.cpp: -------------------------------------------------------------------------------- 1 | #include "traversability_layer_config.h" 2 | #include 3 | #include 4 | 5 | namespace traversability_layer 6 | { 7 | TraversabilityLayerConfig::TraversabilityLayerConfig(const ros::NodeHandle &parent_nh) 8 | : nh(parent_nh, "traversability_layer"), map(nh) 9 | { 10 | double untraversable_probability; 11 | assertions::getParam(nh, "untraversable_probability", untraversable_probability); 12 | assertions::getParam(nh, "slope_threshold", slope_threshold); 13 | 14 | logodd_increment = probability_utils::toLogOdds(untraversable_probability); 15 | } 16 | } // namespace traversability_layer 17 | -------------------------------------------------------------------------------- /igvc_platform/config/analyzers.yaml: -------------------------------------------------------------------------------- 1 | analyzers: 2 | imu: 3 | type: diagnostic_aggregator/GenericAnalyzer 4 | path: IMU 5 | startswith: 'imu' 6 | num_items: 2 7 | motors: 8 | type: diagnostic_aggregator/GenericAnalyzer 9 | path: Motors 10 | contains: 'MC' 11 | num_items: 1 12 | battery: 13 | type: diagnostic_aggregator/GenericAnalyzer 14 | path: Battery 15 | contains: 'Battery' 16 | num_items: 1 17 | controls: 18 | type: diagnostic_aggregator/GenericAnalyzer 19 | path: Joystick 20 | contains: 'Joystick' 21 | num_items: 1 22 | lidar: 23 | type: diagnostic_aggregator/GenericAnalyzer 24 | path: Lidar 25 | contains: 'lidar' 26 | num_items: 1 -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "external/rj-ros-common"] 2 | path = external/rj-ros-common 3 | url = https://github.com/RoboJackets/rj-ros-common 4 | [submodule "external/kindr_ros"] 5 | path = external/kindr_ros 6 | url = https://github.com/ANYbotics/kindr_ros 7 | [submodule "external/serial"] 8 | path = external/serial 9 | url = https://github.com/wjwwood/serial.git 10 | [submodule "external/gazebo_ros_control_select_joints"] 11 | path = external/gazebo_ros_control_select_joints 12 | url = https://github.com/tu-darmstadt-ros-pkg/gazebo_ros_control_select_joints.git 13 | [submodule "external/elevation_mapping"] 14 | path = external/elevation_mapping 15 | url = https://github.com/RoboJackets/elevation_mapping.git 16 | 17 | -------------------------------------------------------------------------------- /igvc_perception/include/pointcloud_filter/back_filter/back_filter.h: -------------------------------------------------------------------------------- 1 | #ifndef SRC_BACK_FILTER_H 2 | #define SRC_BACK_FILTER_H 3 | 4 | #include 5 | #include "pointcloud_filter/point_types.h" 6 | 7 | #include 8 | #include 9 | 10 | namespace pointcloud_filter 11 | { 12 | class BackFilter : Filter 13 | { 14 | public: 15 | using PointCloud = pcl::PointCloud; 16 | 17 | explicit BackFilter(const ros::NodeHandle& nh); 18 | 19 | void filter(Bundle& bundle) override; 20 | 21 | private: 22 | BackFilterConfig config_{}; 23 | }; 24 | } // namespace pointcloud_filter 25 | 26 | #endif // SRC_BACK_FILTER_H 27 | -------------------------------------------------------------------------------- /igvc_platform/launch/imu_bottom.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | [1, 0, 0, 10 | 0, -1, 0, 11 | 0, 0, -1] 12 | 13 | 14 | -------------------------------------------------------------------------------- /igvc_rviz_plugins/include/igvc_rviz_plugins_old/num_button.h: -------------------------------------------------------------------------------- 1 | #ifndef NUM_BUTTON_H 2 | #define NUM_BUTTON_H 3 | 4 | #include 5 | #include 6 | #include 7 | 8 | #include 9 | 10 | #include 11 | 12 | #include 13 | #include 14 | #include 15 | 16 | namespace rviz_plugins 17 | { 18 | class NumButton : public QPushButton 19 | { 20 | Q_OBJECT 21 | public: 22 | NumButton(const QString &text, QWidget *parent = 0, int n = 0); 23 | 24 | public Q_SLOTS: 25 | void emitNum(); 26 | 27 | Q_SIGNALS: 28 | void numClicked(int num); 29 | 30 | private: 31 | int num; 32 | }; 33 | } // namespace rviz_plugins 34 | 35 | #endif // NUM_BUTTON_H -------------------------------------------------------------------------------- /igvc_utils/src/pid_tester/encrecord.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | 7 | bool enabled = false; 8 | 9 | std::ofstream file; 10 | 11 | void encoder_callback(const igvc_msgs::velocity_pairConstPtr& msg) 12 | { 13 | file << msg->left_velocity << ", " << msg->right_velocity << std::endl; 14 | } 15 | 16 | int main(int argc, char** argv) 17 | { 18 | ros::init(argc, argv, "encrecord"); 19 | 20 | ros::NodeHandle nh; 21 | 22 | ros::Subscriber encoder_sub = nh.subscribe("/encoders", 10, encoder_callback); 23 | 24 | file.open("/home/robojackets/Desktop/data.csv"); 25 | 26 | ros::spin(); 27 | 28 | return 0; 29 | } 30 | -------------------------------------------------------------------------------- /igvc_perception/launch/elevation_map_visualization.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /igvc_sandbox/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | igvc_sandbox 4 | 0.0.0 5 | The RoboJackets' IGVC code base 6 | 7 | Matthew Hannay 8 | 9 | MIT 10 | 11 | Matthew Barulic 12 | Al Chaussee 13 | 14 | http://www.robojackets.org 15 | http://www.github.com/robojackets/igvc-software 16 | http://robojackets.github.io/igvc-software 17 | http://www.noruts.com 18 | 19 | 20 | -------------------------------------------------------------------------------- /igvc_perception/include/pointcloud_filter/ground_filter/ground_filter.h: -------------------------------------------------------------------------------- 1 | #ifndef SRC_GROUND_FILTER_H 2 | #define SRC_GROUND_FILTER_H 3 | 4 | #include 5 | #include "pointcloud_filter/point_types.h" 6 | 7 | #include 8 | #include 9 | 10 | namespace pointcloud_filter 11 | { 12 | class GroundFilter : Filter 13 | { 14 | public: 15 | using PointCloud = pcl::PointCloud; 16 | 17 | explicit GroundFilter(const ros::NodeHandle& nh); 18 | 19 | void filter(Bundle& bundle) override; 20 | 21 | private: 22 | GroundFilterConfig config_{}; 23 | }; 24 | } // namespace pointcloud_filter 25 | 26 | #endif // SRC_GROUND_FILTER_H 27 | -------------------------------------------------------------------------------- /igvc_perception/include/pointcloud_filter/radius_filter/radius_filter.h: -------------------------------------------------------------------------------- 1 | #ifndef SRC_RADIUS_FILTER_H 2 | #define SRC_RADIUS_FILTER_H 3 | 4 | #include 5 | #include "pointcloud_filter/point_types.h" 6 | 7 | #include 8 | #include 9 | 10 | namespace pointcloud_filter 11 | { 12 | class RadiusFilter : Filter 13 | { 14 | public: 15 | using PointCloud = pcl::PointCloud; 16 | 17 | explicit RadiusFilter(const ros::NodeHandle& nh); 18 | 19 | void filter(Bundle& bundle) override; 20 | 21 | private: 22 | RadiusFilterConfig config_{}; 23 | }; 24 | } // namespace pointcloud_filter 25 | 26 | #endif // SRC_RADIUS_FILTER_H 27 | -------------------------------------------------------------------------------- /igvc_description/launch/simulationTesting.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /igvc_perception/src/pointcloud_filter/raycast_filter/raycast_filter_config.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | namespace pointcloud_filter 5 | { 6 | RaycastFilterConfig::RaycastFilterConfig(const ros::NodeHandle &nh) 7 | { 8 | ros::NodeHandle child_nh{ nh, "raycast_filter" }; 9 | 10 | assertions::getParam(child_nh, "end_distance", end_distance); 11 | assertions::getParam(child_nh, "angular_resolution", angular_resolution); 12 | assertions::getParam(child_nh, "min_range", min_range); 13 | assertions::getParam(child_nh, "start_angle", start_angle); 14 | assertions::getParam(child_nh, "end_angle", end_angle); 15 | } 16 | } // namespace pointcloud_filter 17 | -------------------------------------------------------------------------------- /igvc_rviz_plugins/include/igvc_rviz_plugins_old/time_panel.h: -------------------------------------------------------------------------------- 1 | #ifndef TIME_PANEL_H 2 | #define TIME_PANEL_H 3 | 4 | #include 5 | #include 6 | #include 7 | 8 | #include 9 | 10 | #include 11 | 12 | class QLineEdit; 13 | 14 | namespace rviz_plugins 15 | { 16 | class TimePanel : public rviz::Panel 17 | { 18 | Q_OBJECT 19 | public: 20 | TimePanel(QWidget* parent = 0); 21 | 22 | private: 23 | void timeCallback(const std_msgs::UInt8& msg); 24 | 25 | public Q_SLOTS: 26 | 27 | protected Q_SLOTS: 28 | 29 | protected: 30 | ros::Subscriber sub; 31 | ros::NodeHandle nh_; 32 | QLabel* output_topic_editor_; 33 | time_t start; 34 | }; 35 | } // namespace rviz_plugins 36 | 37 | #endif // TIME_PANEL_H -------------------------------------------------------------------------------- /igvc_sandbox/camera_config/cam_right.yaml: -------------------------------------------------------------------------------- 1 | image_width: 640 2 | image_height: 480 3 | camera_name: cam/right 4 | camera_matrix: 5 | rows: 3 6 | cols: 3 7 | data: [423.902449, 0.000000, 297.916553, 0.000000, 425.785847, 235.045360, 0.000000, 0.000000, 1.000000] 8 | distortion_model: plumb_bob 9 | distortion_coefficients: 10 | rows: 1 11 | cols: 5 12 | data: [0.050813, -0.061465, -0.002275, -0.004615, 0.000000] 13 | rectification_matrix: 14 | rows: 3 15 | cols: 3 16 | data: [1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000] 17 | projection_matrix: 18 | rows: 3 19 | cols: 4 20 | data: [426.252197, 0.000000, 293.505196, 0.000000, 0.000000, 430.785797, 233.414442, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000] -------------------------------------------------------------------------------- /igvc_platform/launch/imu_top.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /igvc_sandbox/camera_config/cam_center.yaml: -------------------------------------------------------------------------------- 1 | image_width: 640 2 | image_height: 480 3 | camera_name: cam/center 4 | camera_matrix: 5 | rows: 3 6 | cols: 3 7 | data: [415.595987, 0.000000, 305.457652, 0.000000, 417.251830, 270.509128, 0.000000, 0.000000, 1.000000] 8 | distortion_model: plumb_bob 9 | distortion_coefficients: 10 | rows: 1 11 | cols: 5 12 | data: [0.067308, -0.080053, 0.001156, -0.000402, 0.000000] 13 | rectification_matrix: 14 | rows: 3 15 | cols: 3 16 | data: [1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000] 17 | projection_matrix: 18 | rows: 3 19 | cols: 4 20 | data: [419.812958, 0.000000, 304.229632, 0.000000, 0.000000, 422.129974, 270.428650, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000] -------------------------------------------------------------------------------- /igvc_sandbox/camera_config/cam_left.yaml: -------------------------------------------------------------------------------- 1 | image_width: 640 2 | image_height: 480 3 | camera_name: cam/left 4 | camera_matrix: 5 | rows: 3 6 | cols: 3 7 | data: [415.888456, 0.000000, 318.252082, 0.000000, 418.622854, 221.441228, 0.000000, 0.000000, 1.000000] 8 | distortion_model: plumb_bob 9 | distortion_coefficients: 10 | rows: 1 11 | cols: 5 12 | data: [0.034195, -0.054771, -0.004846, 0.001868, 0.000000] 13 | rectification_matrix: 14 | rows: 3 15 | cols: 3 16 | data: [1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000] 17 | projection_matrix: 18 | rows: 3 19 | cols: 4 20 | data: [415.971832, 0.000000, 319.120149, 0.000000, 0.000000, 419.740875, 218.731267, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000] 21 | -------------------------------------------------------------------------------- /igvc_sandbox/camera_config/usb_cam_right.yaml: -------------------------------------------------------------------------------- 1 | image_width: 640 2 | image_height: 480 3 | camera_name: usb_cam_right 4 | camera_matrix: 5 | rows: 3 6 | cols: 3 7 | data: [867.627466, 0.000000, 350.640209, 0.000000, 871.110736, 296.426138, 0.000000, 0.000000, 1.000000] 8 | distortion_model: plumb_bob 9 | distortion_coefficients: 10 | rows: 1 11 | cols: 5 12 | data: [0.159272, 0.042198, 0.030013, 0.013242, 0.000000] 13 | rectification_matrix: 14 | rows: 3 15 | cols: 3 16 | data: [1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000] 17 | projection_matrix: 18 | rows: 3 19 | cols: 4 20 | data: [898.501953, 0.000000, 353.421972, 0.000000, 0.000000, 893.167542, 302.218675, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000] -------------------------------------------------------------------------------- /igvc_sandbox/camera_config/usb_cam_center.yaml: -------------------------------------------------------------------------------- 1 | image_width: 640 2 | image_height: 480 3 | camera_name: usb_cam_center 4 | camera_matrix: 5 | rows: 3 6 | cols: 3 7 | data: [632.669618, 0.000000, 309.950711, 0.000000, 636.320948, 248.322083, 0.000000, 0.000000, 1.000000] 8 | distortion_model: plumb_bob 9 | distortion_coefficients: 10 | rows: 1 11 | cols: 5 12 | data: [0.166100, -0.220931, 0.020491, -0.002593, 0.000000] 13 | rectification_matrix: 14 | rows: 3 15 | cols: 3 16 | data: [1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000] 17 | projection_matrix: 18 | rows: 3 19 | cols: 4 20 | data: [659.954407, 0.000000, 308.186637, 0.000000, 0.000000, 655.057495, 255.545524, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000] -------------------------------------------------------------------------------- /igvc_sandbox/camera_config/usb_cam_left.yaml: -------------------------------------------------------------------------------- 1 | image_width: 640 2 | image_height: 480 3 | camera_name: usb_cam_left 4 | camera_matrix: 5 | rows: 3 6 | cols: 3 7 | data: [833.532112, 0.000000, 352.183485, 0.000000, 837.763183, 264.724999, 0.000000, 0.000000, 1.000000] 8 | distortion_model: plumb_bob 9 | distortion_coefficients: 10 | rows: 1 11 | cols: 5 12 | data: [0.072489, 0.109291, 0.014877, 0.003510, 0.000000] 13 | rectification_matrix: 14 | rows: 3 15 | cols: 3 16 | data: [1.000000, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000, 0.000000, 0.000000, 1.000000] 17 | projection_matrix: 18 | rows: 3 19 | cols: 4 20 | data: [854.000916, 0.000000, 352.016025, 0.000000, 0.000000, 852.680115, 268.505775, 0.000000, 0.000000, 0.000000, 1.000000, 0.000000] 21 | -------------------------------------------------------------------------------- /igvc_perception/include/pointcloud_filter/pointcloud_filter_config.h: -------------------------------------------------------------------------------- 1 | #ifndef SRC_POINTCLOUD_FILTER_CONFIG_H 2 | #define SRC_POINTCLOUD_FILTER_CONFIG_H 3 | 4 | #include 5 | #include 6 | 7 | namespace pointcloud_filter 8 | { 9 | struct PointcloudFilterConfig 10 | { 11 | PointcloudFilterConfig() = default; 12 | explicit PointcloudFilterConfig(const ros::NodeHandle& nh); 13 | 14 | std::string topic_input; 15 | std::string topic_transformed; 16 | std::string topic_occupied; 17 | std::string topic_free; 18 | std::string topic_filtered; 19 | 20 | std::string base_frame; 21 | 22 | double timeout_duration; 23 | }; 24 | } // namespace pointcloud_filter 25 | 26 | #endif // SRC_POINTCLOUD_FILTER_CONFIG_H 27 | -------------------------------------------------------------------------------- /igvc_perception/launch/elevation_mapping.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /igvc_navigation/src/mapper/projection_config.cpp: -------------------------------------------------------------------------------- 1 | #include "projection_config.h" 2 | #include 3 | 4 | namespace line_layer 5 | { 6 | ProjectionConfig::ProjectionConfig(const ros::NodeHandle &parent_nh, double resolution) 7 | { 8 | ros::NodeHandle nh{ parent_nh, "projection" }; 9 | 10 | assertions::getParam(nh, "length_x", length_x); 11 | assertions::getParam(nh, "length_y", length_y); 12 | 13 | assertions::getParam(nh, "line_closing_kernel_size", line_closing_kernel_size); 14 | assertions::getParam(nh, "freespace_closing_kernel_size", freespace_closing_kernel_size); 15 | 16 | size_x = static_cast(std::round(length_x / resolution)); 17 | size_y = static_cast(std::round(length_y / resolution)); 18 | } 19 | } // namespace line_layer 20 | -------------------------------------------------------------------------------- /igvc_utils/include/igvc_utils/robot_control.h: -------------------------------------------------------------------------------- 1 | #ifndef ROBOTCONTROL_H 2 | #define ROBOTCONTROL_H 3 | 4 | #include 5 | 6 | struct CurvatureVelocity 7 | { 8 | double curvature; 9 | double velocity; 10 | }; 11 | 12 | class RobotControl 13 | { 14 | public: 15 | double left_{}; 16 | double right_{}; 17 | 18 | friend std::ostream &operator<<(std::ostream &out, const RobotControl &robot_control); 19 | 20 | igvc_msgs::velocity_pair toMessage(ros::Time stamp) const; 21 | CurvatureVelocity toKV(double axle_length) const; 22 | 23 | double linearVelocity() const; 24 | double angularVelocity(double axle_length) const; 25 | 26 | static RobotControl fromKV(double curvature, double velocity, double axle_length); 27 | }; 28 | 29 | #endif // ROBOTCONTROL_H 30 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ros:noetic 2 | LABEL maintainer="matthew.scott.hannay@gmail.com" 3 | 4 | # Setup apt to be happy with no console input 5 | ARG DEBIAN_FRONTEND=noninteractive 6 | 7 | # setup apt tools and other goodies we want 8 | RUN apt-get update --fix-missing && apt-get -y install \ 9 | apt-utils \ 10 | git \ 11 | software-properties-common \ 12 | ssh \ 13 | python3-pip \ 14 | libeigen3-dev \ 15 | && apt-get clean 16 | 17 | # Initialize catkin workspace 18 | RUN mkdir -p /catkin_ws 19 | WORKDIR /catkin_ws 20 | RUN mkdir -p src 21 | 22 | COPY . /catkin_ws/src/igvc-software 23 | 24 | # Install all ROS dependencies that can automatically be installed 25 | WORKDIR /catkin_ws/src/igvc-software 26 | RUN /bin/bash -c /catkin_ws/src/igvc-software/install_dependencies.sh 27 | -------------------------------------------------------------------------------- /igvc_platform/launch/seg_cam.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | ["/cam/center", "/cam/left", "/cam/right"] 4 | ["", "", ""] 5 | ["/raw/camera_info", "/raw/camera_info", "/raw/camera_info"] 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /igvc_perception/include/pointcloud_filter/raycast_filter/raycast_filter.h: -------------------------------------------------------------------------------- 1 | #ifndef SRC_RAYCAST_FILTER_H 2 | #define SRC_RAYCAST_FILTER_H 3 | 4 | #include 5 | #include "pointcloud_filter/point_types.h" 6 | 7 | #include 8 | #include 9 | 10 | namespace pointcloud_filter 11 | { 12 | class RaycastFilter : Filter 13 | { 14 | public: 15 | using PointCloud = pcl::PointCloud; 16 | 17 | explicit RaycastFilter(const ros::NodeHandle& nh); 18 | 19 | void filter(Bundle& bundle) override; 20 | 21 | private: 22 | RaycastFilterConfig config_; 23 | 24 | int discretize(double angle) const; 25 | }; 26 | } // namespace pointcloud_filter 27 | 28 | #endif // SRC_RAYCAST_FILTER_H 29 | -------------------------------------------------------------------------------- /igvc_perception/src/pointcloud_filter/pointcloud_filter_config.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | namespace pointcloud_filter 5 | { 6 | PointcloudFilterConfig::PointcloudFilterConfig(const ros::NodeHandle &nh) 7 | { 8 | assertions::getParam(nh, "topic/input", topic_input); 9 | assertions::getParam(nh, "topic/transformed", topic_transformed); 10 | assertions::getParam(nh, "topic/occupied", topic_occupied); 11 | assertions::getParam(nh, "topic/free", topic_free); 12 | assertions::getParam(nh, "topic/filtered", topic_filtered); 13 | 14 | assertions::getParam(nh, "frames/base_footprint", base_frame); 15 | 16 | assertions::getParam(nh, "timeout_duration", timeout_duration); 17 | } 18 | } // namespace pointcloud_filter 19 | -------------------------------------------------------------------------------- /igvc_rviz_plugins/src/igvc_rviz_plugins_old/my_thread.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | 15 | using namespace std; 16 | 17 | void MyThread::run() 18 | { 19 | proc = new QProcess(); 20 | std::string strCmd(cmd); 21 | std::string test = ("gnome-terminal -x bash -c \"" + strCmd + "\""); 22 | const char* cstrCmd = test.c_str(); 23 | proc->start(cstrCmd); 24 | proc->waitForStarted(); 25 | } 26 | 27 | void MyThread::setCmd(const char* command) 28 | { 29 | std::strcpy(cmd, command); 30 | } 31 | 32 | void MyThread::close() 33 | { 34 | proc->close(); 35 | } 36 | -------------------------------------------------------------------------------- /igvc_utils/src/pid_tester/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_executable(pidtester main.cpp) 2 | add_dependencies(pidtester ${catkin_EXPORTED_TARGETS}) 3 | target_link_libraries(pidtester ${catkin_LIBRARIES}) 4 | 5 | add_executable(encrecord encrecord.cpp) 6 | add_dependencies(encrecord ${catkin_EXPORTED_TARGETS}) 7 | target_link_libraries(encrecord ${catkin_LIBRARIES}) 8 | 9 | 10 | install( 11 | TARGETS pidtester 12 | ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 13 | LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 14 | RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 15 | ) 16 | 17 | install( 18 | TARGETS encrecord 19 | ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 20 | LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 21 | RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 22 | ) 23 | -------------------------------------------------------------------------------- /igvc_navigation/src/tests/test/test_mapper.test: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /igvc_platform/src/segmented_camera/segmented_camera_info_publisher.h: -------------------------------------------------------------------------------- 1 | #ifndef SEGMENTED_CAMERA_H 2 | #define SEGMENTED_CAMERA_H 3 | 4 | #include 5 | #include 6 | #include 7 | 8 | class SegmentedCameraInfoPublisher 9 | { 10 | public: 11 | SegmentedCameraInfoPublisher(); 12 | 13 | private: 14 | ros::NodeHandle nh; 15 | ros::NodeHandle pNh; 16 | // Output size for the transform 17 | double output_width; 18 | double output_height; 19 | // map of camera info publishers 20 | std::map g_pubs; 21 | std::vector subs; 22 | void ScaleCameraInfo(const sensor_msgs::CameraInfoConstPtr& camera_info, double width, double height, 23 | std::string camera_name); 24 | }; 25 | 26 | #endif // SEGMENTED_CAMERA_H -------------------------------------------------------------------------------- /igvc_perception/launch/ptseg.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /igvc_perception/src/elevation_map_height_node/elevation_map_height_node.h: -------------------------------------------------------------------------------- 1 | #ifndef SRC_ELEVATIONMAPHEIGHTNODE_H 2 | #define SRC_ELEVATIONMAPHEIGHTNODE_H 3 | 4 | #include 5 | #include 6 | #include 7 | #include 8 | 9 | class ElevationMapHeightNode 10 | { 11 | public: 12 | ElevationMapHeightNode(); 13 | 14 | private: 15 | ros::NodeHandle private_nh_; 16 | ros::Publisher robot_pose_estimate_pub_; 17 | ros::Subscriber elevation_map_sub_; 18 | ros::Subscriber robot_pose_sub_; 19 | 20 | geometry_msgs::PoseWithCovarianceStamped robot_pose_; 21 | 22 | void elevationMapCallback(const grid_map_msgs::GridMap& elevation_map); 23 | void robotPoseCallback(const nav_msgs::Odometry& robot_pose); 24 | }; 25 | 26 | #endif // SRC_ELEVATIONMAPHEIGHTNODE_H 27 | -------------------------------------------------------------------------------- /igvc_perception/include/pointcloud_filter/tf_transform_filter/tf_transform_filter.h: -------------------------------------------------------------------------------- 1 | 2 | #ifndef SRC_TF_TRANSFORM_FILTER_H 3 | #define SRC_TF_TRANSFORM_FILTER_H 4 | 5 | #include 6 | #include 7 | #include "pointcloud_filter/point_types.h" 8 | 9 | #include 10 | #include 11 | 12 | namespace pointcloud_filter 13 | { 14 | class TFTransformFilter 15 | { 16 | public: 17 | using PointCloud = pcl::PointCloud; 18 | 19 | explicit TFTransformFilter(tf2_ros::Buffer* buffer_); 20 | 21 | void transform(const PointCloud& from, PointCloud& to, const std::string& target_frame, const ros::Duration& timeout); 22 | 23 | private: 24 | tf2_ros::Buffer* buffer_; 25 | }; 26 | } // namespace pointcloud_filter 27 | 28 | #endif // SRC_TF_TRANSFORM_FILTER_H 29 | -------------------------------------------------------------------------------- /igvc_perception/src/train_eval/train_test_generation.py: -------------------------------------------------------------------------------- 1 | import glob, os 2 | 3 | 4 | dataset_path = '/path/to/Dataset/images' 5 | 6 | # Percentage of images to be used for the test set 7 | percentage_test = 10; 8 | 9 | # Create and/or truncate train.txt and test.txt 10 | file_train = open('train.txt', 'w') 11 | file_test = open('test.txt', 'w') 12 | 13 | # Populate train.txt and test.txt 14 | counter = 1 15 | index_test = round(100 / percentage_test) 16 | for pathAndFilename in glob.iglob(os.path.join(dataset_path, "*.jpg")): 17 | title, ext = os.path.splitext(os.path.basename(pathAndFilename)) 18 | 19 | if counter == index_test+1: 20 | counter = 1 21 | file_test.write(dataset_path + "/" + title + '.jpg' + "\n") 22 | else: 23 | file_train.write(dataset_path + "/" + title + '.jpg' + "\n") 24 | counter = counter + 1 25 | -------------------------------------------------------------------------------- /igvc_rviz_plugins/include/igvc_rviz_plugins_old/launch_panel.h: -------------------------------------------------------------------------------- 1 | #ifndef LAUNCH_PANEL_H 2 | #define LAUNCH_PANEL_H 3 | 4 | #include 5 | #include 6 | #include 7 | 8 | #include 9 | 10 | #include 11 | 12 | #include "my_thread.h" 13 | 14 | #include 15 | #include 16 | 17 | namespace rviz_plugins 18 | { 19 | class LaunchPanel : public rviz::Panel 20 | { 21 | Q_OBJECT 22 | public: 23 | LaunchPanel(QWidget* parent = 0); 24 | 25 | private Q_SLOTS: 26 | void handleButton(); 27 | 28 | public Q_SLOTS: 29 | 30 | protected Q_SLOTS: 31 | 32 | protected: 33 | ros::Subscriber sub; 34 | ros::NodeHandle nh_; 35 | QComboBox* output_topic_editor_; 36 | time_t start; 37 | bool doOnce; 38 | QPushButton* m_button; 39 | }; 40 | } // namespace rviz_plugins 41 | 42 | #endif // LAUNCH_PANEL_H -------------------------------------------------------------------------------- /igvc_navigation/src/back_circle/back_circle_server.h: -------------------------------------------------------------------------------- 1 | #ifndef SRC_BACK_CIRCLE_H 2 | #define SRC_BACK_CIRCLE_H 3 | 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | #include 14 | 15 | class BackCircleServer 16 | { 17 | public: 18 | BackCircleServer(); 19 | ros::NodeHandle nh_; 20 | 21 | private: 22 | void waitForTransform(); 23 | bool backCircleCallback(igvc_msgs::BackCircle::Request &req, igvc_msgs::BackCircle::Response &res); 24 | ros::ServiceServer back_circle_service_server_; 25 | tf::TransformListener tf_listener_; 26 | }; 27 | 28 | #endif // SRC_BACK_CIRCLE_H 29 | -------------------------------------------------------------------------------- /igvc_perception/config/elevation_mapping.yaml: -------------------------------------------------------------------------------- 1 | # ROBOT PARAMETERS 2 | point_cloud_topic: "/lidar/filtered" 3 | map_frame_id: "odom" 4 | robot_base_frame_id: "base_footprint" 5 | robot_pose_with_covariance_topic: "/odometry/pose_with_cov_stamped" 6 | robot_pose_cache_size: 200 7 | track_point_frame_id: "elevation_mapping_center" 8 | track_point_x: 0.0 9 | track_point_y: 0.0 10 | track_point_z: 0.0 11 | 12 | # MAP PARAMETERS 13 | length_in_x: 6.0 14 | length_in_y: 6.0 15 | position_x: 0.0 16 | position_y: 0.0 17 | resolution: 0.04 18 | min_variance: 0.000009 19 | max_variance: 0.01 20 | mahalanobis_distance_threshold: 2.5 21 | multi_height_noise: 0.0000009 22 | fused_map_publishing_rate: 0 23 | enable_visibility_cleanup: false 24 | 25 | # SENSOR PARAMETERS 26 | sensor_processor/type: laser 27 | sensor_processor/min_radius: 0.018 28 | sensor_processor/beam_angle: 0.0006 29 | sensor_processor/beam_constant: 0.0015 30 | -------------------------------------------------------------------------------- /igvc_perception/src/pointcloud_filter/back_filter/back_filter.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | namespace pointcloud_filter 4 | { 5 | BackFilter::BackFilter(const ros::NodeHandle& nh) : config_{ nh } 6 | { 7 | } 8 | 9 | void BackFilter::filter(Bundle& bundle) 10 | { 11 | const auto& start_angle = config_.start_angle; 12 | const auto& end_angle = config_.end_angle; 13 | 14 | PointCloud filtered_pc; 15 | filtered_pc.points.reserve(bundle.pointcloud->points.size()); 16 | 17 | for (const auto& point : *bundle.pointcloud) 18 | { 19 | double angle = atan2(point.y, point.x); 20 | bool within_angle = end_angle >= angle && angle >= start_angle; 21 | if (within_angle) 22 | { 23 | filtered_pc.points.emplace_back(point); 24 | } 25 | } 26 | bundle.pointcloud->points = std::move(filtered_pc.points); 27 | } 28 | } // namespace pointcloud_filter 29 | -------------------------------------------------------------------------------- /igvc_perception/src/pointcloud_filter/fast_segment_filter/fast_segment_filter_config.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | namespace pointcloud_filter 6 | { 7 | FastSegmentFilterConfig::FastSegmentFilterConfig(const ros::NodeHandle& nh) 8 | { 9 | ros::NodeHandle child_nh{ nh, "fast_segment_filter" }; 10 | 11 | assertions::getParam(child_nh, "ground_topic", ground_topic); 12 | assertions::getParam(child_nh, "nonground_topic", nonground_topic); 13 | assertions::getParam(child_nh, "num_segments", num_segments); 14 | assertions::getParam(child_nh, "error_t", error_t); 15 | assertions::getParam(child_nh, "slope_t", slope_t); 16 | assertions::getParam(child_nh, "dist_t", dist_t); 17 | assertions::getParam(child_nh, "debug_viz", debug_viz); 18 | } 19 | } // namespace pointcloud_filter -------------------------------------------------------------------------------- /igvc_rviz_plugins/include/igvc_rviz_plugins_old/waypoint_panel.h: -------------------------------------------------------------------------------- 1 | #ifndef PROJECT_WAYPOINTPANEL_H 2 | #define PROJECT_WAYPOINTPANEL_H 3 | 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | 10 | namespace igvc_rviz_plugins 11 | { 12 | class WaypointPanel : public rviz::Panel 13 | { 14 | Q_OBJECT 15 | public: 16 | double way_x; 17 | double way_y; 18 | double robot_x; 19 | double robot_y; 20 | 21 | WaypointPanel(QWidget *parent = 0); 22 | 23 | protected: 24 | ros::Subscriber waypoint_subscriber; 25 | ros::Subscriber robot_position_subscriber; 26 | 27 | void waypoint_callback(const geometry_msgs::PointStampedConstPtr &msg, QLabel *label); 28 | void robot_position_callback(const nav_msgs::OdometryConstPtr &msg, QLabel *label); 29 | }; 30 | } // namespace igvc_rviz_plugins 31 | 32 | #endif 33 | -------------------------------------------------------------------------------- /igvc_perception/src/nn_viz/nn_viz.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | import rospy 4 | from visualizer import Visualizer 5 | 6 | if __name__ == '__main__': 7 | rospy.init_node('nn_viz') 8 | 9 | # Read ros params. 10 | input_topic = rospy.get_param('input_topic') 11 | output_topic = rospy.get_param('output_topic') 12 | image_resize_width = rospy.get_param('image_resize_width') 13 | image_resize_height = rospy.get_param('image_resize_height') 14 | model_path = rospy.get_param('model_path') 15 | force_cpu = rospy.get_param('force_cpu') 16 | 17 | rospy.loginfo("[nn_viz] Testing the model %s", model_path) 18 | 19 | Visualizer(input_topic, output_topic, image_resize_width, image_resize_height, model_path, force_cpu) 20 | rospy.loginfo("[nn_viz] NN visualizer up!") 21 | 22 | try: 23 | rospy.spin() 24 | except KeyboardInterrupt: 25 | rospy.logerr("Shutting down") 26 | -------------------------------------------------------------------------------- /igvc_perception/src/pointcloud_filter/radius_filter/radius_filter.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | namespace pointcloud_filter 4 | { 5 | RadiusFilter::RadiusFilter(const ros::NodeHandle& nh) : config_{ nh } 6 | { 7 | } 8 | 9 | void RadiusFilter::filter(pointcloud_filter::Bundle& bundle) 10 | { 11 | const auto& radius_squared = config_.radius_squared; 12 | 13 | PointCloud filtered_pc; 14 | filtered_pc.points.reserve(bundle.pointcloud->points.size()); 15 | 16 | for (const auto& point : *bundle.pointcloud) 17 | { 18 | double point_radius_squared = point.x * point.x + point.y * point.y; 19 | bool within_radius = point_radius_squared <= radius_squared; 20 | if (within_radius) 21 | { 22 | filtered_pc.points.emplace_back(point); 23 | } 24 | } 25 | bundle.pointcloud->points = std::move(filtered_pc.points); 26 | } 27 | } // namespace pointcloud_filter 28 | -------------------------------------------------------------------------------- /igvc_rviz_plugins/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | igvc_rviz_plugins 4 | 0.0.0 5 | Rviz plugins for IGVC 6 | 7 | Matthew Barulic 8 | Al Chaussee 9 | 10 | MIT 11 | 12 | http://www.robojackets.org 13 | http://www.github.com/robojackets/igvc-software 14 | http://robojackets.github.io/igvc-software 15 | http://www.noruts.com 16 | 17 | catkin 18 | roscpp 19 | rviz 20 | igvc_msgs 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /igvc_navigation/src/mapper/camera_config.h: -------------------------------------------------------------------------------- 1 | #ifndef SRC_CAMERA_CONFIG_H 2 | #define SRC_CAMERA_CONFIG_H 3 | 4 | #include 5 | #include 6 | 7 | namespace line_layer 8 | { 9 | class CameraConfig 10 | { 11 | public: 12 | CameraConfig(const ros::NodeHandle& parent_nh, const std::string& base_topic); 13 | 14 | std::string base_topic; 15 | 16 | double miss_exponential_coeff; 17 | double miss_angle_exponential_coeff; 18 | double miss; 19 | double hit_exponential_coeff; 20 | double hit; 21 | double max_squared_distance; 22 | 23 | struct 24 | { 25 | std::string raw_image_ns; 26 | std::string raw_image; 27 | std::string segmented_image_ns; 28 | std::string segmented_image; 29 | } topics; 30 | 31 | struct 32 | { 33 | std::string line_topic; 34 | std::string nonline_topic; 35 | } debug; 36 | }; 37 | } // namespace line_layer 38 | 39 | #endif // SRC_CAMERA_CONFIG_H 40 | -------------------------------------------------------------------------------- /igvc_perception/src/multiclass_segmentation/train_utils/get_args.py: -------------------------------------------------------------------------------- 1 | import argparse 2 | 3 | 4 | def get_args(): 5 | # Training settings. 6 | ap = argparse.ArgumentParser(description="IGVC multi-class segmentation.") 7 | ap.add_argument( 8 | "-train_images", 9 | "--train_images", 10 | required=True, 11 | help="path to train images .npy file", 12 | ) 13 | ap.add_argument( 14 | "-train_masks", 15 | "--train_masks", 16 | required=True, 17 | help="path to train masks .npy file", 18 | ) 19 | ap.add_argument( 20 | "-test_images", 21 | "--test_images", 22 | required=True, 23 | help="path to test images .npy file", 24 | ) 25 | ap.add_argument( 26 | "-test_masks", 27 | "--test_masks", 28 | required=True, 29 | help="path to test mask .npy file", 30 | ) 31 | return ap.parse_args() 32 | -------------------------------------------------------------------------------- /igvc_perception/src/robot_pose_type_converter/robot_pose_type_converter.cpp: -------------------------------------------------------------------------------- 1 | #include "robot_pose_type_converter.h" 2 | 3 | RobotPoseTypeConveter::RobotPoseTypeConveter() 4 | { 5 | private_nh_ = ros::NodeHandle("~"); 6 | pose_publisher_ = 7 | private_nh_.advertise("/odometry/pose_with_cov_stamped", 1); 8 | pose_subscriber_ = private_nh_.subscribe("/odometry/filtered", 1, &RobotPoseTypeConveter::poseCallback, this); 9 | } 10 | 11 | void RobotPoseTypeConveter::poseCallback(const nav_msgs::Odometry& odometry) 12 | { 13 | geometry_msgs::PoseWithCovarianceStamped message; 14 | message.header = odometry.header; 15 | message.pose = odometry.pose; 16 | pose_publisher_.publish(message); 17 | } 18 | 19 | int main(int argc, char** argv) 20 | { 21 | ros::init(argc, argv, "robot_pose_type_converter"); 22 | RobotPoseTypeConveter rptc = RobotPoseTypeConveter(); 23 | ros::spin(); 24 | } 25 | -------------------------------------------------------------------------------- /igvc_platform/src/motor_controller/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_executable(motor_controller 2 | ${PROJECT_SOURCE_DIR}/include/${PROJECT_NAME}/nanopb/pb_decode.c 3 | ${PROJECT_SOURCE_DIR}/include/${PROJECT_NAME}/nanopb/pb_common.c 4 | ${PROJECT_SOURCE_DIR}/include/${PROJECT_NAME}/nanopb/pb_encode.c 5 | # ${PROJECT_SOURCE_DIR}/include/${PROJECT_NAME}/nanopb/protos/igvc.pb.c 6 | ${PROJECT_SOURCE_DIR}/include/${PROJECT_NAME}/nanopb/swerve_commands.pb.c 7 | motor_controller.cpp) 8 | 9 | add_dependencies(motor_controller ${catkin_EXPORTED_TARGETS}) 10 | 11 | target_link_libraries(motor_controller ${catkin_LIBRARIES}) 12 | 13 | install( 14 | TARGETS motor_controller 15 | ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 16 | LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 17 | RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 18 | ) 19 | -------------------------------------------------------------------------------- /igvc_gazebo/nodes/scan_to_pointcloud/scan_to_pointcloud.h: -------------------------------------------------------------------------------- 1 | #ifndef SCAN_TO_POINTCLOUD 2 | #define SCAN_TO_POINTCLOUD 3 | 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | 14 | class scan_to_pointcloud 15 | { 16 | public: 17 | scan_to_pointcloud(); 18 | 19 | private: 20 | ros::Publisher _pointcloud_pub; 21 | ros::Subscriber _pointcloud_sub; 22 | ros::NodeHandle node_handle; 23 | ros::NodeHandle private_node_handle; 24 | 25 | laser_geometry::LaserProjection projection; 26 | double min_dist; 27 | double neighbor_dist; 28 | double offset; 29 | 30 | void scanCallback(const sensor_msgs::LaserScan::ConstPtr &msg); 31 | void spinnerUpdate(); 32 | }; 33 | 34 | #endif -------------------------------------------------------------------------------- /igvc_navigation/launch/navigation_server.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /igvc_perception/src/multiclass_segmentation/config/igvc.yaml: -------------------------------------------------------------------------------- 1 | # training parameters 2 | train: 3 | epochs: 10 4 | lr: 0.001 5 | seed: 42 6 | cudnn: True 7 | classes: 3 8 | random_state: 420 9 | valid_size: 0.1 10 | batch_size: 3 11 | num_workers: 2 12 | w_decay: 0.01 13 | optim_factor: 0.25 14 | optim_patience: 2 15 | eps: 1e-08 16 | amsgrad: False 17 | betas_min: 0.9 18 | betas_max: 0.999 19 | logdir: "/content/drive/Shareddrives/RoboNav/Software/model_training/full_model2" 20 | minimize_metric: True 21 | fp16: null 22 | verbose: True 23 | 24 | # testing parameters 25 | test: 26 | batch_size: 3 27 | shuffle: False 28 | num_workers: 4 29 | 30 | # encoder parameters 31 | encoder: 32 | name: "efficientnet-b3" 33 | weight: "imagenet" 34 | activation: null 35 | 36 | # image size, multiple of 32. e.g: (480, 640) 37 | image: 38 | height: 416 39 | width: 416 -------------------------------------------------------------------------------- /igvc_perception/src/pointcloud_filter/ground_filter/ground_filter.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | namespace pointcloud_filter 4 | { 5 | GroundFilter::GroundFilter(const ros::NodeHandle& nh) : config_{ nh } 6 | { 7 | } 8 | 9 | void GroundFilter::filter(pointcloud_filter::Bundle& bundle) 10 | { 11 | const auto& height_min = config_.height_min; 12 | const auto& height_max = config_.height_max; 13 | 14 | PointCloud filtered_pc; 15 | filtered_pc.points.reserve(bundle.pointcloud->points.size()); 16 | 17 | for (const auto& point : *bundle.pointcloud) 18 | { 19 | bool within_thresholds = height_min <= point.z && point.z <= height_max; 20 | if (within_thresholds) 21 | { 22 | filtered_pc.points.emplace_back(point); 23 | } 24 | } 25 | bundle.occupied_pointcloud->header = bundle.pointcloud->header; 26 | bundle.occupied_pointcloud->points = std::move(filtered_pc.points); 27 | } 28 | } // namespace pointcloud_filter 29 | -------------------------------------------------------------------------------- /igvc_rviz_plugins/HOWTO.md: -------------------------------------------------------------------------------- 1 | # How To Make an rviz Panel 2 | 3 | All rviz panels are classes that inherit from rviz::Panel. Any catkin package can export a class library defining its own set of Panel subclasses, allowing packages to create their own custom rviz panels. 4 | 5 | To create your own panel, follow these general steps: 6 | 7 | 1. Create a new subclass of rviz::Panel in the `igvc_rviz_plugins` namespace. 8 | 2. Implement your panel and add the `PLUGINLIB_EXPORT_CLASS(...)` macro to the end of your *.cpp file. 9 | 3. Add your *.h and *.cpp files to `rviz_plugins_HDRS` and `rviz_plugins_SRCS` in *CMakeLists.txt*. 10 | 4. Add a new tag to *igvc_rviz_plugins*'s *plugin_description.xml* file. 11 | 12 | That's it! At this point, you should be able to build the package with `catkin_make` in your catkin workspace. Your new panel will show up in rviz when you click *Panels->Add New Panel*. 13 | 14 | To see more details about how to implement an rviz panel, check out *ExamplePanel.h* and *ExamplePanel.cpp*. -------------------------------------------------------------------------------- /igvc_perception/launch/actual_barrel_segmentation.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /igvc_description/urdf/models/ramp/model.sdf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | true 5 | 6 | 7 | 8 | 9 | model://ramp/meshes/ramp.dae 10 | 1 1 1 11 | 12 | 13 | 10 14 | 15 | 16 | 17 | 100 18 | 50 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | model://ramp/meshes/ramp.dae 27 | 1 1 1 28 | 29 | 30 | 31 | 0 32 | 0 33 | 34 | 35 | 36 | -------------------------------------------------------------------------------- /igvc_perception/launch/multiclass_segmentation.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | ["/cam/center", "/cam/left", "/cam/right"] 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /igvc_sandbox/detectors_config_gazebo.yaml: -------------------------------------------------------------------------------- 1 | # Configuration values for our OpenCV nodes tuned for a GAZEBO SIMULATION 2 | config: 3 | 4 | # Pothole Detector configuration values 5 | pothole: 6 | 7 | # Radii for hough circle detector 8 | minRadius: 10 9 | maxRadius: 50 10 | 11 | # Radius for averaging pixels in a circle around the center 12 | whiteSampleRadius: 5 13 | 14 | # Size for filtering out contours that are too small 15 | contourSizeThreshold: 100 16 | 17 | # Adaptive thresholding of colors to filter out non-potholes 18 | blueAdaptiveThreshold: 75 19 | greenAdaptiveThreshold: 40 20 | redAdaptiveThreshold: 20 21 | 22 | # Line dectector configuration values 23 | line: 24 | 25 | # Canny edge detector thresholds 26 | cannyThresh: 65 27 | ratio: 2 28 | 29 | # HoughLinesP tunable values 30 | houghThreshold: 60 31 | houghMinLineLength: 35 32 | houghMaxLineGap: 10 33 | 34 | # The maximum forward distance from the robot to plot points in meters 35 | maxDistance: 8 36 | 37 | outputLineSpacing: 1 38 | -------------------------------------------------------------------------------- /igvc_sandbox/detectors_config_realworld.yaml: -------------------------------------------------------------------------------- 1 | # Configuration values for our OpenCV nodes tuned for the REAL WORLD 2 | config: 3 | 4 | # Pothole Detector configuration values 5 | pothole: 6 | 7 | # Radii for hough circle detector 8 | minRadius: 10 9 | maxRadius: 50 10 | 11 | # Radius for averaging pixels in a circle around the center 12 | whiteSampleRadius: 5 13 | 14 | # Size for filtering out contours that are too small 15 | contourSizeThreshold: 100 16 | 17 | # Adaptive thresholding of colors to filter out non-potholes 18 | blueAdaptiveThreshold: 75 19 | greenAdaptiveThreshold: 40 20 | redAdaptiveThreshold: 20 21 | 22 | # Line dectector configuration values 23 | line: 24 | 25 | # Canny edge detector thresholds 26 | cannyThresh: 45 27 | ratio: 135 28 | 29 | # HoughLinesP tunable values 30 | houghThreshold: 80 31 | houghMinLineLength: 35 32 | houghMaxLineGap: 15 33 | 34 | # The maximum forward distance from the robot to plot points in meters 35 | maxDistance: 8 36 | 37 | outputLineSpcaing: 5 38 | -------------------------------------------------------------------------------- /igvc_navigation/src/swerve_drive/swerve_drive.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Converts Twist messages to velocity quads for the motors of a swerve drive robot 3 | */ 4 | 5 | #ifndef SWERVEDRIVE_H 6 | #define SWERVEDRIVE_H 7 | 8 | #include 9 | #include 10 | #include 11 | 12 | class SwerveDrive 13 | { 14 | public: 15 | SwerveDrive(); 16 | 17 | private: 18 | ros::NodeHandle nh; 19 | ros::NodeHandle pNh; 20 | 21 | ros::Subscriber mbf_twist_; 22 | ros::Publisher vel_pub_; 23 | 24 | std::array, 4> positions_list; 25 | std::array, 4> limits_list; 26 | std::array, 4> wheel_info; 27 | double max_vel_; 28 | 29 | void twistToVelocity(const geometry_msgs::TwistConstPtr& twist); 30 | bool getParams(); 31 | int set_command_angle(const double& target, const int& wheel_idx); 32 | double theta_map(const double& theta); 33 | double isclose(const double& a, const double& b, const double tol = 0.00001, const double bias = 0); 34 | }; 35 | 36 | #endif // SWERVEDRIVE_H 37 | -------------------------------------------------------------------------------- /igvc_platform/src/swerve_joystick_driver/swerve_joystick.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Converts joystick messages to velocity quads for the motors of a swerve drive robot 3 | */ 4 | 5 | #ifndef SWERVEJOY_H 6 | #define SWERVEJOY_H 7 | 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | 14 | class SwerveJoy 15 | { 16 | public: 17 | SwerveJoy(); 18 | 19 | private: 20 | void joystick_diagnostic(diagnostic_updater::DiagnosticStatusWrapper& stat); 21 | void joyCallback(const sensor_msgs::Joy::ConstPtr& msg); 22 | 23 | ros::NodeHandle nh; 24 | ros::NodeHandle pNh; 25 | 26 | ros::Publisher cmd_pub; 27 | 28 | ros::Subscriber joy_sub; 29 | 30 | diagnostic_updater::Updater updater; 31 | 32 | double absoluteMaxVel, maxVel, maxVelIncr, maxAngle; 33 | int stickLeft_UDAxis, stickRight_UDAxis, stickLeft_LRAxis, stickRight_LRAxis; 34 | bool leftUDInverted, rightUDInverted, leftLRInverted, rightLRInverted; 35 | }; 36 | 37 | #endif // SWERVEJOY_H 38 | -------------------------------------------------------------------------------- /igvc_navigation/src/mapper/gridmap_layer.h: -------------------------------------------------------------------------------- 1 | #ifndef SRC_GRIDMAP_LAYER_H 2 | #define SRC_GRIDMAP_LAYER_H 3 | 4 | #include 5 | #include 6 | 7 | namespace gridmap_layer 8 | { 9 | class GridmapLayer : public costmap_2d::Layer 10 | { 11 | public: 12 | GridmapLayer(const std::vector& layers); 13 | GridmapLayer(); 14 | 15 | void onInitialize() override; 16 | void updateBounds(double robot_x, double robot_y, double robot_yaw, double* min_x, double* min_y, double* max_x, 17 | double* max_y) override; 18 | void updateCosts(costmap_2d::Costmap2D& master_grid, int min_i, int min_j, int max_i, int max_j) override = 0; 19 | 20 | protected: 21 | void touch(const grid_map::Index& index); 22 | void resetDirty(); 23 | std::optional getDirtyIterator() const; 24 | 25 | grid_map::Index dirty_min_idx_; 26 | grid_map::Index dirty_max_idx_; 27 | grid_map::GridMap map_{}; 28 | 29 | bool rolling_window_; 30 | }; 31 | } // namespace gridmap_layer 32 | 33 | #endif // SRC_GRIDMAP_LAYER_H 34 | -------------------------------------------------------------------------------- /igvc_rviz_plugins/include/igvc_rviz_plugins_old/node_panel.h: -------------------------------------------------------------------------------- 1 | #ifndef NODE_PANEL_H 2 | #define NODE_PANEL_H 3 | 4 | #include 5 | #include 6 | #include 7 | 8 | #include 9 | 10 | #include 11 | 12 | #include "my_thread.h" 13 | 14 | #include "num_button.h" 15 | 16 | #include 17 | #include 18 | #include 19 | 20 | namespace rviz_plugins 21 | { 22 | class NodePanel : public rviz::Panel 23 | { 24 | Q_OBJECT 25 | public: 26 | NodePanel(QWidget* parent = 0); 27 | 28 | private Q_SLOTS: 29 | void closeNode(int num); 30 | void handleButton(); 31 | 32 | public Q_SLOTS: 33 | 34 | protected Q_SLOTS: 35 | 36 | protected: 37 | ros::Subscriber sub; 38 | ros::NodeHandle nh_; 39 | QComboBox* output_topic_editor_; 40 | time_t start; 41 | bool doOnce; 42 | QPushButton* m_button; 43 | NumButton* close_btn; 44 | NumButton* test_btn; 45 | std::vector myThreads; 46 | int curThread; 47 | QVBoxLayout* layout; 48 | }; 49 | } // namespace rviz_plugins 50 | 51 | #endif // NODE_PANEL_H -------------------------------------------------------------------------------- /igvc_navigation/src/mapper/lidar_config.cpp: -------------------------------------------------------------------------------- 1 | #include "lidar_config.h" 2 | #include 3 | #include 4 | 5 | namespace lidar_layer 6 | { 7 | LidarConfig::LidarConfig(const ros::NodeHandle& parent_nh) 8 | { 9 | ros::NodeHandle nh{ parent_nh, "lidar" }; 10 | 11 | assertions::getParam(nh, "occupied_topic", occupied_topic); 12 | assertions::getParam(nh, "free_topic", free_topic); 13 | assertions::getParam(nh, "free_topic", free_topic); 14 | 15 | assertions::getParam(nh, "sensor_model/scan_hit", scan_hit); 16 | scan_hit = probability_utils::toLogOdds(scan_hit); 17 | 18 | assertions::getParam(nh, "sensor_model/scan_miss", scan_miss); 19 | scan_miss = probability_utils::toLogOdds(1.0 - scan_miss); // It's a miss, so 1 - hit 20 | 21 | assertions::getParam(nh, "sensor_model/free_miss", free_miss); 22 | free_miss = probability_utils::toLogOdds(1.0 - free_miss); // It's a miss, so 1 - hit 23 | 24 | assertions::getParam(nh, "sensor_model/hit_exponential_coeff", hit_exponential_coeff); 25 | } 26 | 27 | } // namespace lidar_layer 28 | -------------------------------------------------------------------------------- /igvc_platform/src/tests/test/test_swerve_control.test: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /igvc_navigation/src/mapper/map_config.cpp: -------------------------------------------------------------------------------- 1 | #include "map_config.h" 2 | #include 3 | #include 4 | 5 | namespace map 6 | { 7 | MapConfig::MapConfig(const ros::NodeHandle &parent_nh) 8 | { 9 | ros::NodeHandle nh{ parent_nh, "map" }; 10 | 11 | assertions::getParam(nh, "resolution", resolution); 12 | assertions::getParam(nh, "length_x", length_x); 13 | assertions::getParam(nh, "length_y", length_y); 14 | 15 | assertions::getParam(nh, "frame_id", frame_id); 16 | 17 | costmap_topic = assertions::param(nh, "costmap_topic", std::string("")); 18 | 19 | assertions::getParam(nh, "occupied_threshold", occupied_threshold); 20 | 21 | assertions::getParam(nh, "max_occupancy", max_occupancy); 22 | max_occupancy = probability_utils::toLogOdds(max_occupancy); 23 | assertions::getParam(nh, "min_occupancy", min_occupancy); 24 | min_occupancy = probability_utils::toLogOdds(min_occupancy); 25 | 26 | assertions::getParam(nh, "debug/map_topic", debug.map_topic); 27 | assertions::getParam(nh, "debug/enabled", debug.enabled); 28 | } 29 | } // namespace map 30 | -------------------------------------------------------------------------------- /igvc_utils/launch/mapper_bag.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /igvc_description/urdf/models/autonav/model.sdf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | true 5 | 6 | 7 | 8 | 9 | 0 0 1 10 | 64 64 11 | 12 | 13 | 14 | 15 | 16 | 100 17 | 50 18 | 19 | 20 | 21 | 22 | 23 | false 24 | 25 | 26 | 0 0 1 27 | 64 64 28 | 29 | 30 | 31 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /igvc_description/urdf/models/ramp_lane/model.sdf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | true 5 | 6 | 7 | 8 | 9 | 0 0 1 10 | 20 5 11 | 12 | 13 | 14 | 15 | 16 | 100 17 | 50 18 | 19 | 20 | 21 | 22 | 23 | false 24 | 25 | 26 | 0 0 1 27 | 20 5 28 | 29 | 30 | 31 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /igvc_navigation/src/mapper/rolling_layer.h: -------------------------------------------------------------------------------- 1 | #ifndef SRC_ROLLING_LAYER_H 2 | #define SRC_ROLLING_LAYER_H 3 | 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include "rolling_layer_config.h" 10 | 11 | namespace rolling_layer 12 | { 13 | class RollingLayer : public costmap_2d::CostmapLayer 14 | { 15 | public: 16 | RollingLayer(); 17 | void onInitialize() override; 18 | void updateBounds(double robot_x, double robot_y, double robot_yaw, double* min_x, double* min_y, double* max_x, 19 | double* max_y) override; 20 | void updateCosts(costmap_2d::Costmap2D& master_grid, int min_i, int min_j, int max_i, int max_j) override; 21 | 22 | private: 23 | void initPubSub(); 24 | 25 | void costmapCallback(const nav_msgs::OccupancyGridConstPtr& map); 26 | 27 | ros::NodeHandle nh_; 28 | ros::NodeHandle private_nh_; 29 | ros::Subscriber costmap_sub_; 30 | 31 | RollingLayerConfig config_; 32 | }; 33 | } // namespace rolling_layer 34 | 35 | #endif // SRC_ROLLING_LAYER_H 36 | -------------------------------------------------------------------------------- /igvc_platform/src/tests/test/test_swerve_joystick_driver.test: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /igvc_utils/src/pid_tester/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | #include 6 | 7 | bool enabled = false; 8 | 9 | void enabled_callback(const std_msgs::BoolConstPtr& msg) 10 | { 11 | enabled = msg->data; 12 | } 13 | 14 | int main(int argc, char** argv) 15 | { 16 | ros::init(argc, argv, "pidtester"); 17 | 18 | ros::NodeHandle nh; 19 | 20 | ros::Subscriber enabled_sub = nh.subscribe("/robot_enabled", 1, enabled_callback); 21 | 22 | ros::Publisher cmd_pub = nh.advertise("/motors", 1); 23 | 24 | while (!enabled) 25 | { 26 | ros::spinOnce(); 27 | } 28 | 29 | usleep(500); 30 | 31 | auto duration = 5.0; 32 | 33 | igvc_msgs::velocity_pair cmd; 34 | cmd.duration = duration; 35 | cmd.left_velocity = 1.0; 36 | cmd.right_velocity = 1.0; 37 | 38 | cmd_pub.publish(cmd); 39 | 40 | ros::spinOnce(); 41 | sleep((__useconds_t)(duration)); 42 | 43 | cmd.left_velocity = 0.0; 44 | cmd.right_velocity = 0.0; 45 | 46 | cmd_pub.publish(cmd); 47 | 48 | ros::spin(); 49 | 50 | return 0; 51 | } 52 | -------------------------------------------------------------------------------- /igvc_description/urdf/models/qualification/model.sdf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | true 5 | 6 | 7 | 8 | 9 | 0 0 1 10 | 100 100 11 | 12 | 13 | 14 | 15 | 16 | 100 17 | 50 18 | 19 | 20 | 21 | 22 | 23 | false 24 | 25 | 26 | 0 0 1 27 | 100 100 28 | 29 | 30 | 31 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /license.txt: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2015 RoboJackets 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /documents/design/testing_library.md: -------------------------------------------------------------------------------- 1 | # Project Title 2 | 3 | *Issue #Number* 4 | 576 5 | 6 | **Author:** 7 | - Vivek Mhatre 8 | 9 | ## The Problem 10 | 11 | Currently we have difficulty asserting whether a subscriber has received a message. Without race conditions, testing is hard to do. 12 | 13 | ## Proposed Solution 14 | 15 | - To solve this problem I will create a testing library that abstracts the testing file. This way, we will be able to reuse the same tests for other nodes and possibly incorporate the directory into other projects. 16 | - First abstract the current testing file into testing directory. 17 | - Create tests to check if testing library works. 18 | 19 | ## Questions & Research 20 | - How do I write tests? 21 | - Oswin's comments on [issue 575]{https://github.com/RoboJackets/igvc-software/issues/575) 22 | 23 | 24 | ## Overall Scope 25 | 26 | ### Affected Packages 27 | 28 | - igvc_platform/src/tests 29 | 30 | ### Schedule 31 | 32 | Subtask 1 (02/23/2020): Abstract test into test directory 33 | 34 | Subtask 2 (03/02/2020): Write own tests for test directory 35 | 36 | Code Review (03/07/2020): Should be done by now and ready for review. Hopefully I can be done sooner. 37 | -------------------------------------------------------------------------------- /igvc_description/urdf/models/autonav_mesh/model.sdf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | true 5 | 6 | 7 | 8 | 9 | model://autonav_mesh/meshes/autonav_world.dae 10 | 1 1 1 11 | 12 | 13 | 14 | 15 | 16 | 100 17 | 50 18 | 19 | 20 | 21 | 22 | 23 | false 24 | 25 | 26 | model://autonav_mesh/meshes/autonav_world.dae 27 | 1 1 1 28 | 29 | 30 | 31 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /igvc_rviz_plugins/src/igvc_rviz_plugins_old/bat_panel.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include 4 | #include 5 | #include 6 | 7 | #include 8 | 9 | namespace rviz_plugins 10 | { 11 | void BatPanel::batCallback(const std_msgs::UInt8& msg) 12 | { 13 | char str[4]; 14 | sprintf(str, "%u", msg.data); 15 | output_topic_editor_->setText(str); 16 | } 17 | 18 | BatPanel::BatPanel(QWidget* parent) : rviz::Panel(parent) 19 | { 20 | QHBoxLayout* topic_layout = new QHBoxLayout; 21 | topic_layout->addWidget(new QLabel("Battery Level:")); 22 | output_topic_editor_ = new QLabel("TEST"); 23 | topic_layout->addWidget(output_topic_editor_); 24 | 25 | QVBoxLayout* layout = new QVBoxLayout; 26 | layout->addLayout(topic_layout); 27 | setLayout(layout); 28 | output_topic_editor_->setText("No Signal"); 29 | 30 | sub = nh_.subscribe("/battery", 1, &BatPanel::batCallback, this); 31 | 32 | // connect( this, SIGNAL( changeText() ), output_topic_editor_, SLOT( setTextLabel() )); 33 | } 34 | } // namespace rviz_plugins 35 | 36 | #include 37 | PLUGINLIB_EXPORT_CLASS(rviz_plugins::BatPanel, rviz::Panel) 38 | -------------------------------------------------------------------------------- /documents/design/barrel_detection.md: -------------------------------------------------------------------------------- 1 | # Barrel Detection Design Document 2 | 3 | **Author: Joshua Viszlai** 4 | 5 | ## Motivation 6 | Our current ground plane segmentation implementation uses a ransac-based plane segmentation algorithm from [pcl](http://www.pointclouds.org/documentation/tutorials/planar_segmentation.php). 7 | 8 | This approach assumes the ground is flat, which is not a viable assumption given the rough terrain we need to traverse. It also removes some control of the algorithm itself since we did not implement it. Therefore we need to come up with a new approach that removes the assumption that the entire ground is one flat plane, and one that we can ideally implement ourselves (for both added control and educational purposes). 9 | 10 | ## Requirements 11 | Given an input pointcloud: 12 | 1. Distinguish ground points vs. non-ground points (barrels, trees, etc.) 13 | 2. Be robust to hills and rough terrain 14 | 15 | ## Design 16 | 17 | A node will be created that subscribes to the `velodyne_pointcloud` topic and publishes to `ground` and `nonground` topics. This node will implement the algorithm presented in the barrel detection [research document](../research/barrel_detection.md). 18 | 19 | 20 | -------------------------------------------------------------------------------- /igvc_navigation/src/state_estimator/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | find_package(Boost REQUIRED) 2 | find_package(Eigen3 REQUIRED) 3 | find_package(cmake_modules REQUIRED) 4 | 5 | include_directories(include ${catkin_INCLUDE_DIRS} ${Boost_INCLUDE_DIR} ${Eigen_INCLUDE_DIRS}) 6 | 7 | find_package(GTSAM) 8 | if(GTSAM_FOUND) 9 | find_package(TBB REQUIRED) 10 | include_directories(include ${catkin_INCLUDE_DIRS} "/usr/local/include") 11 | 12 | add_executable(StateEstimator StateEstimator.cpp) 13 | target_link_libraries(StateEstimator ${catkin_LIBRARIES} ${ROS_LIBRARIES} /usr/local/lib/libgtsam.so /usr/local/lib/libgtsam_unstable.so /usr/local/lib/libGeographic.so ${TBB_LIBRARIES}) 14 | add_dependencies(StateEstimator igvc_msgs_gencpp) 15 | 16 | install(TARGETS StateEstimator 17 | ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 18 | LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 19 | RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}) 20 | endif() 21 | 22 | install( 23 | TARGETS StateEstimator 24 | ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 25 | LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 26 | RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 27 | ) 28 | -------------------------------------------------------------------------------- /igvc_description/launch/spawn_swervi.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /igvc_navigation/src/state_estimator/ThreadedQueue.hpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | template 6 | class ThreadedQueue 7 | { 8 | private: 9 | std::queue q; 10 | mutable std::mutex m; 11 | std::condition_variable c; 12 | 13 | public: 14 | ThreadedQueue() : q(), m(), c() 15 | { 16 | } 17 | 18 | ~ThreadedQueue() 19 | { 20 | } 21 | 22 | T front() 23 | { 24 | std::lock_guard lock(m); 25 | return q.front(); 26 | } 27 | 28 | T back() 29 | { 30 | std::lock_guard lock(m); 31 | return q.back(); 32 | } 33 | 34 | void push(T t) 35 | { 36 | std::lock_guard lock(m); 37 | q.push(t); 38 | c.notify_one(); 39 | } 40 | 41 | T pop() 42 | { 43 | // blocks until an element is available 44 | std::unique_lock lock(m); 45 | c.wait(lock, [&] { return !q.empty(); }); 46 | T t = q.front(); 47 | q.pop(); 48 | return t; 49 | } 50 | 51 | size_t size() 52 | { 53 | std::lock_guard lock(m); 54 | return q.size(); 55 | } 56 | 57 | bool empty() 58 | { 59 | std::lock_guard lock(m); 60 | return q.empty(); 61 | } 62 | }; 63 | -------------------------------------------------------------------------------- /documents/design/add_noise_to_simulation_2.md: -------------------------------------------------------------------------------- 1 | # Add Noise to Simulation 2 | 3 | *Issue #552* 4 | 5 | **Author:** 6 | - David Gorin 7 | 8 | ## The Problem 9 | 10 | The problem I am trying to solve is how to add extra noise to the gazebo simulation. This problem is important because we need to be able to see if the localization and mapping nodes can take more stress than the current noise generated. 11 | ## Proposed Solution 12 | 13 | I am going to simulate noise for the x and y position of the robot using a random normal distribution 14 | 15 | - add normal distribution randomizer 16 | - add noise to x,y,z, and RPY 17 | - have it so the randomizer's standard deviaion can be set in the launch file(simulation.launch) 18 | 19 | ## Questions & Research 20 | 21 | I need to figure out how to implement normal distributions in c++ 22 | 23 | 24 | ## Overall Scope 25 | 26 | ### Affected Packages 27 | 28 | - igvc_gazebo 29 | - ground_truth/main.cpp 30 | - simulation.launch 31 | 32 | ### Schedule 33 | 34 | Subtask 1 (2/xx/22): Create a normal distribution randomizer and use it to add noise to x pose and y pose 35 | 36 | Subtask 2 (2/xx/22): Make it so that the standard deviation can be set in the launch files 37 | 38 | Code Review: (2/xx/22) 39 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.cproject 2 | *.project 3 | /*/bin/** 4 | 5 | #CodeBlocks 6 | *.depend 7 | *.layout 8 | */*/bin/* 9 | */*/obj/* 10 | */*/.objs/* 11 | 2013/software/IGVC2013_build_log.html 12 | 13 | #ArdupilotIgnores 14 | /2013/software/src/sensors/ardupilot/config.mk 15 | /src/hardware/sensors/ardupilot/config.mk 16 | /sandbox/ardupilot/config.mk 17 | 18 | *~ 19 | *.swp 20 | 21 | #Qt Creator 22 | *.pro.user* 23 | #ignores all top-level directories whose name starts with "build". This ignores the default Qt build directory formatting for projects. 24 | /build* 25 | *.user 26 | 27 | #Doxygen 28 | /docs/ 29 | 30 | #rosdoc_lite 31 | /doc/ 32 | 33 | #Speed_compare 34 | /sandbox/speed_comapare/speed_data.csv 35 | 36 | #JetBrains Clion 37 | */.idea/ 38 | /.idea/ 39 | 40 | #VSCode 41 | .vscode 42 | 43 | # CMake 44 | */cmake-build-*/ 45 | 46 | #Camera Calibration 47 | /igvc_sandbox/camera_pose_estimation/CMakeFiles 48 | /igvc_sandbox/camera_pose_estimation/CMakeCache.txt 49 | /igvc_sandbox/camera_pose_estimation/cmake_install.cmake 50 | /igvc_sandbox/camera_pose_estimation/Makefile 51 | /igvc_sandbox/camera_pose_estimation/solvepnp 52 | 53 | #CNN models 54 | /igvc_sandbox/models/ 55 | 56 | #generated textures 57 | /igvc_gazebo/scripts/gen 58 | #pyc 59 | *.pyc 60 | -------------------------------------------------------------------------------- /igvc_description/package.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | igvc_description 4 | 1.0.0 5 | 6 | igvc_description contains the description of the IGVC Swervi platform 7 | 8 | 9 | Jason Gibson 10 | BSD 11 | 12 | Jason Gibson 13 | 14 | catkin 15 | 16 | joint_state_publisher 17 | robot_state_publisher 18 | gazebo_ros 19 | gazebo_ros_control 20 | std_msgs 21 | tf 22 | hector_gazebo_plugins 23 | hector_gazebo_worlds 24 | joy 25 | rviz 26 | velodyne_simulator 27 | velodyne_description 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /igvc_msgs/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 2.8.3) 2 | project(igvc_msgs) 3 | 4 | ## Find catkin macros and libraries 5 | find_package(catkin REQUIRED COMPONENTS 6 | message_generation 7 | std_msgs 8 | sensor_msgs 9 | geometry_msgs 10 | actionlib_msgs 11 | ) 12 | 13 | # Generate messages in the 'msg' folder 14 | add_message_files( 15 | DIRECTORY msg 16 | FILES 17 | velocity_quad.msg 18 | velocity_pair.msg 19 | lights.msg 20 | action_path.msg 21 | system_stats.msg 22 | map.msg 23 | igvc_path.msg 24 | trajectory_point.msg 25 | trajectory.msg 26 | barrels.msg 27 | ) 28 | 29 | add_service_files( 30 | DIRECTORY srv 31 | FILES 32 | BackCircle.srv 33 | ) 34 | 35 | add_action_files( 36 | DIRECTORY action 37 | FILES 38 | NavigateWaypoint.action 39 | ) 40 | 41 | # Generate added messages and services with any dependencies listed here 42 | generate_messages( 43 | DEPENDENCIES 44 | std_msgs 45 | sensor_msgs 46 | geometry_msgs 47 | actionlib_msgs 48 | ) 49 | 50 | catkin_package( 51 | CATKIN_DEPENDS std_msgs sensor_msgs geometry_msgs actionlib_msgs message_runtime 52 | ) 53 | 54 | 55 | 56 | -------------------------------------------------------------------------------- /igvc_platform/launch/lidar.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /igvc_description/urdf/models/grass_plane/model.sdf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | true 5 | 6 | 7 | 8 | 9 | 0 0 1 10 | 100 100 11 | 12 | 13 | 14 | 15 | 16 | 100 17 | 50 18 | 19 | 20 | 21 | 22 | 23 | false 24 | 25 | 26 | 0 0 1 27 | 100 100 28 | 29 | 30 | 31 | 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /igvc_gazebo/launch/ramp_lane.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /igvc_description/urdf/models/grass_plane/model-1_2.sdf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | true 5 | 6 | 7 | 8 | 9 | 0 0 1 10 | 100 100 11 | 12 | 13 | 14 | 15 | 16 | 100 17 | 50 18 | 19 | 20 | 21 | 22 | 23 | false 24 | 25 | 26 | 0 0 1 27 | 100 100 28 | 29 | 30 | 31 | 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /igvc_description/urdf/models/grass_plane/model-1_4.sdf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | true 5 | 6 | 7 | 8 | 9 | 0 0 1 10 | 100 100 11 | 12 | 13 | 14 | 15 | 16 | 100 17 | 50 18 | 19 | 20 | 21 | 22 | 23 | false 24 | 25 | 26 | 0 0 1 27 | 100 100 28 | 29 | 30 | 31 | 37 | 38 | 39 | 40 | 41 | 42 | -------------------------------------------------------------------------------- /igvc_gazebo/launch/sim_detector.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | ["/cam/center", "/cam/left", "/cam/right"] 8 | ["/cam/center", "/cam/left", "/cam/right"] 9 | ["", "", ""] 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /documents/design/README.md: -------------------------------------------------------------------------------- 1 | # Design Docs 2 | 3 | ## 2019/2020 Projects 4 | 5 | * **Mapping & Navigation** 6 | * [Cone of Shame](cone_of_shame.md) 7 | * [Fine Tuning TEB Parameters](fine_tuning_teb_parameters.md) 8 | * [Mapping Refactor](mapping_refactor.md) 9 | * [Navigation State Machine](navigation_state_machine/navigation_state_machine.md) 10 | * [Waypoint Orientation for TEB](waypoint_orientation.md) 11 | 12 | * **Perception** 13 | * [Barrel Detection](barrel_detection.md) 14 | * [Barrel Segmentation](actual_barrel_segmentation.md) 15 | * [Raycasting Correction](NM_ray_casting.md) 16 | * [Slope Detection](slope_detection.md) 17 | * [Bird's Eye View Inverse Projection Mapping](birds_eye_view_projection.md) 18 | * [OpenCV Based Line Detection](design/opencv_line_detection.md) 19 | 20 | * **Simulation** 21 | * [Adding Noise](add_noise_to_simulation.md) 22 | * [Low Performance Mode](low_performance_mode.md) 23 | 24 | * **Other** 25 | * [Firmware Refactor](firmware_refactor.md) 26 | * [Testing Library](testing_library.md) 27 | 28 | ## 2021/2022 Projects 29 | 30 | * **Simulation** 31 | * [Simulating Swerve Modules](swerve_module.md) 32 | * [Simulating Noise](add_noise_to_simulation_2.md) 33 | 34 | ## Templates 35 | 36 | * [New Member Projects](new_member_project.md) 37 | 38 | -------------------------------------------------------------------------------- /documents/design/swerve_module.md: -------------------------------------------------------------------------------- 1 | # Simulated Swervi swerve modules 2 | 3 | *Issue #862* 4 | 5 | **Author:** 6 | - Vivek Mhatre 7 | 8 | ## The Problem 9 | 10 | Although we have a urdf model of Swervi, we have no way of controlling Swervi in simulation. It is essential to have a way to control the swerve modules on Swervi in gazebo so we can actually test our new code for Swervi. The end goal of this project is to have a node that is able to control all four swerve modules in simulation. 11 | 12 | ## Proposed Solution 13 | 14 | 1. Setup a new joint controller configuration for the swerve modules on Swervi. 15 | 2. Create a new message type to control the swerve modules. 16 | - The existing `velocity_pair` message only works for differential drive. Need to create a new message type for swerve modules. 17 | 3. Write a new gazebo control node for Swervi that uses the new message type to control Swervi in simulation. 18 | 19 | ## Questions & Research 20 | 21 | - How will the new joint controller work with two degrees of movement? (spinning and moving forward) 22 | - How should the new message type be structured? 23 | - How should the firmware be rewritten to interface with the new swerve modules? 24 | 25 | ## Overall Scope 26 | 27 | ### Affected Packages 28 | 29 | - The `igvc_gazebo`, `igvc_msgs`, and the `igvc_description` packages will be affected. -------------------------------------------------------------------------------- /igvc.cmake: -------------------------------------------------------------------------------- 1 | set(CMAKE_CXX_STANDARD 17) 2 | set(CMAKE_CXX_STANDARD_REQUIRED ON) 3 | add_compile_options(-W -Wall -Wextra) 4 | 5 | set(GIT_REPO_DIR ${CMAKE_CURRENT_LIST_DIR}) 6 | include(${CMAKE_CURRENT_LIST_DIR}/cmake/ensure_submodules.cmake) 7 | 8 | # Add color for ninja generator 9 | if (CMAKE_GENERATOR STREQUAL "Ninja" AND 10 | ((CMAKE_CXX_COMPILER_ID STREQUAL "GNU" AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 4.9) OR 11 | (CMAKE_CXX_COMPILER_ID STREQUAL "Clang" AND NOT CMAKE_CXX_COMPILER_VERSION VERSION_LESS 3.5))) 12 | # Force colored warnings in Ninja's output, if the compiler has -fdiagnostics-color support. 13 | # Rationale in https://github.com/ninja-build/ninja/issues/814 14 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fdiagnostics-color=always") 15 | endif() 16 | 17 | # Set a default build type if none was specified 18 | set(default_build_type "Release") 19 | 20 | if(NOT CMAKE_BUILD_TYPE AND NOT CMAKE_CONFIGURATION_TYPES) 21 | message(STATUS "Setting build type to '${default_build_type}' as none was specified.") 22 | set(CMAKE_BUILD_TYPE "${default_build_type}" CACHE 23 | STRING "Choose the type of build." FORCE) 24 | # Set the possible values of build type for cmake-gui 25 | set_property(CACHE CMAKE_BUILD_TYPE PROPERTY STRINGS 26 | "Debug" "Release" "MinSizeRel" "RelWithDebInfo") 27 | endif() -------------------------------------------------------------------------------- /igvc_navigation/src/mapper/back_circle_layer.h: -------------------------------------------------------------------------------- 1 | #ifndef SRC_BACK_CIRCLE_LAYER_H 2 | #define SRC_BACK_CIRCLE_LAYER_H 3 | 4 | #include 5 | #include 6 | #include 7 | #include 8 | #include 9 | #include 10 | #include 11 | #include 12 | #include 13 | 14 | namespace back_circle_layer 15 | { 16 | class BackCircleLayer : public costmap_2d::CostmapLayer 17 | { 18 | public: 19 | BackCircleLayer(); 20 | 21 | void onInitialize() override; 22 | 23 | void updateBounds(double robot_x, double robot_y, double robot_yaw, double* min_x, double* min_y, double* max_x, 24 | double* max_y) override; 25 | 26 | void updateCosts(costmap_2d::Costmap2D& master_grid, int min_i, int min_j, int max_i, int max_j) override; 27 | pcl::PointCloud back_circle; 28 | std::vector xVals, yVals; 29 | 30 | private: 31 | void initPubSub(); 32 | void costmapCallback(const igvc_msgs::BackCircleResponse::ConstPtr& msg); 33 | 34 | ros::NodeHandle nh_; 35 | ros::NodeHandle private_nh_; 36 | ros::Subscriber back_circle_sub_; 37 | }; 38 | } // namespace back_circle_layer 39 | 40 | #endif // SRC_BACK_CIRCLE_LAYER -------------------------------------------------------------------------------- /igvc_rviz_plugins/src/igvc_rviz_plugins_old/time_panel.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include 4 | #include 5 | #include 6 | 7 | #include 8 | 9 | namespace rviz_plugins 10 | { 11 | void TimePanel::timeCallback(const std_msgs::UInt8& msg) 12 | { 13 | char buf[80]; 14 | struct tm tstruct; 15 | time_t diff = (time(0) - start); 16 | tstruct = *localtime(&diff); 17 | strftime(buf, sizeof(buf), "%M:%S", &tstruct); 18 | output_topic_editor_->setText(buf); 19 | } 20 | 21 | TimePanel::TimePanel(QWidget* parent) : rviz::Panel(parent) 22 | { 23 | start = time(0); 24 | 25 | QHBoxLayout* topic_layout = new QHBoxLayout; 26 | topic_layout->addWidget(new QLabel("Uptime:")); 27 | output_topic_editor_ = new QLabel("TEST"); 28 | topic_layout->addWidget(output_topic_editor_); 29 | 30 | QVBoxLayout* layout = new QVBoxLayout; 31 | layout->addLayout(topic_layout); 32 | setLayout(layout); 33 | output_topic_editor_->setText("No Signal"); 34 | 35 | sub = nh_.subscribe("/battery", 1, &TimePanel::timeCallback, this); 36 | 37 | // connect( this, SIGNAL( changeText() ), output_topic_editor_, SLOT( setTextLabel() )); 38 | } 39 | } // namespace rviz_plugins 40 | 41 | #include 42 | PLUGINLIB_EXPORT_CLASS(rviz_plugins::TimePanel, rviz::Panel) 43 | -------------------------------------------------------------------------------- /igvc_navigation/launch/mbf_navigation.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # IGVC base editorconfig 2 | 3 | # Editorconfig files are recursive, so if you want to add specifc rules for 4 | # your subdirectory, make a file like this in that directory. 5 | 6 | # Lots of configuration is supported, like max line length, and charset. 7 | 8 | # for more information look at http://editorconfig.org/. There are 9 | # plugins available for almost every text editor! 10 | 11 | # For an easy install of the sublime editorconfig package, go to: 12 | # PackageControl -> Install Package -> EditorConfig 13 | 14 | root = false 15 | 16 | # Unix-style newlines with a newline ending every file 17 | [*] 18 | charset = utf-8 19 | end_of_line = lf 20 | insert_final_newline = true 21 | trim_trailing_whitespace = true 22 | indent_style = space 23 | indent_size = 4 24 | 25 | # Use 4 spaces for most files 26 | indent_style = space 27 | max_line_length = 120 28 | 29 | 30 | # Use 2 spaces for travis files 31 | [{package.json,*.yml}] 32 | indent_style = space 33 | indent_size = 2 34 | 35 | # Makefiles are required to use tabs 36 | [{makefile, Makefile}] 37 | indent_style = tab 38 | 39 | # cpp files 40 | [*.{c,h,cpp,hpp,ino,test}] 41 | indent_size = 2 42 | 43 | # launch files 44 | [*.{launch}] 45 | indent_size = 2 46 | 47 | # gazebo files 48 | [*.{xml,sdf,config,urdf,material,world}] 49 | indent_size = 2 50 | 51 | # python files 52 | [*.{py}] 53 | indent_size = 4 54 | -------------------------------------------------------------------------------- /igvc_utils/src/state/robot_control.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | #include 4 | 5 | igvc_msgs::velocity_pair RobotControl::toMessage(ros::Time stamp) const 6 | { 7 | igvc_msgs::velocity_pair velocity_pair; 8 | velocity_pair.left_velocity = left_; 9 | velocity_pair.right_velocity = right_; 10 | velocity_pair.header.stamp = stamp; 11 | return velocity_pair; 12 | } 13 | 14 | CurvatureVelocity RobotControl::toKV(double axle_length) const 15 | { 16 | double linear = linearVelocity(); 17 | double angular = angularVelocity(axle_length); 18 | double curvature = angular / linear; 19 | return { curvature, linear }; 20 | } 21 | 22 | RobotControl RobotControl::fromKV(double curvature, double velocity, double axle_length) 23 | { 24 | double w = curvature * velocity; 25 | 26 | double v_r = velocity + w * axle_length / 2; 27 | double v_l = velocity - w * axle_length / 2; 28 | 29 | return { v_l, v_r }; 30 | } 31 | 32 | std::ostream &operator<<(std::ostream &out, const RobotControl &robot_control) 33 | { 34 | out << "(" << robot_control.left_ << ", " << robot_control.right_ << ")"; 35 | return out; 36 | } 37 | 38 | double RobotControl::linearVelocity() const 39 | { 40 | return (left_ + right_) / 2; 41 | } 42 | 43 | double RobotControl::angularVelocity(double axle_length) const 44 | { 45 | return (right_ - left_) / axle_length; 46 | } 47 | -------------------------------------------------------------------------------- /documents/README.md: -------------------------------------------------------------------------------- 1 | # IGVC Docs 2 | This folder contains research and design documents for the repo. 3 | 4 | ## Research Docs 5 | * [Barrel detection](research/barrel_detection.md) 6 | * [IOP](research/iop.md) 7 | * [IMU Issues](research/imu_issue/imu_issue.md) 8 | 9 | ## Design Docs 10 | 11 | ### 2019/2020 Projects 12 | * [Adding Noise](design/add_noise_to_simulation.md) 13 | * [Barrel Detection](design/barrel_detection.md) 14 | * [Barrel Segmentation](design/actual_barrel_segmentation.md) 15 | * [Cone of Shame](design/cone_of_shame.md) 16 | * [Fine Tuning TEB Parameters](design/fine_tuning_teb_parameters.md) 17 | * [Firmware Refactor](design/firmware_refactor.md) 18 | * [Low Performance Mode](design/low_performance_mode.md) 19 | * [Mapping Refactor](design/mapping_refactor.md) 20 | * [Navigation State Machine](design/navigation_state_machine/navigation_state_machine.md) 21 | * [Raycasting Correction](design/NM_ray_casting.md) 22 | * [Slope Detection](design/slope_detection.md) 23 | * [Testing Library](design/testing_library.md) 24 | * [Waypoint Orientation for TEB](design/waypoint_orientation.md) 25 | * [Bird's Eye View Inverse Projection Mapping](birds_eye_view_projection.md) 26 | * [OpenCV Based Line Detection](design/opencv_line_detection.md) 27 | 28 | ### 2021/2022 Projects 29 | * [Simulating Swerve Modules](design/swerve_module.md) 30 | * [Simulating Noise](add_noise_to_simulation_2.md) -------------------------------------------------------------------------------- /igvc_description/urdf/worlds/ramp_lane.world: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 1.0 1.0 1.0 1.0 8 | false 9 | 10 | 11 | 12 | 13 | model://urdf/models/sun 14 | 15 | 16 | 17 | model://urdf/models/ramp_lane 18 | 8.0 0.0 0.0 0.0 0.0 0.0 19 | --> 20 | 21 | 22 | model://urdf/models/barrels_low 23 | barrel_0 24 | 10.624624 1.53 0 0 -0 0 25 | 26 | 27 | model://urdf/models/barrels_low 28 | barrel_1 29 | 13.742264 0.145766 0 0 -0 0 30 | 31 | 32 | 33 | model://urdf/models/ramp 34 | ramp_1 35 | 5 0 0 0 -0 0 36 | 37 | 38 | 0.0005 39 | 2000 40 | 41 | 42 | 43 | -------------------------------------------------------------------------------- /igvc_platform/launch/motor_controller.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /igvc_rviz_plugins/src/igvc_rviz_plugins_old/eStop_panel.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | 4 | #include 5 | #include 6 | 7 | #include 8 | 9 | namespace rviz_plugins 10 | { 11 | void EStopPanel::subCallback(const std_msgs::Bool& msg) 12 | { 13 | if (msg.data) 14 | { 15 | output_topic_editor_->setStyleSheet("QLabel {color : green;}"); 16 | output_topic_editor_->setText("enabled"); 17 | } 18 | else 19 | { 20 | output_topic_editor_->setStyleSheet("QLabel {color : red;}"); 21 | output_topic_editor_->setText("disabled"); 22 | } 23 | } 24 | 25 | EStopPanel::EStopPanel(QWidget* parent) : rviz::Panel(parent) 26 | { 27 | QHBoxLayout* topic_layout = new QHBoxLayout; 28 | topic_layout->addWidget(new QLabel("eStop Status:")); 29 | output_topic_editor_ = new QLabel("No Signal"); 30 | topic_layout->addWidget(output_topic_editor_); 31 | 32 | QVBoxLayout* layout = new QVBoxLayout; 33 | layout->addLayout(topic_layout); 34 | setLayout(layout); 35 | 36 | sub = nh_.subscribe("/robot_enabled", 1, &EStopPanel::subCallback, this); 37 | 38 | // connect( this, SIGNAL( changeText() ), output_topic_editor_, SLOT( setTextLabel() )); 39 | } 40 | } // namespace rviz_plugins 41 | 42 | #include 43 | PLUGINLIB_EXPORT_CLASS(rviz_plugins::EStopPanel, rviz::Panel) 44 | -------------------------------------------------------------------------------- /igvc_gazebo/nodes/magnetometer/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | 5 | ros::Publisher g_mag_field_pub; 6 | static double g_mag_field_covar; 7 | 8 | void magCallback(const geometry_msgs::Vector3Stamped& msg) 9 | { 10 | sensor_msgs::MagneticField magnet_msg; 11 | magnet_msg.header.seq = msg.header.seq; 12 | magnet_msg.header.stamp = msg.header.stamp; 13 | magnet_msg.header.frame_id = msg.header.frame_id; 14 | magnet_msg.magnetic_field.x = msg.vector.x; 15 | magnet_msg.magnetic_field.y = msg.vector.y; 16 | magnet_msg.magnetic_field.z = msg.vector.z; 17 | magnet_msg.magnetic_field_covariance = { g_mag_field_covar, 0, 0, 0, g_mag_field_covar, 0, 0, 0, g_mag_field_covar }; 18 | g_mag_field_pub.publish(magnet_msg); 19 | } 20 | 21 | int main(int argc, char** argv) 22 | { 23 | ros::init(argc, argv, "mag_republisher"); 24 | ros::NodeHandle nh; 25 | ros::NodeHandle pnh("~"); 26 | std::string sub_topic = pnh.param("mag_sub_topic", std::string("/magnetometer/vector")); 27 | std::string pub_topic = pnh.param("mag_pub_topic", std::string("/magnetometer_mag")); 28 | g_mag_field_covar = pnh.param("mag_field_variance", 1e-6); 29 | g_mag_field_pub = nh.advertise(pub_topic, 10); 30 | ros::Subscriber scan_sub = nh.subscribe(sub_topic, 1, magCallback); 31 | ros::spin(); 32 | } -------------------------------------------------------------------------------- /igvc_navigation/launch/navigation_simulation.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | -------------------------------------------------------------------------------- /igvc_sandbox/igvc.rules: -------------------------------------------------------------------------------- 1 | SUBSYSTEM=="tty", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", ATTRS{bcdDevice}=="0100", SYMLINK+="igvc_lidar", GROUP="plugdev" 2 | 3 | # TOP GOES THROUGH USB HUB 4 | SUBSYSTEM=="tty", ATTRS{idVendor}=="2476", ATTRS{idProduct}=="1010", GOTO="read_imus" 5 | GOTO="skip_imus" 6 | LABEL="read_imus" 7 | SUBSYSTEM=="tty", ATTRS{product}=="USB3.0 Hub", MODE="0666", SYMLINK+="imu_top" 8 | ATTRS{product}=="USB3.0 Hub", GOTO="skip_imus" 9 | SUBSYSTEM=="tty", MODE="0666", SYMLINK+="imu_bottom" 10 | LABEL="skip_imus" 11 | # trust us 12 | 13 | KERNEL=="video?", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="082d", ATTRS{bcdDevice}=="0011", ATTRS{serial}=="F6CB206F", SYMLINK+="igvc_usb_cam_right" 14 | KERNEL=="video?", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="082d", ATTRS{bcdDevice}=="0011", ATTRS{serial}=="EBD81F4F", SYMLINK+="igvc_usb_cam_left" 15 | KERNEL=="video?", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="082d", ATTRS{bcdDevice}=="0011", ATTRS{serial}=="6E5D96EF", SYMLINK+="igvc_usb_cam_center" 16 | 17 | SUBSYSTEM=="tty", ATTRS{idVendor}=="067b", ATTRS{idProduct}=="2303",ATTRS{bcdDevice}=="0400", SYMLINK+="igvc_gps" 18 | 19 | SUBSYSTEM=="tty", ATTRS{idVendor}=="1f00", ATTRS{idProduct}=="2012",ATTRS{bcdDevice}=="0100", SYMLINK+="igvc_motor_board" 20 | 21 | KERNEL=="js?", ATTRS{name}=="Logitech Gamepad F710", SYMLINK+="igvc_joystick" 22 | 23 | SUBSYSTEM=="usb", ATTR{idVendor}=="1d5a", MODE="0666" 24 | -------------------------------------------------------------------------------- /igvc_platform/src/tests/test/test_sim_color_detector.test: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | ["/cam/center", "/cam/left", "/cam/right"] 8 | ["/cam/center", "/cam/left", "/cam/right"] 9 | ["", "", ""] 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | -------------------------------------------------------------------------------- /igvc_gazebo/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 2.8.3) 2 | project(igvc_gazebo) 3 | 4 | include(../igvc.cmake) 5 | 6 | find_package(Eigen3 REQUIRED) 7 | find_package(PCL REQUIRED filters) 8 | find_package(OpenCV REQUIRED) 9 | find_package(catkin REQUIRED COMPONENTS 10 | roscpp 11 | std_msgs 12 | nav_msgs 13 | pcl_conversions 14 | tf 15 | geometry_msgs 16 | igvc_msgs 17 | sensor_msgs 18 | laser_geometry 19 | pcl_ros 20 | igvc_utils 21 | cv_bridge 22 | image_transport 23 | robot_localization 24 | parameter_assertions 25 | ) 26 | 27 | catkin_package( 28 | INCLUDE_DIRS 29 | LIBRARIES 30 | CATKIN_DEPENDS std_msgs nav_msgs geometry_msgs igvc_msgs sensor_msgs 31 | DEPENDS 32 | ) 33 | 34 | include_directories( 35 | ${catkin_INCLUDE_DIRS} 36 | ${PCL_INCLUDE_DIRS} 37 | ) 38 | 39 | install(DIRECTORY launch/ 40 | DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/launch 41 | FILES_MATCHING PATTERN "*.launch" PATTERN "*.machine" PATTERN "*.yaml" PATTERN "*.urdf" 42 | ) 43 | 44 | install(DIRECTORY config/ 45 | DESTINATION ${CATKIN_PACKAGE_SHARE_DESTINATION}/config 46 | FILES_MATCHING PATTERN "*.yaml" 47 | ) 48 | 49 | add_subdirectory(nodes/magnetometer) 50 | add_subdirectory(nodes/swerve_control) 51 | add_subdirectory(nodes/scan_to_pointcloud) 52 | add_subdirectory(nodes/ground_truth) 53 | add_subdirectory(nodes/sim_color_detector) 54 | -------------------------------------------------------------------------------- /igvc_description/urdf/models/barrel/model.sdf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 1 6 | 7 | 500 8 | 9 | 51.2096 10 | 51.2096 11 | 25 12 | 0 13 | 0 14 | 0 15 | 16 | 17 | 18 | 19 | 20 | model://barrel/meshes/barrel.dae 21 | 1 1 1 22 | 23 | 24 | 10 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | model://barrel/meshes/barrel.dae 42 | 1 1 1 43 | 44 | 45 | 46 | 0 47 | 0 48 | 49 | 50 | 51 | -------------------------------------------------------------------------------- /igvc_gazebo/launch/autonav.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /igvc_gazebo/launch/autonav_low.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /igvc_gazebo/launch/autonav_mesh.launch: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /igvc_rviz_plugins/src/igvc_rviz_plugins_old/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | #find_package(Qt5Core REQUIRED) 2 | #find_package(Qt5Gui REQUIRED) 3 | #find_package(Qt5Widgets REQUIRED) 4 | #find_package(catkin REQUIRED COMPONENTS rviz) 5 | # 6 | # 7 | ## Find includes in corresponding build directories 8 | #set(CMAKE_INCLUDE_CURRENT_DIR ON) 9 | # 10 | #include_directories(${catkin_INCLUDE_DIRS}) 11 | #link_directories( ${catkin_LIBRARY_DIRS} ) 12 | #include_directories( ${OGRE_INCLUDE_DIRS} ) 13 | #link_directories( ${OGRE_LIBRARY_DIRS} ) 14 | # 15 | #add_definitions(-DQT_NO_KEYWORDS) 16 | # 17 | #qt5_wrap_cpp(MOC_FILES 18 | # bat_panel.h 19 | # eStop_panel.h 20 | # example_panel.h 21 | # launch_panel.h 22 | # my_thread.h 23 | # node_panel.h 24 | # num_button.h 25 | # sensor_panel.h 26 | # speedometer.h 27 | # speed_panel.h 28 | # time_panel.h 29 | # waypoint_panel.h 30 | #) 31 | # 32 | #set(SOURCE_FILES 33 | # bat_panel.cpp 34 | # eStop_panel.cpp 35 | # example_panel.cpp 36 | # launch_panel.cpp 37 | # my_thread.cpp 38 | # node_panel.cpp 39 | # num_button.cpp 40 | # sensor_panel.cpp 41 | # speedometer.cpp 42 | # speed_panel.cpp 43 | # time_panel.cpp 44 | # waypoint_panel.cpp 45 | # ${MOC_FILES}) 46 | # 47 | #add_library(${PROJECT_NAME} ${SOURCE_FILES}) 48 | #add_dependencies(${PROJECT_NAME} igvc_msgs_gencpp) 49 | # 50 | #target_link_libraries(${PROJECT_NAME} ${catkin_LIBRARIES} ${Qt5Core_LIBRARIES} ${Qt5Gui_LIBRARIES} ${Qt5Widgets_LIBRARIES} ${OGRE_LIBRARY_DIRS}) 51 | -------------------------------------------------------------------------------- /igvc_description/urdf/models/barrels_low/model.sdf: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 1 6 | 7 | 500 8 | 9 | 51.2096 10 | 51.2096 11 | 25 12 | 0 13 | 0 14 | 0 15 | 16 | 17 | 18 | 0 0 0.5 0 0 0 19 | 20 | 21 | 0.3 22 | 1.0 23 | 24 | 25 | 10 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | model://barrel/meshes/barrel.dae 43 | 1 1 1 44 | 45 | 46 | 47 | 0 48 | 0 49 | 50 | 51 | 52 | -------------------------------------------------------------------------------- /igvc_platform/include/igvc_platform/nanopb/protos/swerve_commands.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto2"; 2 | 3 | // message ResponseMessage { 4 | // optional uint32 test = 1; 5 | // } 6 | 7 | message ResponseMessage { 8 | optional float buffer = 1; 9 | optional float fl_velocity_est = 2; 10 | optional float fr_velocity_est = 3; 11 | optional float bl_velocity_est = 4; 12 | optional float br_velocity_est = 5; 13 | optional float fl_angle_est = 6; 14 | optional float fr_angle_est = 7; 15 | optional float bl_angle_est = 8; 16 | optional float br_angle_est = 9; 17 | optional float duration = 10; 18 | } 19 | 20 | message RequestMessage { 21 | optional float buffer = 1; 22 | optional float fl_velocity = 2; 23 | optional float fr_velocity = 3; 24 | optional float bl_velocity = 4; 25 | optional float br_velocity = 5; 26 | optional float fl_angle = 6; 27 | optional float fr_angle = 7; 28 | optional float bl_angle = 8; 29 | optional float br_angle = 9; 30 | optional float duration = 10; 31 | } 32 | 33 | //message RequestMessage { 34 | // optional float duration = 1; 35 | // optional float fl_velocity = 2; 36 | // optional float fr_velocity = 3; 37 | // optional float bl_velocity = 4; 38 | // optional float br_velocity = 5; 39 | // optional float fl_angle = 6; 40 | // optional float fr_angle = 7; 41 | // optional float bl_angle = 8; 42 | // optional float br_angle = 9; 43 | //} -------------------------------------------------------------------------------- /igvc_perception/src/pointcloud_filter/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | add_library(pointcloud_filter_lib STATIC 2 | pointcloud_filter.cpp 3 | pointcloud_filter_config.cpp 4 | bundle.cpp 5 | back_filter/back_filter_config.cpp 6 | back_filter/back_filter.cpp 7 | radius_filter/radius_filter_config.cpp 8 | radius_filter/radius_filter.cpp 9 | ground_filter/ground_filter.cpp 10 | ground_filter/ground_filter_config.cpp 11 | tf_transform_filter/tf_transform_filter.cpp 12 | raycast_filter/raycast_filter_config.cpp 13 | raycast_filter/raycast_filter.cpp 14 | fast_segment_filter/fast_segment_filter.cpp 15 | fast_segment_filter/fast_segment_filter_config.cpp 16 | ) 17 | add_dependencies(pointcloud_filter_lib ${catkin_EXPORTED_TARGETS}) 18 | target_link_libraries(pointcloud_filter_lib ${catkin_LIBRARIES} ${PCL_LIBRARIES}) 19 | 20 | add_executable(pointcloud_filter pointcloud_filter_node.cpp) 21 | add_dependencies(pointcloud_filter ${catkin_EXPORTED_TARGETS}) 22 | target_link_libraries(pointcloud_filter ${catkin_LIBRARIES} pointcloud_filter_lib) 23 | 24 | install( 25 | TARGETS pointcloud_filter pointcloud_filter_lib 26 | ARCHIVE DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 27 | LIBRARY DESTINATION ${CATKIN_PACKAGE_LIB_DESTINATION} 28 | RUNTIME DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} 29 | ) 30 | 31 | add_executable(barrel_seg actual_barrel_segmentation/actual_barrel_segmentation.cpp) 32 | target_link_libraries(barrel_seg ${catkin_LIBRARIES} ${PCL_LIBRARIES}) --------------------------------------------------------------------------------