【ROS2】Ubuntu 24.04 源码编译安装 Jazzy Jalisco

3a63d2cd860a30aed6e8a09aaaba74fd.png

5ce9afce804abfd97372bb6a335ba352.png

目录

  •  系统要求

  •  系统设置

    •  设置区域

    • 启用所需的存储库

    • 安装开发工具

  •  构建 ROS 2

    • 获取 ROS 2 代码

    • 使用 rosdep 安装依赖项

    • 安装额外的 RMW 实现(可选)

    • 在工作区构建代码

  •  设置环境

  •  尝试一些例子

  •  下一步

  •  备用编译器

    •  Clang

  • 保持最新状态

  •  故障排除

  •  卸载


系统要求

当前基于 Debian 的 Jazzy Jalisco 目标平台是:

  • 一级:Ubuntu Linux - Noble (24.04) 64 位

  • 三级:Ubuntu Linux - Jammy (22.04) 64 位

  • 第三层:Debian Linux - Bookworm(12)64 位

根据 REP 2000 定义。

 系统设置

 设置区域

请确保您有一个支持 UTF-8 的区域设置。如果您处于最小化环境中(例如 docker 容器),区域设置可能是像 POSIX 这样的最小化设置。我们使用以下设置进行测试。不过,如果您使用的是不同的 UTF-8 支持区域设置,也应该没问题。

locale  # check for UTF-8


sudo apt update && sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8


locale  # verify settings
cxy@ubuntu2404-cxy:~$ locale
LANG=zh_CN.UTF-8
LANGUAGE=zh_CN:en
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8

启用所需的存储库

您需要将 ROS 2 apt 仓库添加到您的系统中。

首先确保启用了 Ubuntu Universe 仓库。

sudo apt install software-properties-common
sudo add-apt-repository universe
cxy@ubuntu2404-cxy:~$ sudo apt install software-properties-common
sudo add-apt-repository universe
正在读取软件包列表... 完成
正在分析软件包的依赖关系树... 完成
正在读取状态信息... 完成                 
software-properties-common 已经是最新版 (0.99.48)。
升级了 0 个软件包,新安装了 0 个软件包,要卸载 0 个软件包,有 0 个软件包未被升级。
正在添加组件‘universe’到所有软件源。
按 [ENTER] 继续,或按 Ctrl-c 取消。
命中:1 https://mirrors.tuna.tsinghua.edu.cn/ubuntu noble-security InRelease
命中:2 https://packages.microsoft.com/repos/edge stable InRelease
命中:3 http://security.ubuntu.com/ubuntu noble-security InRelease
命中:4 http://archive.ubuntu.com/ubuntu noble InRelease
命中:5 http://archive.ubuntu.com/ubuntu noble-updates InRelease
正在读取软件包列表... 完成

现在使用 apt 添加 ROS 2 GPG 密钥。

sudo apt update && sudo apt install curl -y
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg

然后将该存储库添加到您的源列表中。

echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(. /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

安装开发工具

sudo apt update && sudo apt install -y \
  python3-flake8-blind-except \
  python3-flake8-class-newline \
  python3-flake8-deprecated \
  python3-mypy \
  python3-pip \
  python3-pytest \
  python3-pytest-cov \
  python3-pytest-mock \
  python3-pytest-repeat \
  python3-pytest-rerunfailures \
  python3-pytest-runner \
  python3-pytest-timeout \
  ros-dev-tools

构建 ROS 2

获取 ROS 2 代码

创建一个工作区并克隆所有仓库:

mkdir -p ~/ros2_jazzy/src   #目录 admin:///home/cxy/ros2_jazzy/src
cd ~/ros2_jazzy
vcs import --input https://raw.githubusercontent.com/ros2/ros2/jazzy/ros2.repos src
cxy@ubuntu2404-cxy:~/ros2_jazzy$ vcs import --input https://raw.githubusercontent.com/ros2/ros2/jazzy/ros2.repos src
/usr/bin/vcs:6: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html
  from pkg_resources import load_entry_point
...........E....................................................................E..........................
=== src/ament/ament_cmake (git) ===
正克隆到 '.'...
=== src/ament/ament_index (git) ===
正克隆到 '.'...
=== src/ament/ament_lint (git) ===
正克隆到 '.'...
=== src/ament/ament_package (git) ===
正克隆到 '.'...
=== src/ament/google_benchmark_vendor (git) ===
正克隆到 '.'...
=== src/ament/googletest (git) ===
正克隆到 '.'...
=== src/ament/uncrustify_vendor (git) ===
正克隆到 '.'...
=== src/eProsima/Fast-CDR (git) ===
正克隆到 '.'...
=== src/eProsima/Fast-DDS (git) ===
正克隆到 '.'...
注意:正在切换到 'c2a4523a21a94302298bc995057719546b72df2d'。


您正处于分离头指针状态。您可以查看、做试验性的修改及提交,并且您可以在切换
回一个分支时,丢弃在此状态下所做的提交而不对分支造成影响。


如果您想要通过创建分支来保留在此状态下所做的提交,您可以通过在 switch 命令
中添加参数 -c 来实现(现在或稍后)。例如:


  git switch -c <新分支名>


或者撤销此操作:


  git switch -


通过将配置变量 advice.detachedHead 设置为 false 来关闭此建议


HEAD 目前位于 c2a4523a2 Implement copy_from_topic_qos method (#4719)
=== src/eProsima/foonathan_memory_vendor (git) ===
正克隆到 '.'...
=== src/eclipse-cyclonedds/cyclonedds (git) ===
正克隆到 '.'...
=== src/eclipse-iceoryx/iceoryx (git) ===
正克隆到 '.'...
=== src/gazebo-release/gz_cmake_vendor (git) ===
正克隆到 '.'...
=== src/gazebo-release/gz_math_vendor (git) ===
Could not determine ref type of version: fatal: 无法访问 'https://github.com/gazebo-release/gz_math_vendor.git/':gnutls_handshake() failed: The TLS connection was non-properly terminated.
=== src/gazebo-release/gz_utils_vendor (git) ===
正克隆到 '.'...
=== src/osrf/osrf_pycommon (git) ===
正克隆到 '.'...
=== src/osrf/osrf_testing_tools_cpp (git) ===
正克隆到 '.'...
=== src/ros-perception/image_common (git) ===
正克隆到 '.'...
=== src/ros-perception/laser_geometry (git) ===
正克隆到 '.'...
=== src/ros-perception/point_cloud_transport (git) ===
正克隆到 '.'...
=== src/ros-planning/navigation_msgs (git) ===
正克隆到 '.'...
=== src/ros-tooling/keyboard_handler (git) ===
正克隆到 '.'...
=== src/ros-tooling/libstatistics_collector (git) ===
正克隆到 '.'...
=== src/ros-visualization/interactive_markers (git) ===
正克隆到 '.'...
=== src/ros-visualization/python_qt_binding (git) ===
正克隆到 '.'...
=== src/ros-visualization/qt_gui_core (git) ===
正克隆到 '.'...
=== src/ros-visualization/rqt (git) ===
正克隆到 '.'...
=== src/ros-visualization/rqt_action (git) ===
正克隆到 '.'...
=== src/ros-visualization/rqt_bag (git) ===
正克隆到 '.'...
=== src/ros-visualization/rqt_console (git) ===
正克隆到 '.'...
=== src/ros-visualization/rqt_graph (git) ===
正克隆到 '.'...
=== src/ros-visualization/rqt_msg (git) ===
正克隆到 '.'...
=== src/ros-visualization/rqt_plot (git) ===
正克隆到 '.'...
=== src/ros-visualization/rqt_publisher (git) ===
正克隆到 '.'...
=== src/ros-visualization/rqt_py_console (git) ===
正克隆到 '.'...
=== src/ros-visualization/rqt_reconfigure (git) ===
正克隆到 '.'...
=== src/ros-visualization/rqt_service_caller (git) ===
正克隆到 '.'...
=== src/ros-visualization/rqt_shell (git) ===
正克隆到 '.'...
=== src/ros-visualization/rqt_srv (git) ===
正克隆到 '.'...
=== src/ros-visualization/rqt_topic (git) ===
正克隆到 '.'...
=== src/ros-visualization/tango_icons_vendor (git) ===
正克隆到 '.'...
=== src/ros/class_loader (git) ===
正克隆到 '.'...
=== src/ros/kdl_parser (git) ===
正克隆到 '.'...
=== src/ros/pluginlib (git) ===
正克隆到 '.'...
=== src/ros/resource_retriever (git) ===
正克隆到 '.'...
=== src/ros/robot_state_publisher (git) ===
正克隆到 '.'...
=== src/ros/ros_environment (git) ===
正克隆到 '.'...
=== src/ros/ros_tutorials (git) ===
正克隆到 '.'...
=== src/ros/urdfdom (git) ===
正克隆到 '.'...
=== src/ros/urdfdom_headers (git) ===
正克隆到 '.'...
=== src/ros2/ament_cmake_ros (git) ===
正克隆到 '.'...
=== src/ros2/common_interfaces (git) ===
正克隆到 '.'...
=== src/ros2/console_bridge_vendor (git) ===
正克隆到 '.'...
=== src/ros2/demos (git) ===
正克隆到 '.'...
=== src/ros2/eigen3_cmake_module (git) ===
正克隆到 '.'...
=== src/ros2/example_interfaces (git) ===
正克隆到 '.'...
=== src/ros2/examples (git) ===
正克隆到 '.'...
=== src/ros2/geometry2 (git) ===
正克隆到 '.'...
=== src/ros2/launch (git) ===
正克隆到 '.'...
=== src/ros2/launch_ros (git) ===
正克隆到 '.'...
=== src/ros2/libyaml_vendor (git) ===
正克隆到 '.'...
=== src/ros2/message_filters (git) ===
正克隆到 '.'...
=== src/ros2/mimick_vendor (git) ===
正克隆到 '.'...
=== src/ros2/orocos_kdl_vendor (git) ===
正克隆到 '.'...
=== src/ros2/performance_test_fixture (git) ===
正克隆到 '.'...
=== src/ros2/pybind11_vendor (git) ===
正克隆到 '.'...
=== src/ros2/python_cmake_module (git) ===
正克隆到 '.'...
=== src/ros2/rcl (git) ===
正克隆到 '.'...
=== src/ros2/rcl_interfaces (git) ===
正克隆到 '.'...
=== src/ros2/rcl_logging (git) ===
正克隆到 '.'...
=== src/ros2/rclcpp (git) ===
正克隆到 '.'...
=== src/ros2/rclpy (git) ===
正克隆到 '.'...
=== src/ros2/rcpputils (git) ===
正克隆到 '.'...
=== src/ros2/rcutils (git) ===
正克隆到 '.'...
=== src/ros2/realtime_support (git) ===
正克隆到 '.'...
=== src/ros2/rmw (git) ===
正克隆到 '.'...
=== src/ros2/rmw_connextdds (git) ===
正克隆到 '.'...
=== src/ros2/rmw_cyclonedds (git) ===
正克隆到 '.'...
=== src/ros2/rmw_dds_common (git) ===
正克隆到 '.'...
=== src/ros2/rmw_fastrtps (git) ===
正克隆到 '.'...
=== src/ros2/rmw_implementation (git) ===
Could not determine ref type of version: fatal: 无法访问 'https://github.com/ros2/rmw_implementation.git/':gnutls_handshake() failed: The TLS connection was non-properly terminated.
=== src/ros2/ros2_tracing (git) ===
正克隆到 '.'...
=== src/ros2/ros2cli (git) ===
正克隆到 '.'...
=== src/ros2/ros2cli_common_extensions (git) ===
正克隆到 '.'...
=== src/ros2/ros_testing (git) ===
正克隆到 '.'...
=== src/ros2/rosbag2 (git) ===
正克隆到 '.'...
=== src/ros2/rosidl (git) ===
正克隆到 '.'...
=== src/ros2/rosidl_core (git) ===
正克隆到 '.'...
=== src/ros2/rosidl_dds (git) ===
正克隆到 '.'...
=== src/ros2/rosidl_defaults (git) ===
正克隆到 '.'...
=== src/ros2/rosidl_dynamic_typesupport (git) ===
正克隆到 '.'...
=== src/ros2/rosidl_dynamic_typesupport_fastrtps (git) ===
正克隆到 '.'...
=== src/ros2/rosidl_python (git) ===
正克隆到 '.'...
=== src/ros2/rosidl_runtime_py (git) ===
正克隆到 '.'...
=== src/ros2/rosidl_typesupport (git) ===
正克隆到 '.'...
=== src/ros2/rosidl_typesupport_fastrtps (git) ===
正克隆到 '.'...
=== src/ros2/rpyutils (git) ===
正克隆到 '.'...
=== src/ros2/rviz (git) ===
正克隆到 '.'...
=== src/ros2/spdlog_vendor (git) ===
正克隆到 '.'...
=== src/ros2/sros2 (git) ===
正克隆到 '.'...
=== src/ros2/system_tests (git) ===
正克隆到 '.'...
=== src/ros2/test_interface_files (git) ===
正克隆到 '.'...
=== src/ros2/tinyxml2_vendor (git) ===
正克隆到 '.'...
=== src/ros2/tlsf (git) ===
正克隆到 '.'...
=== src/ros2/unique_identifier_msgs (git) ===
正克隆到 '.'...
=== src/ros2/urdf (git) ===
正克隆到 '.'...
=== src/ros2/yaml_cpp_vendor (git) ===
正克隆到 '.'...


cxy@ubuntu2404-cxy:~/ros2_jazzy$ vcs import --input https://raw.githubusercontent.com/ros2/ros2/jazzy/ros2.repos src
/usr/bin/vcs:6: DeprecationWarning: pkg_resources is deprecated as an API. See https://setuptools.pypa.io/en/latest/pkg_resources.html
  from pkg_resources import load_entry_point
...........................................................................................................
=== src/ament/ament_cmake (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ament/ament_index (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ament/ament_lint (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ament/ament_package (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ament/google_benchmark_vendor (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ament/googletest (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ament/uncrustify_vendor (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/eProsima/Fast-CDR (git) ===


已经位于 '2.2.x'
您的分支与上游分支 'origin/2.2.x' 一致。
=== src/eProsima/Fast-DDS (git) ===


HEAD 目前位于 c2a4523a2 Implement copy_from_topic_qos method (#4719)
=== src/eProsima/foonathan_memory_vendor (git) ===


已经位于 'master'
您的分支与上游分支 'origin/master' 一致。
=== src/eclipse-cyclonedds/cyclonedds (git) ===


已经位于 'releases/0.10.x'
您的分支与上游分支 'origin/releases/0.10.x' 一致。
=== src/eclipse-iceoryx/iceoryx (git) ===


已经位于 'release_2.0'
您的分支与上游分支 'origin/release_2.0' 一致。
=== src/gazebo-release/gz_cmake_vendor (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/gazebo-release/gz_math_vendor (git) ===
正克隆到 '.'...
=== src/gazebo-release/gz_utils_vendor (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/osrf/osrf_pycommon (git) ===


已经位于 'master'
您的分支与上游分支 'origin/master' 一致。
=== src/osrf/osrf_testing_tools_cpp (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros-perception/image_common (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros-perception/laser_geometry (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros-perception/point_cloud_transport (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros-planning/navigation_msgs (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros-tooling/keyboard_handler (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros-tooling/libstatistics_collector (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros-visualization/interactive_markers (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros-visualization/python_qt_binding (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros-visualization/qt_gui_core (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros-visualization/rqt (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros-visualization/rqt_action (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros-visualization/rqt_bag (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros-visualization/rqt_console (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros-visualization/rqt_graph (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros-visualization/rqt_msg (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros-visualization/rqt_plot (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros-visualization/rqt_publisher (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros-visualization/rqt_py_console (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros-visualization/rqt_reconfigure (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros-visualization/rqt_service_caller (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros-visualization/rqt_shell (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros-visualization/rqt_srv (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros-visualization/rqt_topic (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros-visualization/tango_icons_vendor (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros/class_loader (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros/kdl_parser (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros/pluginlib (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros/resource_retriever (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros/robot_state_publisher (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros/ros_environment (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros/ros_tutorials (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros/urdfdom (git) ===


已经位于 'master'
您的分支与上游分支 'origin/master' 一致。
=== src/ros/urdfdom_headers (git) ===


已经位于 'master'
您的分支与上游分支 'origin/master' 一致。
=== src/ros2/ament_cmake_ros (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/common_interfaces (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/console_bridge_vendor (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/demos (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/eigen3_cmake_module (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/example_interfaces (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/examples (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/geometry2 (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/launch (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/launch_ros (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/libyaml_vendor (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/message_filters (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/mimick_vendor (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/orocos_kdl_vendor (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/performance_test_fixture (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/pybind11_vendor (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/python_cmake_module (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/rcl (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/rcl_interfaces (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/rcl_logging (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/rclcpp (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/rclpy (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/rcpputils (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/rcutils (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/realtime_support (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/rmw (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/rmw_connextdds (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/rmw_cyclonedds (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/rmw_dds_common (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/rmw_fastrtps (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/rmw_implementation (git) ===
正克隆到 '.'...
=== src/ros2/ros2_tracing (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/ros2cli (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/ros2cli_common_extensions (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/ros_testing (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/rosbag2 (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/rosidl (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/rosidl_core (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/rosidl_dds (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/rosidl_defaults (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/rosidl_dynamic_typesupport (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/rosidl_dynamic_typesupport_fastrtps (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/rosidl_python (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/rosidl_runtime_py (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/rosidl_typesupport (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/rosidl_typesupport_fastrtps (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/rpyutils (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/rviz (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/spdlog_vendor (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/sros2 (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/system_tests (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/test_interface_files (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/tinyxml2_vendor (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/tlsf (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/unique_identifier_msgs (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/urdf (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。
=== src/ros2/yaml_cpp_vendor (git) ===


已经位于 'jazzy'
您的分支与上游分支 'origin/jazzy' 一致。

762dbe79f39d1548075fce0f5e867987.png

使用 rosdep 安装依赖项

ROS 2 软件包是在经常更新的 Ubuntu 系统上构建的。在安装新软件包之前,始终建议您确保您的系统是最新的。

sudo apt upgrade
sudo rosdep init
rosdep update
rosdep install --from-paths src --ignore-src -y --skip-keys "fastcdr rti-connext-dds-6.0.1 urdfdom_headers"

注意:如果您使用的是基于 Ubuntu 的发行版(如 Linux Mint),但没有将自己标识为这样,您会收到像 Unsupported OS [mint] 这样的错误信息。在这种情况下,请在上述命令后附加 --os=ubuntu:noble 。

cxy@ubuntu2404-cxy:~/ros2_jazzy$ sudo rosdep init
Wrote /etc/ros/rosdep/sources.list.d/20-default.list
Recommended: please run


  rosdep update


cxy@ubuntu2404-cxy:~/ros2_jazzy$ ^C
cxy@ubuntu2404-cxy:~/ros2_jazzy$ rosdep update
reading in sources list data from /etc/ros/rosdep/sources.list.d
Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/osx-homebrew.yaml
Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/base.yaml
Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/python.yaml
Hit https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/ruby.yaml
Hit https://raw.githubusercontent.com/ros/rosdistro/master/releases/fuerte.yaml
Query rosdistro index https://raw.githubusercontent.com/ros/rosdistro/master/index-v4.yaml
Skip end-of-life distro "ardent"
Skip end-of-life distro "bouncy"
Skip end-of-life distro "crystal"
Skip end-of-life distro "dashing"
Skip end-of-life distro "eloquent"
Skip end-of-life distro "foxy"
Skip end-of-life distro "galactic"
Skip end-of-life distro "groovy"
Add distro "humble"
Skip end-of-life distro "hydro"
Skip end-of-life distro "indigo"
Add distro "iron"
Skip end-of-life distro "jade"
Add distro "jazzy"
Skip end-of-life distro "kinetic"
Skip end-of-life distro "lunar"
Skip end-of-life distro "melodic"
Add distro "noetic"
Add distro "rolling"
updated cache in /home/cxy/.ros/rosdep/sources.cache
…… 之后安装很多软件包
ERROR: the following rosdeps failed to install
  apt: Failed to detect successful installation of [libqt5core5a]
  apt: Failed to detect successful installation of [libqt5gui5]

52381465b1914b3a907e89138b0a2f71.png

安装额外的 RMW 实现(可选)

ROS 2 使用的默认中间件是 Fast DDS ,但是中间件(RMW)可以在构建或运行时替换。请参阅如何使用多个 RMW 的指南。

RMW_IMPLEMENTATION=rmw_connextdds ros2 run demo_nodes_cpp talker


# Run in another terminal
RMW_IMPLEMENTATION=rmw_connextdds ros2 run demo_nodes_py listener

 

da8a5554d89b98d20f909245298a89d5.png

27f569f063649e42fa750d06eff2218b.png

8d33399ddb08dfa2e5452944bdc25de8.png

在工作区构建代码

如果您已经通过其他方式安装了 ROS 2(无论是通过 Debians 还是二进制分发),请确保您在一个不包含那些其他安装源的新环境中运行以下命令。同时确保您的 .bashrc 中没有 source /opt/ros/${ROS_DISTRO}/setup.bash 。您可以通过命令 printenv | grep -i ROS 来确保 ROS 2 没有被源调用。输出应该为空。

关于如何使用 ROS 工作空间的更多信息,请参见本教程https://docs.ros.org/en/jazzy/Tutorials/Beginner-Client-Libraries/Colcon-Tutorial.html。

cd ~/ros2_jazzy/
colcon build --symlink-install
# 单独构建 colcon build --packages-select qt_gui_cpp

2efc569b4b63e52f3e5a8eaeb9e7cb7e.png

47ef3128efdb92d6dcdf8d91b7b2877a.png

2c5febc291f6b2664f11bd8d2defd873.jpeg

82690063a7cce27db30f81d791169207.png

Summary: 363 packages finished [28min 51s]
  98 packages had stderr output: action_tutorials_py ament_clang_format ament_clang_tidy ament_copyright ament_cppcheck ament_cpplint ament_flake8 ament_index_python ament_lint ament_lint_cmake ament_mypy ament_package ament_pclint ament_pep257 ament_pycodestyle ament_pyflakes ament_uncrustify ament_xmllint demo_nodes_py domain_coordinator examples_rclpy_executors examples_rclpy_guard_conditions examples_rclpy_minimal_action_client examples_rclpy_minimal_action_server examples_rclpy_minimal_client examples_rclpy_minimal_publisher examples_rclpy_minimal_service examples_rclpy_minimal_subscriber examples_rclpy_pointcloud_publisher examples_tf2_py launch launch_pytest launch_ros launch_testing launch_testing_examples launch_testing_ros launch_xml launch_yaml lifecycle_py osrf_pycommon qt_gui_cpp quality_of_service_demo_py rclpy rmw_connextdds_common ros2action ros2bag ros2cli ros2component ros2doctor ros2interface ros2launch ros2lifecycle ros2multicast ros2node ros2param ros2pkg ros2run ros2service ros2test ros2topic ros2trace rosbag2_examples_py rosbag2_performance_benchmarking rosbag2_performance_benchmarking_msgs rosbag2_py rosidl_cli rosidl_pycommon rosidl_runtime_py rpyutils rqt rqt_action rqt_bag rqt_bag_plugins rqt_console rqt_graph rqt_gui rqt_gui_py rqt_msg rqt_plot rqt_publisher rqt_py_console rqt_reconfigure rqt_service_caller rqt_shell rqt_srv rqt_topic sensor_msgs_py sros2 test_launch_ros test_ros2trace test_tracetools_launch tf2_ros_py tf2_tools topic_monitor tracetools_launch tracetools_read tracetools_test tracetools_trace

 便条

如果您在编译所有示例时遇到问题,而这又阻碍了您成功构建,您可以使用 --packages-skip colcon 标志来忽略正在引起问题的包。例如,如果您不想安装庞大的 OpenCV 库,您可以使用以下命令跳过构建依赖它的包:

colcon build --symlink-install --packages-skip image_tools intra_process_demo

 建立环境

通过源文件设置您的环境。

# Replace ".bash" with your shell if you're not using bash
# Possible values are: setup.bash, setup.sh, setup.zsh
. ~/ros2_jazzy/install/local_setup.bash

尝试一些例子

在一个终端中,源设置文件,然后运行一个 C++ talker :

. ~/ros2_jazzy/install/local_setup.bash
ros2 run demo_nodes_cpp talker

在另一个终端中,源设置文件,然后运行一个 Python listener :

. ~/ros2_jazzy/install/local_setup.bash
ros2 run demo_nodes_py listener

您应该看到 talker 显示它是 Publishing 消息, listener 显示 I heard 那些消息。这验证了 C++和 Python API 都正常工作。万岁!

8bd17b75cad382e67802c5194238c8c9.png

 下一步

继续进行教程和演示 https://docs.ros.org/en/jazzy/Tutorials.html ,配置您的环境,创建您自己的工作区和包,并学习 ROS 2 的核心概念。

2be6359566062ed01039eb4ced58d564.png

备选编译器

使用除 gcc 之外的其他编译器来编译 ROS 2 很容易。如果您将环境变量 CC 和 CXX 分别设置为工作中的 C 和 C++编译器的可执行文件,并重新触发 CMake 配置(通过使用 --cmake-force-configure 或删除您希望受影响的包),CMake 将重新配置并使用不同的编译器。

 Clang

配置 CMake 以检测和使用 Clang:

sudo apt install clang
export CC=clang
export CXX=clang++
colcon build --cmake-force-configure

保持最新状态

请定期维护源代码检出,以刷新您的源安装https://docs.ros.org/en/jazzy/Installation/Maintaining-a-Source-Checkout.html 。

a23dd663dcc72b5af01b2f3f5a45a2bd.png

故障排除

故障排除技术可以在这里找到。https://docs.ros.org/en/jazzy/How-To-Guides/Installation-Troubleshooting.html#linux-troubleshooting 

71c3026f9412837c12d0946b1ae2ac18.png

b7211899faace63771c29f0d5f0d92ca.png

 卸载

  1. 如果您按照上面的指示使用 colcon 安装了工作空间,那么“卸载”可能只是打开一个新终端而不引用工作空间的 setup 文件的问题。这样,您的环境就会表现得好像系统上没有安装 Jazzy。

  2. 如果您也在尝试释放空间,您可以通过以下方式删除整个工作区目录:

rm -rf ~/ros2_jazzy

参考网址:

https://docs.ros.org/en/jazzy/Installation/Ubuntu-Install-Debians.html#

https://docs.ros.org/en/jazzy/Installation/Alternatives/Ubuntu-Development-Setup.html

https://docs.ros.org/en/jazzy/How-To-Guides/Working-with-multiple-RMW-implementations.html

https://docs.ros.org/en/jazzy/Tutorials.html

444f3b369949a30c95eacbc9f7801f55.png

f03dde7153e4731fd54a2467c14fed1e.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/773357.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

RRStudio 下载及安装(详尽版)

R语言来自S语言&#xff0c;是S语言的一个变种。S语言、C语言、Unix系统都是贝尔实验室的研究成果。R 语言是一种解释型的面向数学理论研究工作者的语言&#xff0c;主要用于统计分析、绘图、数据挖掘。 R 语言自由软件&#xff0c;免费、开放源代码&#xff0c;支持各个主要计…

python实现windows非白名单exe监控并杀死

目录 一、限定死白名单 二、增加自定义白名单文件 需求&#xff1a;孩子在家用电脑上网课&#xff0c;总是悄悄打开游戏或视频软件 方案&#xff1a;指定白名单exe&#xff0c;打开非白名单的就自动被杀死&#xff0c;并记录日志供查看 一、限定死白名单 import psutil imp…

【C语言】continue 关键字

当在C语言中使用continue关键字时&#xff0c;它用于控制循环语句的执行流程。与break不同&#xff0c;continue不会终止整个循环&#xff0c;而是终止当前迭代&#xff0c;并立即开始下一次迭代。这种行为使得可以在循环内部根据特定条件跳过某些代码块&#xff0c;从而控制程…

中国国家标准介绍

一、介绍 中国国家标准信息公共服务平台&#xff0c;这是由中国国家市场监督管理总局和中国国家标准化管理委员会共同运营的官方网站 https://openstd.samr.gov.cn/ 标准分为三类&#xff1a; GB&#xff1a;强制性国家标准GB/T&#xff1a;推荐行国家标准GB/Z&#xff1a;指导…

LT86101UXE 国产原装 HDMI2.0 / DVI中继器方案 分辨率 4Kx2K 用于多显示器 DVI/HDMI电缆扩展模块

1. 描述 Lontium LT86101UXE HDMI2.0 / DVI中继器特性高速中继器符合HDMI2.0/1.4规范,最大6 gbps高速数据率、自适应均衡RX输入和pre-emphasized TX输出支持长电缆应用程序,没有晶体在船上保存BOM成本,内部灵活的PCB TX巷交换路由。 LT86101UXE HDMI2.0/DVI中继器自动检测线缆损…

傅里叶变换

傅里叶定理指出&#xff1a; 任何信号都可以表示成&#xff08;或者无限逼近&#xff09;一系列正弦信号的叠加。在一维领域&#xff0c;信号是一维正弦波的叠加&#xff0c;那么想象一下&#xff0c;在二维领域&#xff0c;实际上是无数二维平面波的叠加&#xff0c;$(x&…

【面向就业的Linux基础】从入门到熟练,探索Linux的秘密(九)-git(1)

Git是一个版本管理控制系统&#xff08;缩写VCS&#xff09;&#xff0c;它可以在任何时间点&#xff0c;将文档的状态作为更新记录保存起来&#xff0c;也可以在任何时间点&#xff0c;将更新记录恢复回来。 文章目录 前言 一、git是什么 二、git基本概念 三、git基本命令 总结…

Vue3中为Ant Design Vue中Modal.confirm自定义内容

在一次业务开发时代码时&#xff0c;碰到了一种既想要Modal.confirm样式&#xff0c;又想要定制其content内容的情况。 大部分情况下&#xff0c;使用Modal.method()这种方式时&#xff0c;可能content内容固定都是字符串&#xff0c;那如果想要做更高级的交互怎么办&#xff…

将QT移植到IMX6ULL开发板

文章目录 前言一、编译系统1.设置交叉编译工具链2.编译系统3.烧写 二、Linux中下载QT1.安装 Qtcreator2.创建第一个程序3.配置 QtCreator 开发环境&#xff08;1&#xff09;打开选项界面&#xff08;2&#xff09;选择编译器&#xff08;3&#xff09;设置编译器&#xff08;4…

SoftCLT: 时间序列的软对比学习《Soft Contrastive Learning for Time Series》(时间序列、时序分类任务、软...

2024年6月25日&#xff0c;10:11&#xff0c;好几天没看论文了&#xff0c;一直在摸鱼写代码(虽然也没学会多少)&#xff0c;今天看一篇师兄推荐的。 论文&#xff1a; Soft Contrastive Learning for Time Series 或者是&#xff1a; Soft Contrastive Learning for Time Seri…

AutoX.js从某音分享链接解析出视频ID

背景 从某音分享的链接中解析出数字的videoID&#xff0c;用来做评论Intent跳转 思路 基本所有的短链接都是302跳转或者js跳转&#xff0c;熟悉http协议都知道&#xff0c;当状态码为302&#xff0c;从headers中提取Location即刻获得视频的原链接 链接中就带有videoId 要注意…

【串口通信】之TTL电平

1. 什么是串口 串口,全称为串行通信端口,是一种计算机硬件接口,用于实现数据的串行传输。与并行通信不同,串口通信一次只传输一个比特,数据通过串行线按顺序传输。串口通信在嵌入式系统、工业控制、计算机与外围设备通信等领域非常常见 2. 什么是串口通信 串口通信是指通过…

提升速卖通店铺排名:自养号测评的实战策略

卖家们追求的目标之一就是推广爆品。通过有效的推广策略&#xff0c;可以增加爆品的曝光度、吸引更多的买家&#xff0c;并带来更多的销售机会。那么&#xff0c;速卖通上如何推广爆品呢?下面我们来探讨一下这个问题。 首先&#xff0c;为了推广爆品&#xff0c;卖家需要进行…

护眼落地灯哪个牌子好?盘点五款必入不踩雷的护眼大路灯

护眼落地灯哪个牌子好&#xff1f;在这个快节奏的时代&#xff0c;护眼落地灯已经从一种高端选择转变为日常用眼生活中的必须品。不论是提升普通照明&#xff0c;还是针对孩子学习是改善光线质量环境&#xff0c;一款优秀的护眼落地灯都能成为我们生活中的照明神器。怎么选择一…

xmind2testcase工具将测试用例从Xmind转为CSV导入禅道

使用xmind编写测试用例&#xff0c;使用xmind2testcase工具将测试用例从Xmind转为CSV导入禅道&#xff0c;便于管理。 1.工具准备 第一步&#xff1a;安装python 第二步&#xff1a;安装xmind2testcase工具 运行-cmd-打开命令提示符弹窗&#xff0c;输入安装命令 安装命令&…

数千万“四高”中老年患者,如何推动国产营养保健品创新

“三高”指高血压、高血糖&#xff08;糖尿病&#xff09;、高血脂&#xff0c;是中老年群体的常见病。 然而&#xff0c;除了前述三者&#xff0c;高尿酸血症在我国的患病率正逐年提高&#xff0c;已成为仅次于糖尿病的第二大代谢性疾病。痛风是高尿酸血症典型症状之一。 加上…

大华设备接入GB28181视频汇聚管理平台EasyCVR安防监控系统的具体操作步骤

智慧城市/视频汇聚/安防监控平台EasyCVR兼容性强&#xff0c;支持多协议接入&#xff0c;包括国标GB/T 28181协议、GA/T 1400协议、部标JT808协议、RTMP、RTSP/Onvif协议、海康Ehome、海康SDK、大华SDK、华为SDK、宇视SDK、乐橙SDK、萤石云SDK等&#xff0c;并能对外分发RTMP、…

Linux 文件系统以及日志管理

一、inode 与block 1. inode 与block详解 在文件存储硬盘上&#xff0c;硬盘的最小存储单位叫做“扇区”&#xff0c;每个为512字节。 操作系统读取硬盘的时候&#xff0c;不会一个个扇区地读取&#xff0c;这样效率太低&#xff0c;而是一次性连续读取多个扇区,即一次性读取…

pytest-yaml-sanmu(七):使用fixture返回值

fixture 是 pytest 中非常重要的功能&#xff0c;大部分项目都可能会用到 fixture。 pytest 的内置标记 usefixtures 可以帮助用例自动的使用 fixture 1. 创建 fixture pytest 中的 fixtures 大致有两个用途 在用例执行之前、执行之后&#xff0c;自动的执行 通过 fixture …

基于FreeRTOS+STM32CubeMX+LCD1602+AD5621(SPI接口)的DAC控制输出Proteus仿真

一、仿真原理图: 二、运行效果: 三、STM32CubeMX配置: 1)、GPIO配置: 2)、freertos配置: 四、软件部分: 1)、main主函数: /* USER CODE BEGIN Header */ /** ****************************************************************************** * @file …