ROS2 学习--新建ros2工作空间和功能包

这篇具有很好参考价值的文章主要介绍了ROS2 学习--新建ros2工作空间和功能包。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

简介:如何建立ros2的工作空间和功能包。

1. 创建新的工作空间

mkdir -p ~/dev_ws/src
cd ~/dev_ws/src

2. 新建功能包

ros2 pkg create --build-type ament_cmake cpp_header

功能包名:cpp_header
编译类型:build-type
编译工具:ament_cmake

3. 新建节点头文件

//minimal_publisher.hpp
#include <chrono>
#include <functional>
#include <memory>
#include <string>
 
#include "rclcpp/rclcpp.hpp" //包含rclcpp.hpp
#include "std_msgs/msg/string.hpp" //包含string.hpp
//上面两个外部包的使用,除包含外,还需要在配置包依赖 
using namespace std::chrono_literals; 
 
class MinimalPublisher : public rclcpp::Node  //类MinimalPublisher声明
{
public:
  MinimalPublisher();
 
  private:
  void timer_callback();
  rclcpp::TimerBase::SharedPtr timer_;
  rclcpp::Publisher<std_msgs::msg::String>::SharedPtr publisher_;
  size_t count_;
};

4. 头文件中类的定义

//minimal_publisher.cpp
#include "cpp_header/minimal_publisher.hpp"
  
MinimalPublisher::MinimalPublisher () //类MinimalPublisher定义
: Node("minimal_publisher"), count_(0) //初始化计数器
{  
    publisher_ = this->create_publisher<std_msgs::msg::String>("topic", 10); //构建发布器
    timer_ = this->create_wall_timer(
      500ms, std::bind(&MinimalPublisher::timer_callback, this));
}//定时绑定回调函数
 
void MinimalPublisher::timer_callback()//回调函数
{
    auto message = std_msgs::msg::String();
    message.data = "Hello, world! " + std::to_string(count_++);
    RCLCPP_INFO(this->get_logger(), "Publishing: '%s'", message.data.c_str());
    publisher_->publish(message);//发布消息
 }

5. 新建ROS发布节点

//minimal_publisher_node.cpp
#include "cpp_header/minimal_publisher.hpp"
 
int main(int argc, char * argv[])
{
  rclcpp::init(argc, argv);
  rclcpp::spin(std::make_shared<MinimalPublisher>());
  rclcpp::shutdown();
  return 0;
}

6. 修改 package.xml文件

<?xml version="1.0"?>
<?xml-model href="http://download.ros.org/schema/package_format3.xsd" schematypens="http://www.w3.org/2001/XMLSchema"?>
<package format="3">
  <name>cpp_header</name>
  <version>0.0.0</version>
  <description>TODO: Package description</description>
  <maintainer email="wanghq2020@yeah.net">wanghq2023</maintainer>
  <license>TODO: License declaration</license>

  <buildtool_depend>ament_cmake</buildtool_depend>
  #添加依赖包rclcpp、std_msgs
  <depend>rclcpp</depend> 
  <depend>std_msgs</depend>

  <test_depend>ament_lint_auto</test_depend>
  <test_depend>ament_lint_common</test_depend>

  <export>
    <build_type>ament_cmake</build_type>
  </export>
</package>

7. 修改配置文件 CMakeLists.txt

cmake_minimum_required(VERSION 3.8)
project(cpp_header)

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)
#发现依赖包rclcpp、std_msgs
find_package(rclcpp REQUIRED)
find_package(std_msgs REQUIRED)

# uncomment the following section in order to fill in
# further dependencies manually.
# find_package(<dependency> REQUIRED)

