Code Monkey home page Code Monkey logo

igvc-software's Introduction

RoboJackets IGVC Build Status

Welcome to the RoboJackets IGVC software repo! This document will give you a brief description of the repo's layout and an overview of the repo. For more detailed information, check out the github wiki or the RoboJackets wiki.

Software Lead

Folder Structure

The repo is comprised of multiple ROS packages and one sandbox folder for miscellaneous resources.

  • igvc_description URDF files for our robot and gazebo meshes used for simulation
  • igvc_gazebo Helper nodes used for simulation purposes
  • igvc_msgs Custom ROS messages used in the various ROS packages
  • igvc_navigation Collection of nodes that form our navigation stack
  • igvc_perception Collection of nodes that form our perception stack, most notably the line detector
  • igvc_platform Nodes that are platform specific and used to communicate with the hardware, ie. IMU, joystick and motor controller
  • igvc_rviz_plugins RVIZ plugins that provide visualization for our stack.
  • igvc_utils A collection of utility nodes and classes
  • igvc_sandbox Miscellaneous resources, including the models used by the neural network, udev rules, and waypoints files
  • documents Research and design documents.

Building Code

For an installation guide for ROS, check out the installation guide on the RoboJackets wiki.

  1. Clone the repository (with the git submodules) into the src directory of a catkin workspace:

    git clone https://github.com/RoboJackets/igvc-software --recursive
  2. Install dependencies:

    cd igvc-software
    ./install_dependencies.sh
  3. Use catkin_make in the workspace to build all the packages:

    catkin_make
  4. Make sure the devel/setup.bash is sourced before using any of the nodes in this package:

    source devel/setup.bash

Common Errors

  • Could not find a package configuration file provided by "parameter_assertions" with any of the following names:
    • parameter_assertions comes from a git submodule. Initialize the submodules by doing git submodule update --init --recursive
  • Could not find a package configuration file provided by "XXXX" with any of the following names:"
    • Make sure you have ran rosdep install --from-paths src --ignore-src in the catkin_ws folder already
    • If you still get this error after installing all dependencies, then that means that we forgot to include that package in our dependencies list. File an issue with the error message.

Running Gazebo

You can get started with the IGVC code base right away by launching our simulator!

Load up Swervi: The following command will load our platform into a simulated IGVC qualifications course:

roslaunch igvc_gazebo qualification.launch

Navigate the course: After launching the gazebo simulation, launch the navigation stack for simulation:

roslaunch igvc_navigation navigation_simulation.launch

Alternatively, you can control the robot manually with a USB gamepad with this command:

roslaunch igvc_platform joystick_driver.launch

Past Iterations

To view the software repository for our past differential drive robot, Jessiii, checkout the jessiii-dev branch.

Contributing

Join the chat here!

igvc-software's People

Contributors

aaronmcdaniel avatar ahuynh avatar alchaussee avatar alescontrela avatar alextrimm avatar andrewyarovoi avatar barulicm avatar bvaughn8 avatar dallas-d avatar dpattison3 avatar jacobschloss avatar jasongibson274 avatar jgkamat avatar jmschonfeld avatar jviszlai avatar jzheng84 avatar kkeirstead3 avatar kkolur3 avatar kmarino avatar matthewhannay567 avatar nareddyt avatar oswinso avatar red-eight avatar rmkeezer avatar sand500 avatar soohyun-kim avatar tangemicioglu avatar thaeds avatar vam7686 avatar zachcmathews avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

igvc-software's Issues

Set up source code style enforcement in our make process

