1. System requirements
In the official Foxy target system, Ubuntu Linux - Focal Fossa (20.04) 64 bit is the first choice. In this paper, Ubuntu 20.04 64 bit is also selected, and Debian Linux - Buster (10), Fedora 32, Arch Linux, OpenEmbedded / webOS OSE are also included. However, Foxy has not been fully tested and is not recommended.
2. System settings
(1) Set locale
(2) Add ROS 2 apt warehouse
(3) Install development tools and ROS tools
sudo apt update && sudo apt install -y \ build-essential \ cmake \ git \ libbullet-dev \ python3-colcon-common-extensions \ python3-flake8 \ python3-pip \ python3-pytest-cov \ python3-rosdep \ python3-setuptools \ python3-vcstool \ wget # install some pip packages needed for testing python3 -m pip install -U \ argcomplete \ flake8-blind-except \ flake8-builtins \ flake8-class-newline \ flake8-comprehensions \ flake8-deprecated \ flake8-docstrings \ flake8-import-order \ flake8-quotes \ pytest-repeat \ pytest-rerunfailures \ pytest # install Fast-RTPS dependencies sudo apt install --no-install-recommends -y \ libasio-dev \ libtinyxml2-dev # install Cyclone DDS dependencies sudo apt install --no-install-recommends -y \ libcunit1-dev
3. Get ROS 2 code
mkdir -p ~/ros2_foxy/src cd ~/ros2_foxy wget https://raw.githubusercontent.com/ros2/ros2/foxy/ros2.repos vcs import src < ros2.repos
If fast DDS cannot be downloaded normally, download and unzip to ~ / ros2 by yourself_ foxy/src/eProsima/Fast-DDS.
4. Use rosdep to install dependency
sudo rosdep init rosdep update rosdep install --from-paths src --ignore-src --rosdistro foxy -y --skip-keys "console_bridge fastcdr fastrtps rti-connext-dds-5.3.1 urdfdom_headers"
5. Compile ROS 2
cd ~/ros2_foxy/ colcon build --symlink-install
ExternalProject_Add(ext-singleproducerconsumer PREFIX singleproducerconsumer #DOWNLOAD_DIR ${CMAKE_CURRENT_BINARY_DIR}/download #URL https://github.com/cameron314/readerwriterqueue/archive/ef7dfbf553288064347d51b8ac335f1ca489032a.zip #Self modification `path-to-file', zip See attachment for documents readerwriterqueue-ef7dfbf553288064347d51b8ac335f1ca489032a.zip URL /path-to-file/readerwriterqueue-ef7dfbf553288064347d51b8ac335f1ca489032a.zip URL_MD5 64c673dd381b8fae9254053ad7b2be4d #TIMEOUT 60 INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR} CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND "" ) # Concurrent and blocking concurrent queue by moodycamel - header only, don't build, install ExternalProject_Add(ext-concurrentqueue PREFIX concurrentqueue #DOWNLOAD_DIR ${CMAKE_CURRENT_BINARY_DIR}/download #URL https://github.com/cameron314/concurrentqueue/archive/8f65a8734d77c3cc00d74c0532efca872931d3ce.zip # Self modification `path-to-file', zip See attachment for documents concurrentqueue-8f65a8734d77c3cc00d74c0532efca872931d3ce.zip URL /path-to-file/concurrentqueue-8f65a8734d77c3cc00d74c0532efca872931d3ce.zip URL_MD5 71a0d932cc89150c2ade85f0d9cac9dc #TIMEOUT 60 INSTALL_DIR ${CMAKE_CURRENT_BINARY_DIR} CONFIGURE_COMMAND "" BUILD_COMMAND "" INSTALL_COMMAND "" )
(2) ~/ros2_foxy/src/ros2/rviz/rviz_ogre_vendor/CMakeLists.txt 83-94 That's ok
ExternalProject_Add(zlib-1.2.11 #URL https://www.zlib.net/fossils/zlib-1.2.11.tar.gz #Self modification `path-to-file', zip See attachment for documents zlib-1.2.11.tar.gz URL /path-to-file/zlib-1.2.11.tar.gz URL_MD5 1c9f62f0778697a09d36121ead88e08e #TIMEOUT 600 LOG_CONFIGURE ${should_log} LOG_BUILD ${should_log} CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/zlib-install ${extra_cmake_args} -Wno-dev )
ExternalProject_Add(ogre-v1.12.1 # URL https://github.com/OGRECave/ogre/archive/v1.12.1.zip #Self modification `path-to-file', zip See attachment for documents external_projects/ogre-1.12.1.zip URL /path-to-file/ogre-1.12.1.zip URL_MD5 cdbea4006d223c173e0a93864111b936 # TIMEOUT 1200 LOG_CONFIGURE ${should_log} LOG_BUILD ${should_log} CMAKE_ARGS -DOGRE_STATIC:BOOL=OFF -DOGRE_DEPENDENCIES_DIR=${CMAKE_CURRENT_BINARY_DIR}/ogredeps -DOGRE_INSTALL_PDB:BOOL=OFF -DOGRE_BUILD_DEPENDENCIES:BOOL=OFF -DOGRE_BUILD_TESTS:BOOL=OFF -DOGRE_BUILD_SAMPLES:BOOL=FALSE -DOGRE_INSTALL_SAMPLES:BOOL=FALSE -DOGRE_INSTALL_SAMPLES_SOURCE:BOOL=FALSE -DOGRE_CONFIG_THREADS:STRING=0 -DOGRE_RESOURCEMANAGER_STRICT:STRING=2 -DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/ogre_install -DOGRE_BUILD_LIBS_AS_FRAMEWORKS:BOOL=OFF -DOGRE_BUILD_COMPONENT_PYTHON:BOOL=FALSE -DOGRE_BUILD_COMPONENT_JAVA:BOOL=FALSE -DOGRE_BUILD_COMPONENT_CSHARP:BOOL=FALSE -DOGRE_BUILD_COMPONENT_BITES:BOOL=FALSE ${extra_cmake_args} -Wno-dev PATCH_COMMAND ${Patch_EXECUTABLE} -p1 -N < ${CMAKE_CURRENT_SOURCE_DIR}/pragma-patch.diff COMMAND ${CMAKE_COMMAND} -E copy ${CMAKE_CURRENT_SOURCE_DIR}/FindFreetype.cmake ${CMAKE_CURRENT_BINARY_DIR}/ogre-v1.12.1-prefix/src/ogre-v1.12.1/CMake/Packages/FindFreetype.cmake )
(3) ~/ros2_foxy/src/eProsima/foonathan_memory_vendor/CMakeLists.txt,57-73 That's ok
externalproject_add(foo_mem-ext #GIT_REPOSITORY foonathan/memory #GIT_TAG c619113 #TIMEOUT 600 #Self modification `path-to-file', zip See attachment for documents memory-master.zip URL /path-to-file/memory-master.zip URL_MD5 9fcf2cf8c63d9c74bf3d0c58ca98bf71 # Avoid the update (git pull) and so the recompilation of foonathan_memory library each time. UPDATE_COMMAND "" CMAKE_ARGS -DFOONATHAN_MEMORY_BUILD_EXAMPLES=OFF -DFOONATHAN_MEMORY_BUILD_TESTS=OFF -DFOONATHAN_MEMORY_BUILD_TOOLS=ON -DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/foo_mem_ext_prj_install ${extra_cmake_args} -Wno-dev ${PATCH_COMMAND_STR} )
(4) ~/ros2_foxy/src/ros2/rosbag2/zstd_vendor/CMakeLists.txt,32-43 That's ok
ExternalProject_Add(zstd-1.4.4 #URL https://github.com/facebook/zstd/archive/v1.4.4.zip #Self modification `path-to-file', zip See attachment for documents zstd-1.4.4.zip URL /path-to-file/zstd-1.4.4.zip URL_MD5 3a5c3a535280b7f4dfdbd739fcc7173f #TIMEOUT 60 SOURCE_SUBDIR build/cmake CMAKE_ARGS -DCMAKE_INSTALL_PREFIX=${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}_install -DZSTD_BUILD_STATIC=OFF -DZSTD_BUILD_SHARED=ON -DZSTD_BUILD_PROGRAMS=OFF ${extra_cmake_args})
6. Environment setting
source ~/ros2_foxy/install/setup.bash
7. Testing
ros2 run demo_nodes_cpp talker
Open another terminal and run the listener written in Python:
ros2 run demo_nodes_py listener
Operation result:
8. Attachments
reference resources
[1] Building ROS 2 on Linux, https://index.ros.org/doc/ros2/Installation/Foxy/Linux-Development-Setup/
[2] Solution to the connection error of rosdep init or rosdep update https://community.bwbot.org/topic/811/rosdep-init-%E6%88%96%E8%80%85rosdep-update-%E8%BF%9E%E6%8E%A5%E9%94%99%E8%AF%AF%E7%9A%84%E8%A7%A3%E5%86%B3%E5%8A%9E%E6%B3%95
[3] No module named catkin_pkg.package, https://www.jianshu.com/p/e964928d6c62
[4] Error in ROS custom message im portError:Nomodulenamedem_ wawayu_ Column for 0 - CSDN blog https://blog.csdn.net/wawayu_0/article/details/79460043
[5] Name conflict in load grammar · Issue #361 · lark-parser/lark, https://github.com/lark-parser/lark/issues/361
[6] rosbag2 build getting fail · Issue #604 · ros2/ros2, https://github.com/ros2/ros2/issues/604