Code Monkey home page Code Monkey logo

space-ros's Introduction

space-ros's People

Contributors

ahcorde avatar asorbini avatar bckempa avatar christophebedard avatar clalancette avatar cottsay avatar dirk-thomas avatar elboberido avatar esteve avatar ezrabrooks avatar gerkey avatar hidmic avatar ivanpauno avatar ivanperez-keera avatar jacobperron avatar jacquelinekay avatar karsten1987 avatar lmayencourt avatar mabelzhang avatar miguelcompany avatar mikaelarguedas avatar mjcarroll avatar mjeronimo avatar mkhansenbot avatar nuclearsandwich avatar shonigmann avatar sloretz avatar tfoote avatar wjwwood avatar xfiderek 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  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

space-ros's Issues

Set up a requirements process

Space ROS aims to provide ROS software, including the core libraries and tools, that is usable in space-based assets, not just the ground component of missions. To this end, it must provide high quality software and related assets that can satisfy a certification or validation process such as that used by Nasa or the ESA. Part of this is having in place a requirements process and tools to support it.

Review ECCS-E-ST-40C and extract anything relevant

ECCS-E-ST-40C is the European Cooperation for Space Standardization's standard for software. This is the standard that ESA and companies such as Airbus work toward.

We should try to comply with this standard where feasible and not conflicting with NASA/DO-178C requirements, as it will make it easier for European aerospace organisations to get involved in and use Space ROS.

clang-tidy: Explicit constructors

migrate from https://github.com/osrf/sa-spaceros/issues/7 (originally by @mjeronimo)

clang-tidy complains about several occurrences of C++ constructors that could potentially be specified as 'explicit.' For example,

"'operator Duration_' must be marked explicit to avoid unintentional implicit conversions [google-explicit-constructor]"

However, often there can be good reason for them not being explict. We should evaluate each occurrence of the "google-explicit-contructor" warning in the Space ROS code (vnv list) and update the code accordingly or identify the occurrence as a false posititive.

clang-tidy: Default arguments

migrated from https://github.com/osrf/sa-spaceros/issues/9 (originally by @mjeronimo)

clang-tidy complains about several occurrences of default arguments (google-default-arguments) used on virtual or override methods, which are prohibited according to the "google-default-arguments" check. We should evaluate each occurrence of the warning in the Space ROS code vnv-list and update the code accordingly or identify the occurrence as a false posititive.

Set up a basic QMS

Space ROS is going to accumulate many processes, beginning with a requirements process. We need a tool that will allow us to:

  • Record these processes
  • Track how they change over time
  • Trace to the version of a process that was followed for a specific instance of a task, e.g. a code review

Review DO-178C and extract what we need to do

DO-178C is the central standard for avionics software that the American aerospace community uses. It likely has much useful information on how we should develop Space ROS and what artefacts we need to provide to Space ROS users.

Enumerate all sources of memory allocation in the talker/listener demos

In order to help us catalogue and address (whether that be by making sure its allocator can be overridden properly or by eliminating it for upstream ROS 2 or just Space ROS) all the sources of memory allocation in those two demos, we need to enumerate them first.

Use things like https://github.com/osrf/osrf_testing_tools_cpp#memory_tools to find all allocations and perhaps categorize them so we can reason about what needs to be done for each.

Definition of Done for this task is a list of all memory allocations for the talker and listener applications (C++) in the demo_nodes_cpp package, with optional categorization as it makes sense.

We'll use gcc and Ubuntu Linux 20.04 (maybe 22.04 @nuclearsandwich?) as that may affect what the std library will do based on its version.

Also, we could look at the call trace and check the API docs of all the system calls and std library calls made to ensure they shouldn't allocate memory in corner cases either.

clang-tidy: Use secure versions of functions

migrated from https://github.com/osrf/sa-spaceros/issues/6 (originally by @mjeronimo)

Clang-tidy detects the usage of several potentially insecure functions:

"Call to function 'memset' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'memset_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling]"
"Call to function 'snprintf' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'snprintf_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling]"
"Call to function 'strncat' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'strncat_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling]"
"Call to function 'strncpy' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'strncpy_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling]"
"Call to function 'vsnprintf' is insecure as it does not provide security checks introduced in the C11 standard. Replace with analogous functions that support length arguments or provides boundary checks such as 'vsnprintf_s' in case of C11 [clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling]"

We should address these occurrences (clang-analyzer-security.insecureAPI.DeprecatedOrUnsafeBufferHandling) in the Space ROS vnv list of packages. We can potentially us the rcutils versions of the functions.

Consolidate IKOS JUnit XML output

Currently, IKOS outputs JUnit XML for individual binaries in a build. However, we want these to be consolidated into a single report for each package (similar to other static analysis tools).