include_directories(include)
#生成talker,两个源文件在src中
add_executable(talker src/minimal_publisher_node.cpp src/minimal_publisher.cpp) 
#添加目标依赖
ament_target_dependencies(talker rclcpp std_msgs)
#添加目标talker的安装路径
install(TARGETS
  talker
  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_package()

8. 安装相关依赖

    cd ~/dev_ws/
    rosdep install -i --from-path src --rosdistro humble -y

参数rosdistro 根据自己的ROS版本设置,这里是humble。
9. 编译功能包

cd ~/dev_ws
~/dev_ws$ colcon build --symlink-install --packages-select cpp_header

在编译时,使用参数–packages-select,只编译特定的功能包
编译命令:colcon build,不再是ROS的catkin_make。
10. 环境设置

~/dev_ws$ source ./install/setup.bash

11. VS code 中包含路径设置
在使用code时,如果包含路径设置不完整,常常提示找不到源函数。
设置方式:修改c_cpp_properties.json文件中的 includePATH标签。这里是:

{
    "configurations": [
        {
            "name": "Linux",
            "includePath": [
                "${workspaceFolder}/**",
                "/opt/ros/humble/include/**",
              ],
            "defines": [],
            "compilerPath": "/usr/bin/gcc",
            "cStandard": "c17",
            "cppStandard": "gnu++17",
            "intelliSenseMode": "linux-gcc-x64"
        }
    ],
    "version": 4
}
  1. 节点运行
~/dev_ws$ ros2 run cpp_header talker 
[INFO] [1682586792.656552787] [minimal_publisher]: Publishing: 'Hello, world! 0'
[INFO] [1682586793.156567447] [minimal_publisher]: Publishing: 'Hello, world! 1'
[INFO] [1682586793.656552445] [minimal_publisher]: Publishing: 'Hello, world! 2'

参考文献:
【1】ROS2与C++入门教程-新建ros2包文章来源地址https://www.toymoban.com/news/detail-427521.html

到了这里,关于ROS2 学习--新建ros2工作空间和功能包的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ROS2系统学习番外篇2---用VSCode开发ROS2程序

    在ROS2系统学习3—第一个“Hello World”程序—即工作空间创建与包创建中已经介绍了如何创建ROS的工作空间以及包。在开发大型工程时,往往需要在IDE下面进行开发,因此本篇介绍使用VSCode来搭建ROS2开发环境的方法。 首先用VSCode打开ROS2的工作空间。 按Ctrl+shift+P进入命令模式

    2024年02月13日
    浏览(43)
  • ROS2学习(一):Ubuntu 22.04 安装 ROS2(Iron Irwini)

    一、ROS2(Iron Irwini)介绍 官方文档 Iron Irwini版本支持的平台如下: 二、ROS2(Iron Irwini)安装 1.设置编码 2.使能代码库 现在用apt添加带ROS 2 GPG 将存储库添加到源列表中 3.安装ROS2 Iron 三、ROS2测试 在terminal 1 运行下面的指令: 在terminal 2 运行下面的指令: 四、ROS2卸载 删除RO

    2024年02月10日
    浏览(42)
  • ROS2 学习(五)接口,动作

    通信双方统一规定好接口。比如图像 img,控制运动的线速度和角速度…… 我们也不用了解具体实现,基本就是了解接口会去用就行。 添加接口 不是说我们写一个接口文件就算添加好了,我们也要通过读取文件。 在 CMakeList.txt 中可以看到: 指从相应的相对目录文件中找接口

    2024年02月11日
    浏览(45)
  • ROS2学习笔记三:话题Topic

    目录 前言 1 话题简介 2 常用指令 3 RCLCPP实现实现话题 3.1 创建工作空间 3.2 代码编写 3.2.1 发布端编写 3.2.2 发布端编写 ROS2中的一个重要概念是话题(Topic)。话题是一种通过发布者和订阅者之间进行异步通信的机制。发布者(Publisher)将消息发布到特定的话题上,而订阅者(

    2024年01月20日
    浏览(43)
  • ros2官方文档(基于humble版本)学习笔记

    由于市面上专门讲ROS 2开发的书籍不多,近期看完了《ROS机器人开发实践》其中大部分内容还是基于ROS 1写的,涉及topic,service,action等一些重要的概念,常用组件,建模与仿真,应用(机器视觉,机器语音,SLAM,机械臂),最后一章写了ROS 2的安装,话题通信和服务通信的示

    2024年02月11日
    浏览(40)
  • ROS2安装与入门——古月居视频学习笔记

    双系统安装Ubuntu方法: 在Ubuntu官网下载好 https://cn.ubuntu.com/download/desktop 准备一个U盘作为启动盘 该过程会对U盘格式化 开始-右键-磁盘管理-选择一个磁盘-右键-压缩卷;压缩出40~60G空白分区 下载Rufus 插入U盘开机进入启动项(我的是按F12)选择u盘启动Ubuntu之后进入Ubuntu的安装

    2024年04月22日
    浏览(32)
  • ROS2 Navigation 进阶教程学习笔记 第一章

    Nav2提供了新的拱你和工具,使创建机器人应用程序变得更容易 在本单元中,将学习 1. 通过simple Commander API进行基本Nav2操作 2. 通过followwaypoints使用waypoint follower和task executor插件 3. 禁区和限速区简介 然后您将基于Nav2创建一个基本的自主机器人demo。您将经常在一个仿真仓库中

    2024年02月08日
    浏览(47)
  • ros2学习笔记-CLI工具,记录命令对应操作。

    启动前要检查环境变量: ROS_DOMAIN_ID 和 ROS_LOCALHOST_ONLY 。如果通信时PIN不同,应该首先考虑是不是环境变量设置错误。 Configuring environment 记得source一下ros2。 Turtlesim 是一款用于学习 ROS2 的轻量级模拟器。 它说明了 ROS 2 在最基本的层面上做了什么,让您了解以后将如何处理真

    2024年01月21日
    浏览(42)
  • 【ROS2】为什么要使用ROS2?《ROS2系统特性介绍》

    2010年,ROS1首次发布正式版本,其研发的初衷是为设计PR2(个人服务型机器人)共用的软件架构。但随着ROS1技术的普及,ROS1开始广泛融入各领域无人系统的研发,陆续暴露了系统的诸多问题。为了适应新时代机器人研发的需要,2022年5月,ROS开发者团队推出新版本ROS2。 2007年

    2024年02月09日
    浏览(39)
  • ros2 基础学习 15- URDF:机器人建模方法

    ROS是机器人操作系统,当然要给机器人使用啦,不过在使用之前,还得让ROS认识下我们使用的机器人,如何把一个机器人介绍给ROS呢? 为此,ROS专门提供了一种机器人建模方法——URDF(Unified Robot Description Format,统一机器人描述格式),用来描述机器人外观、性能等各方面属

    2024年02月01日
    浏览(47)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包