├── 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