This repository contains the ros workspace to emulate usage of ROSDiscover
, a static analysis tool that builds upon ROS 1's core API and ACME style rule checking to detect architectural bugs
in two C++ ROS 1 packages that builds upon various topics and messages commonly used in mobile manipulator projects. ROSDiscover
depends upon ROSWire packaged to read and interact with ROS Systems packaged as a Docker image Script used for this experiment can be found here csc7135_rosdiscover_exp. A copy of ROSDiscover
paper and our report writeup is available in the report_papers
directory. References to some useful commands are compiled in the COMMANDS.md
file
The two test packages and key results from this report are shown below
- Ubuntu 20.04 and ROS Noetic full desktop
- Computer with Ryzen 5600X with 16Gb RAM
- Install
pipenv
if you don't have it yet
-
cd ~/Documents
and git clone rosdiscover -
cd into
rosdiscover
and then git cloneroswire
-
cd back ino
rosdiscover
and activate the shell withpipenv shell
-
Install
rosdiscover
withpip install -e .
. This may cause failure withroswire
. -
Now cd into
roswire
and install itpip install roswire
-
cd back to
rosdiscover
and test installation withrosdiscover --help
-
Intall the following dependencies in the host machine
- Docker for Ubuntu and optionally complete post-installation steps
- Catkin build tools:
https://catkin-tools.readthedocs.io/en/latest/installing.html
- Java:
sudo apt install default-jre
Section 4 in the report details the experiment and dataset used. A brief summary of the two packages are as follows:
-
Pkg 1 Subscription to wrong data type:
FetchSensor
means to send IMU data but erroneous sends wrong data format. This causes causes a run-time crash. -
Pkg 2 Danling connectors: The idea is, an user defines an object to be manupulated.
FetchRobotController
receives image data and object detection data but does not sendACK
to theFetchSensor
. Thus,FetchSensor
keeps repeating the same data over and over again.
Before setting up the experiment, git clone csc7135_rosdiscover_exp into the /Documents
directory
- cd into csc7135_project
cd ~
- git clone this repository:
git clone https://github.com/Mechazo11/csc7135_proj_sp24
- cd into the directory:
cd /csc7135_proj_sp24
- Initialize workspace:
catkin init
- Run the convenience script to build and source the two test packages:
./build_source_pkgs.sh
- Now build the Docker image:
sudo docker image build -t csc7135_proj .
- Verify
csc7135_proj
image exsists:sudo docker image ls
-
Move into the
csc7135_rosdiscover_exp/scripts
directory:cd ~/Documents/csc7135_rosdiscover_exp/scripts
-
Activate pipenv from ROSDiscover that you installed previously. An example command: ```. /home/az/.local/share/virtualenvs/rosdiscover-2-DhvFio/bin/activate`` `
-
Step 1: Derive groundtruth architecture:
python3 observe-system.py pkg1
-
Step 2: Check the architecture against ACME rules:
python3 check-architecture.py observed pkg1
- Step 1: Derive groundtruth architecture:
python3 observe-system.py pkg2
- Step 2: Check the architecture against ACME rules:
python3 check-architecture.py observed pkg2
-
We could not get the
rosdiscover-cxx-recover
to compile and run. Hence Steps from RQ2 in the ROSDiscover paper, as described inREADME_ROSDISCOVER.rst
file in csc7135_rosdiscover_exp does to not work. -
Thus, the experimental results only uses dynamic approach in recovering run time architecture which may have some limitations.
-
If you are able to solve the
rosdiscover-cxx-recover
issue, please open apull-request
.
-
Replication package
-
Create ROS 1 C++ packages with catkin tools
-
Create launch file within the package
-
C++ ROS node design notes
-
ROS Services
-
An example of a ROS C++ package conforming to LARICS C++ standard
-
Publisher and subscriber in one cpp class
-
Using Class Methods as callbacks
-
Usefulness of Docker
-
Remapping topic names in ROS 1