The purposes of the various folders and files:
dockerfiles/
: various dockerfiles for different buildsex1/
: files pertaining to the example ROS1 vs. ROS2 code from the PDF, including launch files- note: as a test, this is referred to as test1 since it is example 1
inputs/
: various.json
files containing inputs to the synthesis, as well as the expected answers forlaunch/
: other launch files, for trying to run the turtlebot2_demoros2sy/
: ROS1-to-ROS2 synthesis files, written in Javasrc/
: Java source fileslib/
: various.jar
files that are dependencies of theros2sy
packageresources/log4j2.xml
: configuration file for Apache'slog4j
Java logging package
rviz-diff/
: script for comparing ROS1 vs. ROS2 versions of packagessrc/
: outputted diffs for files judged to be the same, specifically for the rviz package
scrape_rclcpp_docs/
: scrapes the latest ROS2 docs for the APIs and then writes all of the information about the APIs to.json
files.dockerignore
: patterns that match files and directories that we don't want to be copied/added to a built imagebuild.xml
: Javaant
build filemy-bash*
: various basic.bashrc
and.bash_profile
files for sourcing different kinds of installations of ROS.ros1-to-ros2-code-spec.json
: a specification of how ROS types and some functions have changedros1-to-ros2-pack-spec.json
: a specification of how ROS core packages' names and organization changedsudoers.txt
: file that specifies some permissions information for the user you enter a docker image as, called "docker."
ros2sy
is a Java package created to run ROS1 to ROS2 refactoring by
using synthesis.
This package targets Java 7.
ros2sy
can either be developed as an Eclipse or an IntelliJ Idea project. On some machines, one of the IDEs may be faster at compiling than the other.
This package is built using Apache Ant, and has been shown to build with version 1.9.
For just a build, run ant jar
which will create the build/
directory, and the resulting .jar
file can be found at build/jar/ros2sy.jar
.
Run the whole program with ant run
or just ant
.
For information on more that needs to be done, please see the Github issue tracker for this repo.
This has been tested on Mac OS X 10.12.6 running Docker Desktop 2.0.0.3, with Docker Engine version 18.09.2.
All Dockerfiles are now located in dockerfiles/
. Here are the important ones:
Dockerfile-bin-melodic
: comes with full ROS1 melodic installation, installs ROS2 Bouncy and turtlebot2_demo from binariesDockerfile-ros1-base
: full desktop melodic installation, also installs ROS developer and package creation/build toolsDockerfile-ros2-base
: bouncy desktop install, and ROS developer/build dependenciesDockerfile-vnc-melodic
: same asDockerfile-bin-melodic
, but enables X forwardingtest1-ros1
: takes the image you built fromDockerfile-ros1
(assumes you've called it<username>/ros1-base
), and creates a package called test1 that will do the ROS1 version ofDockerfile-x-dev-melodic
- when you run this image, it automatically launches the test1 package
test1-ros2
: creates image based on the image built byDockerfile-ros2-base
, assumes you've called it<username>/ros2-base
- creates and builds package, test launches immediately when the image is run
test1-ros2-generated
: creates image almost identical totest1-ros2
except that it uses the sketch of your choice- requires the build args
USERNAME
andSKETCH
to be defined SKETCH
should be a path relative to the build context
- requires the build args
docker build -t <username>/<image-name>:<version> -f dockerfiles/<dockerfile-name> .
For the test1-ros1
and test1-ros2
Dockerfiles, an extra command line
argument of --build-arg USERNAME=<insert-username-here>
is needed.
This ensures that it references the correct image built from Dockerfile-ros1-base
or Dockerfile-ros2-base
, respectively.
For the most part, the names are arbitrary, though it is recommended
that the image name at least in part reflects the Dockerfile it came from. There
are only two instances in which the naming isn't arbitrary, which were detailed in
the dockerfile section. For the most part, the built image
should have the same name as the Dockerfile file name, minus the Dockerfile
part.
The version is entirely optional. I just include it so that if I have a working docker image and I'm making potentially breaking changes, I can just increase the version number so it won't affect the currently "working" docker image. Be warned that this can eat up the storage available to the Docker.
If you need to run the resulting image in one terminal, you can use
docker run -t -i <username>/<name-of-image>:<version>
The naming of the image needs to be made more consistent later, as mentioned earlier.
If multiple terminals are needed, as is the case especially for running something using the ROS1 bridge or any other use case involving a server, first start the image in the background with
$ docker run -d -it <username>/ros2turtle:<version>
<container id>
$
This should output a <container id>
as in the above, but if it doesn't,
then you can run docker ps
to find the container id. Then in each new
terminal window, you should be able to do the following.
$ docker exec -it <container id> bash
docker@<container id>:~/ros2_ws$
which shows you an interactive terminal to the container.
When you enter the container, your working directory is automatically the root directory.
No matter how you ran the image, you should be able to exit it with
docker@<container id>$ exit
$
It may be necessary to kill the container, since it is running in the background.
If docker ps
shows that the container <container id>
is still running, use
docker kill <container id>
which will make it exit with status 137.