ROS2——开发第一个节点

发布时间:2024年01月10日

ROS2 的包必须在 src 文件夹下,使用下面的命令创建一个包,并设置相关的依赖

ros2 pkg create my_package --dependencies rclcpp std_msgs

可以打开包内的 package.xml ,查看 depend 有哪些依赖

image.png|500

#include "rclcpp/rclcpp.hpp"
int main(int argc,char *argv[])
{
    rclcpp::init(argc,argv);
    auto node = rclcpp::Node::make_shared("simple_node");
    rclcpp::spin(node);
    rclcpp::shutdown();
    return 0;
}
  • rclcpp::Node 包含了很多等价的别名以及静态方法,SharedPtrstd::shared ptr<rclcpp::Node> 的别名,而 make_shared 是它的静态方法。该行代码创建了一个名字叫 simple_node 的节点,在程序中以 node 表示该节点
  • spin 可以阻止代码的执行,防止他立即终止
  • shutdown 管理节点的关闭

接下来,来看看CMake文件

cmake_minimum_required(VERSION 3.8)
project(my_package)

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)

set(dependencies
  rclcpp
)

add_executable(simple src/simple.cpp)
ament_target_dependencies(simple ${dependencies})

install(TARGETS
  simple
  ARCHIVE DESTINATION lib
  LIBRARY DESTINATION lib
  RUNTIME 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)
  ament_lint_auto_find_test_dependencies()
endif()
ament_export_dependencies(${dependencies})
ament_package()

之后编译并运行
colcon build --symlink-install
ros2 run my_packkage simple

由于使用了 spin 因此程序并没有执行任何内容

image.png

文章来源:https://blog.csdn.net/beiketaoerge/article/details/135514130
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。