1.3 ROS2快速體驗
1.3 ROS2快速體驗
ROS2中涉及的編程語言以C++和Python為主,ROS2中的大多數(shù)功能兩者都可以實現(xiàn),在本系列教程中,如無特殊情況,每一個案例也都會分別使用C++和Python兩種方案演示。本節(jié)我們將介紹一個最基本的案例——ROS2版本的HelloWorld,通過學習本節(jié)內(nèi)容,你可以了解ROS2程序的編寫、編譯與執(zhí)行流程。
1.3.1 案例簡介
1.需求
編寫ROS2程序,要求程序運行時,可以在終端輸出文本"Helo World"。
2.準備
無論是使用C++還是Python編寫ROS2程序,都需要依賴于工作空間,在此,我們先實現(xiàn)工作空間的創(chuàng)建與編譯,打開終端,輸入如下指令:
mkdir -p ws00_helloworld/src #創(chuàng)建工作空間以及子級目錄 src,工作空間名稱可以自定義
cd ws00_helloworld #進入工作空間
colcon build #編譯
上述指令執(zhí)行完畢,將創(chuàng)建ws00_helloworld目錄,且該目錄下包含build、install、log、src共四個子級目錄。
3.流程簡介
工作空間創(chuàng)建完畢后,我么可以在工作空間下的src目錄中編寫C++或Python程序,且兩種語言的實現(xiàn)流程大致一致,主要包含如下步驟:
創(chuàng)建功能包;
編輯源文件;
編輯配置文件;
編譯;
執(zhí)行。
下面兩節(jié)我們會介紹具體的實現(xiàn)細節(jié)。
1.3.2 HelloWorld(C++)
1.創(chuàng)建功能包
終端下,進入ws00_helloworld/src目錄,使用如下指令創(chuàng)建一個C++功能包:
ros2 pkg create pkg01_helloworld_cpp --build-type ament_cmake --dependencies rclcpp --node-name helloworld
執(zhí)行完畢,在src目錄下將生成一個名為pkg01_helloworld_cpp的目錄,且目錄中已經(jīng)默認生成了一些子級文件與文件夾。
2.編輯源文件
進入pkg01_helloworld_cpp/src目錄,該目錄下有一helloworld.cpp文件,修改文件內(nèi)容如下:

3.編輯配置文件
在步驟1創(chuàng)建功能包時所使用的指令已經(jīng)默認生成且配置了配置文件,不過實際應用中經(jīng)常需要自己編輯配置文件,所以在此對相關內(nèi)容做簡單介紹,所使用的配置文件主要有兩個,分別是功能包下的package.xml與CMakeLists.txt。
1.package.xml
文件內(nèi)容如下:
"1.0" xml version=
"http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema" xml-model href=
<package format="3"> ?
? ?<name>pkg01_helloworld_cpp</name> ?
? ?<version>0.0.0</version> ?
? ?<description>TODO: Package description</description> ?
? ?<maintainer email="ros2@todo.todo">ros2</maintainer> ?
? ?<license>TODO: License declaration</license>
???<buildtool_depend>ament_cmake</buildtool_depend> ?
? ? <!-- 所需要依賴 --> ?
? ? <depend>rclcpp</depend> ?
? ?<test_depend>ament_lint_auto</test_depend>? ? ? ? ? ??<test_depend>ament_lint_common</test_depend> ?
<export> ? ?
? ?<build_type>ament_cmake</build_type> ?
</export>
</package>
注釋部分以后需要根據(jù)實際的包依賴進行添加或修改。
2.CMakeLists.txt
文件內(nèi)容如下:
cmake_minimum_required(VERSION 3.8)
project(pkg01_helloworld_cpp)?
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)?
# 映射源文件與可執(zhí)行文件?
add_executable(helloworld src/helloworld.cpp)?
# 設置目標依賴庫?
ament_target_dependencies( ?
? helloworld ?
? "rclcpp"?
)?
# 定義安裝規(guī)則?
install(TARGETS helloworld ?
DESTINATION lib/${PROJECT_NAME})?
if(BUILD_TESTING) ?
?find_package(ament_lint_auto REQUIRED) ?
?# the following line skips the linter which checks for copyrights ?
?# comment the line when a copyright and license is added to all source files ?set(ament_cmake_copyright_FOUND TRUE) ?
?# the following line skips cpplint (only works in a git repo) ?
?# comment the line when this package is in a git repo and when ?
?# a copyright and license is added to all source files ?set(ament_cmake_cpplint_FOUND TRUE) ?
?a
ment_lint_auto_find_test_dependencies()?
endif()?
ament_package()
中文注釋部分以后可能需要根據(jù)實際情況修改。
4.編譯
終端下進入到工作空間,執(zhí)行如下指令:
colcon build
5.執(zhí)行
終端下進入到工作空間,執(zhí)行如下指令:
. install/setup.bash?
ros2 run pkg01_helloworld_cpp helloworld
程序執(zhí)行,在終端下將輸出文本:"hello world!"。
1.3.3 HelloWorld(Python)
1.創(chuàng)建功能包
終端下,進入ws00_helloworld/src目錄,使用如下指令創(chuàng)建一個python功能包:
ros2 pkg create pkg02_helloworld_py --build-type ament_python --dependencies rclpy --node-name helloworld
執(zhí)行完畢,在src目錄下將生成一個名為pkg02_helloworld_py的目錄,且目錄中已經(jīng)默認生成了一些子級文件與文件夾。
2.編輯源文件
進入pkg02_helloworld_py/pkg02_helloworld_py目錄,該目錄下有一helloworld.py文件,修改文件內(nèi)容如下:

3.編輯配置文件
與C++類似的,在步驟1創(chuàng)建功能包時所使用的指令也已經(jīng)默認生成且配置了配置文件,不過實際應用中經(jīng)常需要自己編輯配置文件,所以在此對相關內(nèi)容做簡單介紹,所使用的配置文件主要有兩個,分別是功能包下的package.xml與setup.py。
1.package.xml
文件內(nèi)容如下:
"1.0" xml version=
"http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema" xml-model href=
<package format="3"> ?
?<name>pkg02_helloworld_py</name> ?
?<version>0.0.0</version> ?
?<description>TODO: Package description</description> ?
?<maintainer email="ros2@todo.todo">ros2</maintainer> ?
?<license>TODO: License declaration</license> ?
? <!-- 所需要依賴 --> ?
? <depend>rclpy</depend> ?
?<test_depend>ament_copyright</test_depend> ?<test_depend>ament_flake8</test_depend> ?<test_depend>ament_pep257</test_depend> ?
?<test_depend>python3-pytest</test_depend> ?
?<export> ? ?
? ?<build_type>ament_python</build_type> ?
? </export>
</package>
注釋部分以后需要根據(jù)實際的包依賴進行添加或修改。
2.setup.py
文件內(nèi)容如下:
from setuptools import setup?
package_name = 'pkg02_helloworld_py'
setup( ? ?
? ?name=package_name, ? ?
? ?version='0.0.0', ? ?
? ?packages=[package_name], ? ?
? ?data_files=[ ? ? ? ?
? ? ? ('share/ament_index/resource_index/packages',? ? ? ? ? ? ? ? ? ? ? ??? ['resource/' + package_name]),?
? ? ? ('share/' + package_name, ['package.xml']), ? ?
], ? ?
?install_requires=['setuptools'], ? ?
?zip_safe=True, ? ?
?maintainer='ros2', ? ?
?maintainer_email='ros2@todo.todo', ? ?
?description='TODO: Package description', ? ?
?license='TODO: License declaration', ? ?
?tests_require=['pytest'], ? ?
?entry_points={ ? ? ? ?
? ? 'console_scripts': [ ? ? ? ? ? ?
? ? ? ?# 映射源文件與可執(zhí)行文件 ? ? ? ? ? ?
? ? ? ?'helloworld = pkg02_helloworld_py.helloworld:main' ? ? ? ?
? ? ?], ? ?
? },?
)
注釋部分以后可能需要根據(jù)實際情況修改。
4.編譯
終端下進入到工作空間,執(zhí)行如下指令:
colcon build
5.執(zhí)行
終端下進入到工作空間,執(zhí)行如下指令:
. install/setup.bash
ros2 run pkg02_helloworld_py helloworld
程序執(zhí)行,在終端下將輸出文本:"hello world!"。
1.3.4 運行優(yōu)化
每次終端中執(zhí)行工作空間下的節(jié)點時,都需要調(diào)用. install/setup.bash
指令,使用不便,優(yōu)化策略是,可以將該指令的調(diào)用添加進~/setup.bash
,操作格式如下:
echo "source /{工作空間路徑}/install/setup.bash" >> ~/.bashrc
示例:
echo "source /home/ros2/ws00_helloworld/install/setup.bash" >> ~/.bashrc
以后再啟動終端時,無需手動再手動刷新環(huán)境變量,使用更方便。

B站有完整的ros系列教程視頻,可以觀看完整內(nèi)容ros課程ROS2理論與實踐
更多內(nèi)容將在猛獅知識星球社區(qū)更新最新課程,后續(xù)將推出更多優(yōu)質(zhì)內(nèi)容——詳情可關注猛獅集訓營公眾號和猛獅集訓營官方網(wǎng)站。