Consolidate IKOS SARIF output

IKOS natively generates SARIF output for individual executables. However, when running a scan on a project, there may be multiple executables and therefore multiple output SARIF files. These files need to be consolidated into a single output file for the project.

Update the MoveIt2 Docker build

Occasionally, updates to external repositories cause the Docker builds to break. Update the Dockerfiles for MoveIt2 and MoveIt2 Tutorials so that they build correctly.

Review static analysis tools and their coverage

Upstream ROS 2 has disabled cppcheck >= 2.0 by default due to severe performance degradation with the way it is invoked by ament_cppcheck (ament/ament_lint#345).

Before doing extra work to try and resolve the performance issues to preserve ament_cppcheck use for Space ROS, we should look at the checks cppcheck performs and determine how many are covered by our use of clang static analysis via clang-tidy, cpplint, and the rest of the ament_lint_common stack.

Once we have a comparison, we can propose either dropping cppcheck or investing time into investigating its performance issues.

Consolidate IKOS SARIF output

Currently, IKOS outputs SARIF output for individual binaries in a build. However, we want these to be consolidated into a single report for each package (similar to other static analysis tools).

Update the Space ROS Docker build

Occasionally, updates to external repositories cause the Docker builds to break. Update the Dockerfiles for Space ROSso that they it builds correctly.

Consolidate SARIF output files

To create the input for the local dashboard (which will be use Mozaik), consolidate the separate SARIF files generated from the static analyzers into a single SARIF file.

The script to do the consolidation can be done in Python and integrated into a post-build step so that the single SARIF file is ready for ingestion by the dashboard display code.

Port Space ROS CI builds to Ubuntu Jammy

Space ROS CI builds have been initially configured on Ubuntu Focal but Ubuntu Jammy is the primary target platform.

Build configuration issues have also arisen for the Space ROS and IKOS builds which need to be addressed.

Review FRET and figure out how to integrate it and Doorstop

FRET is a tool developed by NASA for the production of formally-verifiable requirements. There is great interest in using it for Space ROS due to its ability to check that requirements are correct - something that is useful when non-requirements-experts are going to be producing requirements.

We need to learn how to use it and perform an evaluation of its usefulness.

We need to determine if it is suitable for all of our requirements needs, or should be used in conjunction with another tool such as Doorstop. If it needs to be used in conjunction with another tool, then we need to figure out how to integrate the tools.

Improvements to build the Space ROS website

  • Use the ruby gem tool, html-proofer
  • Integrate and test the 'non-blog-content' branch
  • Fix the relative link processing for the bg-photo items
  • Add some code for separate video windows and adjust to a carousel at the cross-over point

clang-tidy: Virtual dispatch

migrated from https://github.com/osrf/sa-spaceros/issues/8 (originally by @mjeronimo)

clang-tidy identifies several occurrences of bypassing virtual dispatch during object construction and destruction. For example,

"<symbol>” during construction bypasses virtual dispatch [clang-analyzer-optin.cplusplus.VirtualCall]"
"<symbol>” during destruction bypasses virtual dispatch [clang-analyzer-optin.cplusplus.VirtualCall]"

We should evaluate these occurrences in the Space ROS source code (vnv list) to fix or identify as a false positive.

Not all static analyzers are run for all packages

If I'm not mistaken (which is quite possible, new to ROS2), the only tests run for a package under colcon test are ones that are listed in that package's package.xml within <test_depend>package_name</test_depend> tags. Some ROS2 packages (take rcutils for example) test_depend on ament_lint_common, which in turn depend on all of our static analyzers (ament_clang_tidy, ament_copyright, ament_cobra, ament_cppcheck, etc). However, other packages (take tf2 for example) only depend on a subset of these analyzers, so they are not all run.

I'm not sure what the best way to resolve this is. There are two things I can think of:

  1. If the only place to indicate test dependencies is in a packages package.xml (which I believe is the case, but again could be wrong), insert <test_depend> tags during docker build, or when another common command is triggered (colcon build, colcon test, entrypoint.sh for the docker image, or maybe an explicit command run by the user).
  2. Upstream the <test_depend> to all of the ROS packages we want to run our static analysis tools on, either to the main ROS2 branches, or to spaceros branches.

Option 1 feels wrong to me, and option 2 feels overbearing.

Integrate PCLP2.0

  • Generate instructions for PCLP2.0 installation
  • Run PCLP2.0 with the AutoSAR C++14 ruleset
  • Integrate PCLP 2.0 into Ament_lint to run AutoSAR C++ 14
  • Run ament_pclint into core packages for SpaceRos
  • Generate a summary report of the issues found.
  • Generate Sarif output from PCLP2.0

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.