目标:使用C ++创建并运行发布者和订阅者节点。
mkdir dev_ws
mkdir dev_ws/src
cd dev_ws/src
创建功能包
cd dev_ws/src
ros2 pkg create --build-type ament_cmake cpp_pubsub
1.进入dev_ws/src/cpp_pubsub/src,并下载源文件:
cd dev_ws/src/cpp_pubsub/src
wget -O publisher_member_function.cpp https://raw.githubusercontent.com/ros2/examples/master/rclcpp/topics/minimal_publisher/member_function.cpp
在目录内将有一个名为publisher_member_function.cpp的源码文件。
PS:解决GitHub的raw.githubusercontent.com无法连接问题
打开网页https://site.ip138.com/raw.Githubusercontent.com/ 输入raw.githubusercontent.com,查询IP地址
2.修订package.xml
导航回到上一级dev_ws/src/cpp_pubsub
目录,在该目录下已为您创建了CMakeLists.txt
和package.xml
文件。
package.xml
用您的文本编辑器打开。
请确保填写<description>
,<maintainer>
和<license>
标签:
<description>Examples of minimal publisher/subscriber using rclcpp</description>
<maintainer email="you@email.com">Your Name</maintainer>
<license>Apache License 2.0</license>
在ament_cmake
buildtool依赖项之后添加新行,并粘贴与节点的include语句相对应的以下依赖项:
<depend>rclcpp</depend>
<depend>std_msgs</depend>
这声明了软件包的需求rclpp
以及std_msgs
何时执行其代码。
保存文件退出。
3.修订CMakeLists.txt
现在打开CMakeLists.txt
文件。在现有依赖项下面,添加以下行:find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)
find_package(std_msgs REQUIRED)
之后,添加可执行文件并为其命名,talker
以便您可以使用以下命令运行节点:ros2 run
add_executable(talker src/publisher_member_function.cpp)
ament_target_dependencies(talker rclcpp std_msgs)
最后,添加此install(TARGETS…)
部分,以便可以找到您的可执行文件:ros2 run
install(TARGETS
talker
DESTINATION lib/${PROJECT_NAME})
最终如下:
cmake_minimum_required(VERSION 3.5)
project(cpp_pubsub)
# Default to C++14
if(NOT CMAKE_CXX_STANDARD)
set(CMAKE_CXX_STANDARD 14)
endif()
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
add_compile_options(-Wall -Wextra -Wpedantic)
endif()
find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)
find_package(std_msgs REQUIRED)
add_executable(talker src/publisher_member_function.cpp)
ament_target_dependencies(talker rclcpp std_msgs)
install(TARGETS
talker
DESTINATION lib/${PROJECT_NAME})
1.进入dev_ws/src/cpp_pubsub/src,并下载源文件:
cd dev_ws/src/cpp_pubsub/src
wget -O subscriber_member_function.cpp https://raw.githubusercontent.com/ros2/examples/master/rclcpp/topics/minimal_subscriber/member_function.cpp
在目录内将有一个名为subscriber_member_function.cpp的源码文件。
通过ls命令查看,存在两个文件了:
publisher_member_function.cpp subscriber_member_function.cpp
2.修订CMakeLists.txt
重新打开CMakeLists.txt
并在发布者条目下方添加订阅者节点的可执行文件和目标。
add_executable(listener src/subscriber_member_function.cpp)
ament_target_dependencies(listener rclcpp std_msgs)
install(TARGETS
talker
listener
DESTINATION lib/${PROJECT_NAME})
最终如下所示:
cmake_minimum_required(VERSION 3.5)
project(cpp_pubsub)
# Default to C99
if(NOT CMAKE_C_STANDARD)
set(CMAKE_C_STANDARD 99)
endif()
# Default to C++14
if(NOT CMAKE_CXX_STANDARD)
set(CMAKE_CXX_STANDARD 14)
endif()
if(CMAKE_COMPILER_IS_GNUCXX OR CMAKE_CXX_COMPILER_ID MATCHES "Clang")
add_compile_options(-Wall -Wextra -Wpedantic)
endif()
# find dependencies
find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)
find_package(std_msgs REQUIRED)
add_executable(talker src/publisher_member_function.cpp)
ament_target_dependencies(talker rclcpp std_msgs)
add_executable(listener src/subscriber_member_function.cpp)
ament_target_dependencies(listener rclcpp std_msgs)
install(TARGETS
talker
listener
DESTINATION lib/${PROJECT_NAME})
ament_package()
在工作空间的根目录中dev_ws
,构建新的程序包:
colcon build --packages-select cpp_pubsub
PS:解决colcon这个命令无法找到问题
使用如下命令进行安装:
sudo apt update && sudo apt install -y \
build-essential \
cmake \
git \
python3-colcon-common-extensions \
python3-pip \
python-rosdep \
python3-vcstool \
wget
# install some pip packages needed for testing
sudo -H python3 -m pip install -U \
argcomplete \
flake8 \
flake8-blind-except \
flake8-builtins \
flake8-class-newline \
flake8-comprehensions \
flake8-deprecated \
flake8-docstrings \
flake8-import-order \
flake8-quotes \
pytest-repeat \
pytest-rerunfailures
# install extra packages not available or recent enough on Xenial
python3 -m pip install -U \
pytest \
pytest-cov \
pytest-runner \
setuptools
# install Fast-RTPS dependencies
sudo apt install --no-install-recommends -y \
libasio-dev \
libtinyxml2-dev
打开一个新终端,导航到dev_ws
,执行操作:
. install/setup.bash
ros2 run cpp_pubsub talker
可以看到:
[INFO] [minimal_publisher]: Publishing: "Hello World: 0"
[INFO] [minimal_publisher]: Publishing: "Hello World: 1"
[INFO] [minimal_publisher]: Publishing: "Hello World: 2"
[INFO] [minimal_publisher]: Publishing: "Hello World: 3"
[INFO] [minimal_publisher]: Publishing: "Hello World: 4"
打开另一个新终端,导航到dev_ws
,执行操作:
. install/setup.bash
ros2 run cpp_pubsub listener
可以看到:
[INFO] [minimal_subscriber]: I heard: "Hello World: 0"
[INFO] [minimal_subscriber]: I heard: "Hello World: 1"
[INFO] [minimal_subscriber]: I heard: "Hello World: 2"
[INFO] [minimal_subscriber]: I heard: "Hello World: 3"
[INFO] [minimal_subscriber]: I heard: "Hello World: 4"
ctrl+c退出命令台。
至此完成发布者和订阅者操作。