创建ROS 2工作区
mkdir -p ~/bookros2_ws/src
cd ~/bookros2_ws/src
git clone https://github.com/eather0056/Robot-Programming-with-ROS2.git
导入第三方软件包
cd ~/bookros2_ws/src
sudo apt install python3-vcstool
vcs import . < third_parties.repos
这个命令用于安装名为 `python3-vcstool` 的软件包。`vcstool` 是一个用于管理多个版本控制系统(Version Control System,VCS)仓库的工具。它是 ROS 2 中用于管理工作空间中的多个软件包的版本控制的工具之一。
具体而言,`python3-vcstool` 提供了一个名为 `vcs` 的命令行工具,可以使用YAML文件描述工作空间中包含的各个软件包及其对应的版本控制信息。这样,通过一个简单的配置文件,你可以方便地一次性克隆、更新或检查多个软件包的状态。
执行 `sudo apt install python3-vcstool` 后,你就能在系统中使用 `vcs` 命令了,该命令可帮助你更有效地管理 ROS 2 工作空间中的软件包。
这个命令使用 `vcs` 工具,通过读取名为 `third_parties.repos` 的配置文件,将多个版本控制系统(VCS)仓库克隆到当前工作目录中。让我解释一下这个命令的各个部分:
1. `vcs import`: 这是 `vcs` 工具的命令,用于执行导入(import)操作,即根据指定的配置文件克隆或更新多个仓库。
2. `.`: 这表示当前工作目录。克隆的仓库将被放置在当前目录下。
3. `< book_ros2/third_parties.repos`: `<` 符号用于将配置文件 `book_ros2/third_parties.repos` 的内容传递给 `vcs import` 命令。该配置文件通常包含了需要导入的各个仓库的信息,如URL、分支等。
这个命令的实际效果是根据 `third_parties.repos` 文件中的配置信息,使用 `vcs` 工具将多个仓库克隆到当前目录中。这对于管理工作空间中的依赖项和第三方软件包非常有用,因为它能够一次性处理多个仓库的克隆操作,简化了配置和管理的过程。
安装配置文件并生成软件包
cd ~/bookros2_ws
rosdep install --from-paths src --ignore-src -r -y
sudo apt update
sudo apt install python3-colcon-common-extensions
colcon build --symlink-install
rosdep install
: 这是 ROS 工具链中的一个工具,用于安装 ROS 软件包的系统依赖项。rosdep
通过读取软件包的package.xml
文件,确定软件包所需的系统依赖项,并尝试安装它们。
--from-paths src
: 指定rosdep
从指定的路径中读取软件包信息。在这里,src
表示 ROS 2 工作空间中的src
目录。
--ignore-src
: 忽略src
目录中的源码,只处理已构建的软件包。通常,src
目录包含源码和已构建的软件包,但在使用--ignore-src
选项时,rosdep
将仅处理已构建的软件包。
-r
: 递归安装依赖项。这表示rosdep
将检查工作空间中所有软件包的依赖项,并确保这些依赖项被安装。
-y
: 不询问用户确认,直接安装。这个选项用于自动确认rosdep
提示,使安装过程无需用户交互。总的来说,这个命令的作用是根据 ROS 2 工作空间中
src
目录下的软件包信息,递归地安装所有依赖项,并通过-y
选项直接应用这些更改,无需用户确认。这是为了在构建 ROS 2 工作空间之前确保所有的依赖项都已安装
ERROR: the following packages/stacks could not have their rosdep keys resolved to system dependencies: diff_drive_controller: Cannot locate rosdep definition for [realtime_tools] gazebo_ros2_control_demos: Cannot locate rosdep definition for [gazebo_ros] forward_command_controller: Cannot locate rosdep definition for [realtime_tools] tiago_gazebo: Cannot locate rosdep definition for [play_motion_msgs] br2_tracking: Cannot locate rosdep definition for [vision_msgs] joint_trajectory_controller: Cannot locate rosdep definition for [realtime_tools] pmb2_description: Cannot locate rosdep definition for [joint_state_publisher_gui] gazebo_ros2_control: Cannot locate rosdep definition for [gazebo_ros] tiago_controller_configuration: Cannot locate rosdep definition for [pal_local_joint_control] br2_fsm_bumpgo_py: Cannot locate rosdep definition for [rclcpy] imu_sensor_broadcaster: Cannot locate rosdep definition for [realtime_tools] pal_gazebo_worlds: Cannot locate rosdep definition for [gazebo_msgs] tiago_2dnav_gazebo: Cannot locate rosdep definition for [tiago_2dnav] force_torque_sensor_broadcaster: Cannot locate rosdep definition for [realtime_tools] pal_gripper_description: Cannot locate rosdep definition for [rostest] tiago_bringup: Cannot locate rosdep definition for [tiago_moveit_config] pmb2_bringup: Cannot locate rosdep definition for [joy_teleop] tiago_description: Cannot locate rosdep definition for [custom_ee_description] gripper_controllers: Cannot locate rosdep definition for [realtime_tools] Continuing to install resolvable dependencies... #All required rosdeps installed successfully ------------------------------------------------
在构建过程中,出现了一些无法解析的 rosdep
错误,其中一些软件包无法找到其依赖项的 rosdep
定义。解决这些问题的一般步骤如下:
-
手动安装缺失的系统依赖项: 对于每个无法解析的
rosdep
错误,你可以手动安装相应软件包的依赖项。
sudo apt install ros-foxy-realtime-tools ros-foxy-gazebo-ros ros-foxy-play-motion-msgs ros-foxy-vision-msgs ros-foxy-joint-state-publisher-gui ros-foxy-gazebo-msgs ros-foxy-pal-local-joint-control ros-foxy-rclcpp ros-foxy-tiago-2dnav ros-foxy-rostest ros-foxy-tiago-moveit-config ros-foxy-joy-teleop ros-foxy-custom-ee-description
正在读取软件包列表... 完成
正在分析软件包的依赖关系树
正在读取状态信息... 完成
E: 无法定位软件包 ros-foxy-play-motion-msgs
E: 无法定位软件包 ros-foxy-pal-local-joint-control
E: 无法定位软件包 ros-foxy-tiago-2dnav
E: 无法定位软件包 ros-foxy-rostest
E: 无法定位软件包 ros-foxy-tiago-moveit-config
E: 无法定位软件包 ros-foxy-custom-ee-description
-
重新运行
colcon build
命令
colcon build
: 这是构建 ROS 2 工作空间的命令,colcon
是用于构建、测试和分发 ROS 2 软件包的构建工具。
--symlink-install
: 通过使用符号链接方式进行安装,软件包的文件将被链接到安装目录而不是复制。这使得对软件包的更改可以立即在系统中生效,而无需重新构建。这对于开发和调试过程中的迭代非常方便。综合起来,这个命令的目的是使用
colcon
构建 ROS 2 工作空间,并通过--symlink-install
选项以符号链接方式进行软件包的安装。这有助于提高开发效率,特别是在频繁进行修改和测试的情况下。
附加依赖项
twist_mux
软件包的构建失败。错误信息表明缺少 diagnostic_updater
软件包的配置文件。
hardware_interface
软件包的构建失败。错误信息表明缺少 control_msgs
软件包的配置文件。
br2_bt_bumpgo
和 br2_bt_patrolling
软件包的构建失败。错误信息表明缺少 behaviortree_cpp_v3
软件包的配置文件。
sudo apt install ros-foxy-diagnostic-updater
sudo apt-get install ros-foxy-control-msgs
sudo apt-get install ros-foxy-xacro
sudo apt-get install ros-foxy-behaviortree-cpp-v3
sudo apt-get install ros-foxy-nav2-msgs
sudo apt-get install ros-foxy-vision-msgs
sudo apt-get install ros-foxy-realtime-tools
sudo apt-get install ros-foxy-gazebo-dev
sudo apt-get install ros-foxy-control-toolbox
sudo apt-get install ros-foxy-gazebo-ros
成功构建
colcon build --symlink-install
Starting >>> controller_manager_msgs
Starting >>> ros2_control_test_assets
Starting >>> launch_pal
Starting >>> twist_mux
Starting >>> hey5_description
Starting >>> tiago_description_calibration
Starting >>> pal_gazebo_worlds
Starting >>> urdf_test
Finished <<< ros2_control_test_assets [3.16s]
Finished <<< hey5_description [2.81s]
Starting >>> hardware_interface
Starting >>> pmb2_maps
Finished <<< tiago_description_calibration [3.22s]
Starting >>> br2_tracking_msgs
Finished <<< pal_gazebo_worlds [3.45s]
Finished <<< launch_pal [4.95s]
Finished <<< urdf_test [4.27s]
Starting >>> br2_basics
Starting >>> br2_bt_bumpgo
Starting >>> pal_gripper_description
Finished <<< controller_manager_msgs [6.57s]
Finished <<< twist_mux [6.20s]
Starting >>> br2_bt_patrolling
Starting >>> br2_fsm_bumpgo_cpp
Finished <<< pmb2_maps [4.51s]
Finished <<< br2_bt_bumpgo [2.80s]
Starting >>> pmb2_2dnav
Starting >>> br2_fsm_bumpgo_py
Finished <<< br2_tracking_msgs [5.76s]
Starting >>> br2_navigation
Finished <<< pal_gripper_description [4.91s]
Finished <<< hardware_interface [7.56s]
Finished <<< br2_basics [5.78s]
Starting >>> controller_interface
Starting >>> br2_tf2_detector
Starting >>> br2_tiago
Finished <<< br2_fsm_bumpgo_cpp [5.37s]
Starting >>> br2_vff_avoidance
Finished <<< br2_bt_patrolling [6.06s]
Starting >>> groot
Finished <<< br2_fsm_bumpgo_py [5.24s]
Finished <<< pmb2_2dnav [5.65s]
Starting >>> br2_tracking
Starting >>> pmb2_navigation
Finished <<< br2_navigation [5.16s]
Starting >>> transmission_interface
Finished <<< br2_tiago [3.74s]
Finished <<< br2_tf2_detector [4.24s]
Finished <<< controller_interface [4.71s]
Starting >>> controller_manager
Finished <<< br2_vff_avoidance [4.92s]
Finished <<< groot [4.75s]
Finished <<< pmb2_navigation [4.11s]
Finished <<< br2_tracking [4.57s]
Finished <<< transmission_interface [4.04s]
Finished <<< controller_manager [3.10s]
Starting >>> forward_command_controller
Starting >>> joint_state_broadcaster
Starting >>> diff_drive_controller
Starting >>> imu_sensor_broadcaster
Starting >>> joint_trajectory_controller
Starting >>> force_torque_sensor_broadcaster
Starting >>> ros2controlcli
Starting >>> gazebo_ros2_control
Finished <<< forward_command_controller [3.56s]
Finished <<< imu_sensor_broadcaster [3.35s]
Starting >>> position_controllers
Starting >>> effort_controllers
Finished <<< joint_state_broadcaster [4.35s]
Finished <<< ros2controlcli [3.70s]
Finished <<< force_torque_sensor_broadcaster [4.43s]
Starting >>> joint_state_controller
Starting >>> velocity_controllers
Finished <<< joint_trajectory_controller [5.35s]
Starting >>> ros2_control
Starting >>> gripper_controllers
Finished <<< diff_drive_controller [6.73s]
Finished <<< gazebo_ros2_control [7.60s]
Finished <<< ros2_control [3.97s]
Finished <<< joint_state_controller [5.68s]
Starting >>> pmb2_controller_configuration
Finished <<< pmb2_controller_configuration [4.51s]
Starting >>> pmb2_description
Finished <<< effort_controllers [16.0s]
Finished <<< position_controllers [16.5s]
Starting >>> pal_gripper_controller_configuration
Finished <<< pmb2_description [5.37s]
Starting >>> pmb2_bringup
Finished <<< gripper_controllers [15.9s]
Finished <<< velocity_controllers [16.9s]
Starting >>> ros2_controllers
Finished <<< pmb2_bringup [2.64s]
Starting >>> pmb2_robot
Finished <<< pal_gripper_controller_configuration [3.57s]
Starting >>> tiago_controller_configuration
Starting >>> pal_gripper
Finished <<< ros2_controllers [2.58s]
Starting >>> gazebo_ros2_control_demos
Finished <<< pal_gripper [1.95s]
Finished <<< pmb2_robot [3.00s]
Finished <<< tiago_controller_configuration [2.82s]
Starting >>> tiago_description
Starting >>> tiago_bringup
Finished <<< tiago_bringup [2.38s]
Finished <<< tiago_description [3.20s]
Starting >>> tiago_gazebo
Starting >>> tiago_robot
Finished <<< gazebo_ros2_control_demos [6.16s]
Finished <<< tiago_robot [1.70s]
Finished <<< tiago_gazebo [3.23s]
Starting >>> tiago_2dnav_gazebo
Starting >>> tiago_simulation
Finished <<< tiago_simulation [1.59s]
Finished <<< tiago_2dnav_gazebo [2.00s]Summary: 57 packages finished [1min 1s]
将工作空间激活为覆盖,打开终端时默认激活
source bookros2_ws/install/setup.bash
echo "source ~/bookros2_ws/install/setup.bash" >> ~/.bashrc
问题补充
ament_cmake
rosdep install --from-paths src --ignore-src -r -y
WARNING: ROS_PYTHON_VERSION is unset. Defaulting to 3
ERROR: the following packages/stacks could not have their rosdep keys resolved
to system dependencies (ROS distro is not set. Make sure `ROS_DISTRO` environment variable is set, or use `--rosdistro` option to specify the distro, e.g. `--rosdistro indigo`):
pal_gripper_description: Cannot locate rosdep definition for [rostest]
gripper_controllers: Cannot locate rosdep definition for [ament_lint_common]
transmission_interface: Cannot locate rosdep definition for [ament_lint_common]
br2_tracking_msgs: Cannot locate rosdep definition for [rosidl_default_generators]
br2_tf2_detector: Cannot locate rosdep definition for [ament_lint_common]
br2_basics: Cannot locate rosdep definition for [ament_lint_common]
controller_manager: Cannot locate rosdep definition for [ament_lint_common]
pmb2_description: Cannot locate rosdep definition for [launch_testing_ament_cmake]
joint_trajectory_controller: Cannot locate rosdep definition for [ament_lint_common]
joint_state_controller: Cannot locate rosdep definition for [rclcpp]
urdf_test: Cannot locate rosdep definition for [ament_lint_common]
launch_pal: Cannot locate rosdep definition for [ament_pep257]
hardware_interface: Cannot locate rosdep definition for [ament_lint_common]
pmb2_2dnav: Cannot locate rosdep definition for [ament_lint_common]
ros2_control: Cannot locate rosdep definition for [ament_cmake]
pal_gripper: Cannot locate rosdep definition for [ament_cmake]
br2_bt_patrolling: Cannot locate rosdep definition for [ament_cmake_gtest]
tiago_gazebo: Cannot locate rosdep definition for [play_motion_msgs]
force_torque_sensor_broadcaster: Cannot locate rosdep definition for [ament_cmake_gmock]
br2_tracking: Cannot locate rosdep definition for [ament_cmake_gtest]
pmb2_controller_configuration: Cannot locate rosdep definition for [ament_lint_common]
controller_interface: Cannot locate rosdep definition for [ament_lint_common]
pmb2_navigation: Cannot locate rosdep definition for [ament_cmake_auto]
effort_controllers: Cannot locate rosdep definition for [ament_lint_common]
br2_tiago: Cannot locate rosdep definition for [ament_cmake]
tiago_simulation: Cannot locate rosdep definition for [ament_cmake]
br2_navigation: Cannot locate rosdep definition for [ament_cmake]
velocity_controllers: Cannot locate rosdep definition for [ament_lint_common]
tiago_description_calibration: Cannot locate rosdep definition for [xacro]
pal_gazebo_worlds: Cannot locate rosdep definition for [gazebo_msgs]
br2_vff_avoidance: Cannot locate rosdep definition for [ament_cmake_gtest]
tiago_controller_configuration: Cannot locate rosdep definition for [ament_lint_common]
tiago_robot: Cannot locate rosdep definition for [ament_cmake]
pmb2_robot: Cannot locate rosdep definition for [ament_cmake]
tiago_description: Cannot locate rosdep definition for [launch_testing_ament_cmake]
pal_gripper_controller_configuration: Cannot locate rosdep definition for [ament_cmake_auto]
ros2_control_test_assets: Cannot locate rosdep definition for [ament_lint_auto]
joint_state_broadcaster: Cannot locate rosdep definition for [rclcpp]
diff_drive_controller: Cannot locate rosdep definition for [ament_lint_common]
pmb2_maps: Cannot locate rosdep definition for [ament_cmake_auto]
position_controllers: Cannot locate rosdep definition for [ament_lint_common]
br2_fsm_bumpgo_cpp: Cannot locate rosdep definition for [ament_lint_common]
tiago_2dnav_gazebo: Cannot locate rosdep definition for [ament_lint_common]
pmb2_bringup: Cannot locate rosdep definition for [ament_lint_common]
br2_fsm_bumpgo_py: Cannot locate rosdep definition for [ament_pep257]
forward_command_controller: Cannot locate rosdep definition for [ament_lint_common]
imu_sensor_broadcaster: Cannot locate rosdep definition for [ament_lint_common]
controller_manager_msgs: Cannot locate rosdep definition for [ament_lint_common]
ros2controlcli: Cannot locate rosdep definition for [ament_xmllint]
gazebo_ros2_control: Cannot locate rosdep definition for [ament_cmake_gtest]
hey5_description: Cannot locate rosdep definition for [xacro]
ros2_controllers: Cannot locate rosdep definition for [ament_cmake]
groot: Cannot locate rosdep definition for [behaviortree_cpp_v3]
br2_bt_bumpgo: Cannot locate rosdep definition for [ament_cmake_gtest]
twist_mux: Cannot locate rosdep definition for [launch_testing_ros]
tiago_bringup: Cannot locate rosdep definition for [ament_lint_common]
gazebo_ros2_control_demos: Cannot locate rosdep definition for [ament_lint_common]
Continuing to install resolvable dependencies...
#All required rosdeps installed successfully