questions on ROS2 foxy source code
1) With the instructions on "Building ROS 2 on Windows", executing "colcon build --merge-install" tooks about one hour on my desktop. Occasionally, I saw the warning messages showing up like this:
[270.259s] colcon.colcon_cmake.task.cmake.build WARNING Could not run installation step for package 'tlsf' because it has no 'install' target
[391.952s] colcon.colcon_cmake.task.cmake.build WARNING Could not run installation step for package 'rttest' because it has no 'install' target
--- stderr: rosidl_typesupport_connext_cpp
CMake Warning at CMakeLists.txt:32 (message):
Could not find RTI Connext - skipping 'rosidl_typesupport_connext_cpp'
--- stderr: rmw_connext_shared_cpp
CMake Warning at CMakeLists.txt:22 (message):
Could not find RTI Connext - skipping 'rmw_connext_shared_cpp'
--- stderr: rosidl_typesupport_connext_c
CMake Warning at CMakeLists.txt:37 (message):
Could not find RTI Connext - skipping 'rosidl_typesupport_connext_c'
--- stderr: rmw_connext_cpp
CMake Warning at CMakeLists.txt:32 (message):
Could not find RTI Connext - skipping 'rmw_connext_cpp'
[2006.735s] colcon.colcon_cmake.task.cmake.build WARNING Could not run installation step for package 'tlsf_cpp' because it has no 'install' target
[2851.735s] colcon.colcon_ros.task.ament_python.build WARNING Package 'test_launch_ros' doesn't explicitly install a marker in the package index (colcon-ros currently does it implicitly but that fallback will be removed in the future)
[2900.816s] colcon.colcon_cmake.task.cmake.build WARNING Could not run installation step for package 'pendulum_control' because it has no 'install' target
--- stderr: ros1_bridge
CMake Warning at CMakeLists.txt:26 (message):
Failed to find PkgConfig, skipping...
Are these warning messages safe to be ignored? Or, is it worth of fixing by a beginner like me?
2) At the end of the instructions on "Building ROS 2 on Windows", there is a section of "Staying up to date" where it points us to the instructions of "Maintaining a source checkout of ROS 2". I need some clarifications on how to properly refresh ROS2 foxy source code.
Am I right to say that https://raw.githubusercontent.com/ros2/ros2/foxy/ros2.repos will always remain unchanged? In order to refresh, one must first obtain https://raw.githubusercontent.com/ros2/ros2/release-latest/ros2.repos or https://raw.githubusercontent.com/ros2/ros2/master/ros2.repos and then execute "vcs import --input ros2.repos src" to update the source code. What vcs does is that it will overwrite existing files with newer versions. Correct?
What is the difference between the latest release and the master branch? Is it that the former is stable but the latter is unstable? Is it that the former is slightly behind the latter? How frequently should I refresh the source code? On a daily basis, or, on a weekly basis?
Every time I want to refresh, I just repeat the three commands: 1) use curl to obtain ros2.repos; 2) use "vcs import --input ros2.repos" to update the source code; 3) use "colcon build --merge-install" to rebuild. Correct?
3) Is it better for me to maintain two separate bases of the source code in my local hard drive, one is foxy/ros2.repos + updates from the latest release and the other is foxy/ros2.repos + updates from the mater branch?
Asked by Weidong Chen on 2020-08-12 12:59:01 UTC
Answers
1) As far as I know, you can ignore those build warnings.
The messages about RTI Connext are because you probably don't have that particular DDS implementation installed (which is okay, unless you explicitly wanted to use it).
I wouldn't expect ros1_bridge
to build unless you had a ROS 1 installation available. This is okay unless you plan to bridge your ROS 2 application with an existing ROS 1 application.
The other warnings related to "no install target" are expected for some packages on Windows and macOS. Unfortunately, it's a bit ugly, but nothing to worry about.
2) All of the repos files (and the code they point to) are subject to change at different frequencies.
If you want the latest released versions for Foxy, you should use the Foxy release repos file. This contains tagged versions for each package that will update with each Foxy patch release. Since patch releases occur roughly once a month, you can also update around the same frequency to get bug fixes. I would recommend this option for stability.
If you want the latest development changes for Foxy (ie. unreleased changes), you can use the Foxy repos file containing branch names as versions. The development branches will change more frequently (e.g. weekly), but unless you really want a fix that was recently merged you probably don't need to use this repos file.
If you want the latest development changes for the upcoming release (e.g. Galactic), you can use the default repos file. This is changing daily, and I wouldn't recommend this option if you care about stability. This option is really only if you are contributing to the upcoming ROS 2 release.
Do not use the "release-latest" repos file. It is no longer used and the documentation is outdated. I've opened a PR to update the documentation: https://github.com/ros2/ros2_documentation/pull/850
To actually update the code in your workspace, there are four steps:
- Get the repos file (e.g. with curl)
- Checkout the versions listed in the repos file (i.e. vcs import)
- If you are checking out development branches (not release tags), then you should also pull the latest changes for those branches (i.e. vcs pull)
- Build (i.e. colcon build)
3) For beginners, I don't think you need to maintain multiple source installations.
This is really only necessary if you want to develop for multiple release versions of ROS. E.g. If you wanted to check that your code compiles against both Eloquent and Foxy, then you could maintain a source installation for Eloquent and another for Foxy. But even in this example, I would recommend installing the pre-built binaries for each ROS version which seems more time-efficient versus building from source in my opinion.
Asked by jacobperron on 2020-08-19 12:17:18 UTC
Comments