Robocup is using the following python pretty script in their makefile (https://github.com/RoboJackets/robocup-software/blob/master/makefile) to enforce their formatting guidelines during build.

# automatically format code according to our style config defined in .clang-format
pretty:
    @stylize --diffbase=master --clang_style=file --yapf_style=file --exclude_dirs $(STYLE_EXCLUDE_DIRS)

This references the .clang-format style-configs here https://github.com/RoboJackets/style-configs/blob/master/.clang-format

We want to use this same format file, so we enforce the same styleguide when making that robocup does.

Since we use catkin_make, we need to figure out where to execute this script. Possible in CMakeLists.txt somewhere?

Please ask @justbuchanan for help as needed with the style script, and @barulicm for help with catkin_make!

GPS Unhappiness

Figure out why the GPS sometimes doesn't start up correctly.

Setup Script - Qt

Currently downloads 64-bit Qt
Should download appropriate version depending on the machine

Timestamp all sensor data

Make all sensor datatypes inherit from SensorData and make sure timestamps are being filled correctly.

Controllers and Coordinator

Increase adherence to SOLID principles in MainWindow by breaking out module hookups into separate controllers that get picked by a coordinator.

  • Insert Module into inheritance hierarchy for all nodes in event graph.
  • Make graphics function with a set of Modules instead of a bunch of specific member variables.
    • Make an AdapterFactory for generating the appropriate adapter for any Module.
  • Add Controllers that can produce a complete event graph for robot control and provide the set of _Module_s to MainWindow.
  • Add play/pause/stop slots to Coordinators so as much as possible can be handled on that level instead of MainWindow.

Replace StringStream uses

StringStream is used in several places to append various types to strings. Most if not all of those should be replaced with string's + operator and the new (C++11) std::to_string method.

Make sure we respect the new 5mph speed limit

Rules sec I.4 Qualification:
"Speed: The vehicle will have to drive over a prescribed distance where its minimum and
maximum speeds will be determined. The vehicle must not drop below the minimum of one mile
per hour and not exceed the maximum speed of five miles per hour. Minimum speed of one mph
will be assessed in the fully autonomous mode and verified over a 44 foot distance between the
lanes and avoiding obstacles. No change to maximum speed control hardware is allowed after
qualification. If the vehicle completes a performance event at a speed faster than the one it
passed Qualification at, that run will not be counted."

Detect blue and red flags in images

Towards the end of the advanced course there are red and blue flags that we have to drive between. The lidar is unable to detect the flags so the camera will need to be able to find them.

Make mapping time-aware

The mapper should match sensor frames with the temporally-closest position estimate.
This will involve keeping a small backlog of position data in the mapper.
Depends on #19

tf Transform on IMU data yielding unexpected results

Applying the tf transform /imu -> /base_footprint on the IMU orientation quaternion does not produce the expected output. Grabbing Euler angles from the quaternion before and after the transformation shows the correct transformation in yaw, but leaves roll and pitch untouched.

Stereo Camera Processing

The stereo camera we use spits out two image channels : left and right. We need to do the processing to turn those two images into a depth map either through the bumblebee's library or through OpenCV.

Idan was working on this for the 2014 year. Not entirely sure how far he got. We did notice at competition this year that the right and left feeds were backwards, which may have been causing him trouble.

Fix build dependency orders related to igvc_msgs

On first build, some nodes in IGVC get built before igvc_msgs finishes, causing them to error out. Currently, all builds after the first one work fine, but we should still probably fix this.

Update Test Project

The test project hasn't been touched in a while and still has some references to the old event system that are breaking the build.

Optimize linedetector.cpp such that it can enforce line lengths in real time

Currently linedetector.cpp uses a randomized algorithm to follow a random set of pixels and make sure that they connect through a minimum number of other line pixels in order to enforce that all lines are a certain length. This was done to make processing faster, but we need this algorithm to be deterministic. We cannot occasionally miss lines in images.

RVIZ plugin - Display the status of an E-Stop topic in RVIZ

We need an Rviz plugin which shows a single icon, which displays either an E-Stop detected, or E-Stop not detected image, depending on what is published to the /robot_enabled topic.

Rviz uses the rqt/Qt framework for displaying elements on the screen. It uses message passing with Signals and Slots.

Here is a good tutorial to help get you started with Rviz Plugins.
http://docs.ros.org/jade/api/rviz_plugin_tutorials/html/panel_plugin_tutorial.html

Map Translation Math

Check & double check the math for moving an individual frame to line up with the global map.

FPS Counters

Add FPS Counters to sensor adapters so we know how often we are getting data from them.
Adapters to add FPS Counter to:
Joystick
LIDAR
Camera
GPS
IMU

FPS Counters should be located in the top right of the adapter window.

Re-calibrate Stereo Camera

The stereo camera needs to be re-calibrated so that both the left and right images are cropped the same (same scale).

Use the camera.launch file to get the raw camera images and then use the ros camera_calibration package to do the calibration and scaling by taking in the left and right raw image topics. If the calibration files are not in the .yml format convert them to it using the camera_calibration_parsers package.

http://wiki.ros.org/camera_calibration/Tutorials/StereoCalibration
http://wiki.ros.org/camera_calibration
http://wiki.ros.org/camera_calibration_parsers

Log Viewer

Make a widget that asks the user to select a log file, parses the selected log file, and displays it in all its color-coded glory to the user.
Add a menu item Logs->Viewer that launches this widget in its own window.

Simulated Sensor Controls

We need to be able to control data playback for the various simulated sensors.

Possible features:

  • Play / pause / restart
    • Individual modules
    • All simulated modules at once (ie, simulated IMU, GPS, & LIDAR can be synced)

Set up igvc_msgs as a dependency of the igvc buid

Currently, igvc cannot build as igvc_msgs is required (but not built) before the igvc target, so it does not build. To work around, run make in /build/igvc_msgs. However, ths needs to be fixed before the CI stuff will work (nicely at least).

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.