【ros2】ros2环境安装与基础入门

这篇具有很好参考价值的文章主要介绍了【ros2】ros2环境安装与基础入门。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

😏★,°:.☆( ̄▽ ̄)/$:.°★ 😏
这篇文章主要介绍ros2环境安装与基础入门。
学其所用,用其所学。——梁启超
欢迎来到我的博客,一起学习,共同进步。
喜欢的朋友可以关注一下,下次更新不迷路🥞

😏1. ros2介绍

ROS 2 (Robot Operating System 2)是一个开源的机器人操作系统,它是ROS(Robot Operating System)的下一代版本。它提供了一系列工具、库和约定,用于构建机器人应用程序。与ROS 1相比,ROS 2具有更强大的功能,更好的性能和更好的可靠性。

ROS 2采用分布式消息传递机制,可以在不同的计算机上进行通信,并支持多种编程语言,包括C++、Python、Java等。ROS 2还提供了更好的安全性和实时性,使其适用于更广泛的机器人应用场景。

ROS 2的核心组件包括:

rclcpp:ROS客户端库,在C++中使用。 rclpy:ROS客户端库,在Python中使用。
rosidl:服务接口定义语言,用于描述ROS消息和服务。 rmw:ROS中间件,用于管理节点之间的通信。
ros2cli:命令行界面工具,用于管理ROS 2系统。

ROS2的一大特点是集成了DDS,支持的DDS有:

Fast RTPS:该实现基于eProsima的Fast RTPS库,是ROS 2默认的DDS实现。Fast RTPS是一个高性能、可靠的DDS实现,采用了快速序列化机制(Fast Buffers)和动态类型支持(DynamicTypes),支持多种平台和编程语言。
Cyclone DDS:该实现由ADLINK开发,是另一个高性能、开源的DDS实现。Cyclone DDS支持多种平台和编程语言,并提供了一些高级功能,如分布式安全和QoS配置。
RTI Connext DDS:该实现由Real-Time Innovations公司开发,是一个商业级别的DDS实现。RTI Connext DDS提供了广泛的功能和工具,如实时监测、故障诊断和网络优化等。

😊2. ros2安装

Ubuntu 18.04可以安装ROS 2 Dashing DiademataROS 2 Eloquent Elusor版本。建议使用Eloquent版本,因为它是最新的长期支持版本,并提供了更多的功能和改进。

小鱼的安装命令:wget http://fishros.com/install -O fishros && . fishros

根据需求选择对应的ros2版本即可。

😆3. ros2基础使用

示例测试:

# 发布订阅
ros2 run demo_nodes_cpp listener
ros2 run demo_nodes_cpp talker
# 小乌龟
ros2 run turtlesim turtlesim_node
ros2 run turtlesim turtle_teleop_key
# CLI
ros2 pkg list
ros2 node list
ros2 node info <node_name>
ros2 pkg create <package-name>  --build-type  {cmake,ament_cmake,ament_python}  --dependencies <依赖名字> # 创建功能包
ros2 bag record /topic_name
rviz2
gazebo

代码模板:https://github.com/mikeferguson/ros2_cookbook

国内参考:https://fishros.com/d2lros2foxy/#/codebook/README


cmake工程引用rclcpp示例:

创建main.cpp,写一个hello_world_cpp节点示例:

#include "rclcpp/rclcpp.hpp"
#include <iostream>

int main(int argc, char** argv)
{
    rclcpp::init(argc, argv);
    std::cout << "Hello ROS2!" << std::endl;
    rclcpp::spin(std::make_shared<rclcpp::Node>("hello_world_cpp"));
    return 0;
}

创建CMakeLists.txt,引用rclcpp头文件和链接库:

cmake_minimum_required(VERSION 3.11)
project(main)

find_package(rclcpp REQUIRED)
add_executable(main main.cpp)
target_link_libraries(main rclcpp::rclcpp)

然后编译即可:

mkdir build && cd build
cmake ..
make
./main

安装colcon编译工具并测试案例:

# 安装编译工具
sudo apt-get install python3-colcon-common-extensions
# 下载源码
mkdir colcon_test && cd colcon_test
git clone https://ghproxy.com/https://github.com/ros2/examples src/examples -b eloquent
colcon build
# 运行自己编译的节点
source install/setup.bash
ros2 run examples_rclcpp_minimal_subscriber subscriber_member_function
source install/setup.bash
ros2 run examples_rclcpp_minimal_publisher publisher_member_function

运行如下:

【ros2】ros2环境安装与基础入门
【ros2】ros2环境安装与基础入门
【ros2】ros2环境安装与基础入门

😆4. ros2节点编写

简单的节点

下面演示一个ROS2节点的创建:

# 新建节点目录
mkdir -p ros2_ws/src
# 创建功能包(ament_cmake编译,rclcpp依赖)
cd ros2_ws/src
ros2 pkg create name_of_pack --build-type ament_cmake --dependencies rclcpp
# 创建编写main.cpp
touch name_of_pack/src/main.cpp
# 修改(末尾追加)CMakeLists.txt
add_executable(RosNode src/main.cpp)
ament_target_dependencies(RosNode rclcpp)
install(TARGETS
  RosNode 
  DESTINATION lib/${PROJECT_NAME}
)
# 编译运行
colcon build
source install/setup.bash
ros2 run name_of_pack RosNode
# 测试
ros2 node list
ros2 node info /RosNode_2
#include "rclcpp/rclcpp.hpp"

int main(int argc, char **argv)
{
    /* 初始化rclcpp  */
    rclcpp::init(argc, argv);
    /* 创建节点 */
    auto node = std::make_shared<rclcpp::Node>("RosNode_2");
    /* 打印日志 */
    RCLCPP_INFO(node->get_logger(), "ros2节点已经启动.");
    /* 运行节点,并检测退出信号 Ctrl+C */
    rclcpp::spin(node);
    /* 停止运行 */
    rclcpp::shutdown();
    return 0;
}

发布者和订阅者

下面创建一个发布者和订阅者:

# 新建目录
mkdir -p mytest_ws/src
cd mytest_ws/src
ros2 pkg create subscribe_and_publish --build-type ament_cmake --dependencies rclcpp
touch subscribe_and_publish/src/publisher.cpp
touch subscribe_and_publish/src/subscriber.cpp
# CMakeLists.txt
find_package(rclcpp REQUIRED)
find_package(std_msgs REQUIRED)
add_executable(publisher src/publisher.cpp)
ament_target_dependencies(publisher rclcpp std_msgs)
add_executable(subscribe1 src/subscriber.cpp)
ament_target_dependencies(subscribe1 rclcpp std_msgs)

install(TARGETS
  publisher
  subscriber
  DESTINATION lib/${PROJECT_NAME}
)
# package.xml
  <depend>rclcpp</depend>
  <depend>std_msgs</depend>
# 编译运行
colcon build
ros2 run subscribe_and_publish publisher
ros2 run subscribe_and_publish subscriber
// publisher.cpp
#include "rclcpp/rclcpp.hpp"
#include "std_msgs/msg/string.hpp"

class Publisher : public rclcpp::Node
{
public:
    // 构造函数,参数为节点名称
    Publisher(std::string name) : Node(name)
    {
        RCLCPP_INFO(this->get_logger(), "大家好,我是%s.", name.c_str());
        // 创建发布者
        subscribe_and_publish_publisher_ = this->create_publisher<std_msgs::msg::String>("subscribe_and_publish", 10);
        // 创建定时器,500ms为周期,定时发布
        timer_ = this->create_wall_timer(std::chrono::milliseconds(500), std::bind(&Publisher::timer_callback, this));
    }

private:
    void timer_callback()
    {
        // 创建消息
        std_msgs::msg::String message;
        message.data = "1234";
        // 日志打印
        RCLCPP_INFO(this->get_logger(), "Publishing: '%s'", message.data.c_str());
        // 发布消息
        subscribe_and_publish_publisher_->publish(message);
    }
    // 声名定时器指针
    rclcpp::TimerBase::SharedPtr timer_;
    // 声明话题发布者指针
    rclcpp::Publisher<std_msgs::msg::String>::SharedPtr subscribe_and_publish_publisher_;
};

int main(int argc, char **argv)
{
    rclcpp::init(argc, argv);
    /* 产生一个的节点 */
    auto node = std::make_shared<Publisher>("publisher");
    /* 运行节点,并检测退出信号 */
    rclcpp::spin(node);
    rclcpp::shutdown();
    return 0;
}
// subscriber.cpp
#include "rclcpp/rclcpp.hpp"
#include "std_msgs/msg/string.hpp"

class Subscribe : public rclcpp::Node
{
public:
    Subscribe(std::string name) : Node(name)
    {
        RCLCPP_INFO(this->get_logger(), "大家好,我是%s.", name.c_str());
        // 创建一个订阅者订阅话题
        subscribe_and_publish_subscribe_ = this->create_subscription<std_msgs::msg::String>("subscribe_and_publish", 10, std::bind(&Subscribe::command_callback, this, std::placeholders::_1));
    }

private:
    // 声明一个订阅者
    rclcpp::Subscription<std_msgs::msg::String>::SharedPtr subscribe_and_publish_subscribe_;
    // 收到话题数据的回调函数
    void command_callback(const std_msgs::msg::String::SharedPtr msg)
    {
        RCLCPP_INFO(this->get_logger(), "收到[%s]指令", msg->data.c_str());
    };
};

int main(int argc, char **argv)
{
    rclcpp::init(argc, argv);
    /*产生一个的节点*/
    auto node = std::make_shared<Subscribe>("subscriber");
    /* 运行节点,并检测退出信号*/
    rclcpp::spin(node);
    rclcpp::shutdown();
    return 0;
}

【ros2】ros2环境安装与基础入门

以上。文章来源地址https://www.toymoban.com/news/detail-485989.html

到了这里,关于【ros2】ros2环境安装与基础入门的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【ROS2机器人入门到实战】Gazebo仿真环境搭建

    当前平台文章汇总地址:ROS2机器人从入门到实战 获取完整教程及配套资料代码,请关注公众号鱼香ROS获取 教程配套机器人开发平台:两驱版| 四驱版 为方便交流,搭建了机器人技术问答社区:地址 fishros.org.cn 本节我们要在Gazebo中建立一个测试的环境,其实也很简单,利用

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

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

    2024年04月22日
    浏览(32)
  • 【ROS2机器人入门到实战】Cartographer介绍与安装

    当前平台文章汇总地址:ROS2机器人从入门到实战 获取完整教程及配套资料代码,请关注公众号鱼香ROS获取 教程配套机器人开发平台:两驱版| 四驱版 为方便交流,搭建了机器人技术问答社区:地址 fishros.org.cn Cartographer是Google开源的一个可跨多个平台和传感器配置以2D和3D形

    2024年02月02日
    浏览(47)
  • 【ROS2机器人入门到实战】Nav2导航框架介绍与安装

    当前平台文章汇总地址:ROS2机器人从入门到实战 获取完整教程及配套资料代码,请关注公众号鱼香ROS获取 教程配套机器人开发平台:两驱版| 四驱版 为方便交流,搭建了机器人技术问答社区:地址 fishros.org.cn 上一节我们对机器人导航过程中所用到的2D地图进行了介绍,本节

    2024年02月04日
    浏览(41)
  • 【ROS2机器人入门到实战】ROS2话题入门

    当前平台文章汇总地址:ROS2机器人从入门到实战 获取完整教程及配套资料代码,请关注公众号鱼香ROS获取 教程配套机器人开发平台:两驱版| 四驱版 为方便交流,搭建了机器人技术问答社区:地址 fishros.org.cn 话题是ROS2中最常用的通信方式之一,话题通信采取的是订阅发布

    2024年02月04日
    浏览(66)
  • 【ROS2机器人入门到实战】ROS2服务入门

    当前平台文章汇总地址:ROS2机器人从入门到实战 获取完整教程及配套资料代码,请关注公众号鱼香ROS获取 教程配套机器人开发平台:两驱版| 四驱版 为方便交流,搭建了机器人技术问答社区:地址 fishros.org.cn 大家好,帅鱼又蹬蹬蹬的游回来了。本节小鱼将要带大家一起了解

    2024年02月07日
    浏览(61)
  • 【ROS2机器人入门到实战】2.ROS与ROS2对比

    当前平台文章汇总地址:ROS2机器人从入门到实战 获取完整教程及配套资料代码,请关注公众号鱼香ROS获取 教程配套机器人开发平台:两驱版| 四驱版 为方便交流,搭建了机器人技术问答社区:地址 fishros.org.cn 经过上一节的学习,相信你已经对ROS和ROS2的发展有了一定的了解

    2024年02月04日
    浏览(48)
  • 【ROS2机器人入门到实战】ROS2节点介绍

    当前平台文章汇总地址:ROS2机器人从入门到实战 获取完整教程及配套资料代码,请关注公众号鱼香ROS获取 教程配套机器人开发平台:两驱版| 四驱版 为方便交流,搭建了机器人技术问答社区:地址 fishros.org.cn ROS2中每一个节点也是只负责一个单独的模块化的功能(比如一个

    2024年02月06日
    浏览(57)
  • 【ROS2机器人入门到实战】ROS2接口介绍

    当前平台文章汇总地址:ROS2机器人从入门到实战 获取完整教程及配套资料代码,请关注公众号鱼香ROS获取 教程配套机器人开发平台:两驱版| 四驱版 为方便交流,搭建了机器人技术问答社区:地址 fishros.org.cn 本节小鱼将会带你学习认识一个新的概念,叫做interface,即接口。

    2024年02月05日
    浏览(52)
  • 【ROS2机器人入门到实战】4.ROS2初体验

    当前平台文章汇总地址:ROS2机器人从入门到实战 获取完整教程及配套资料代码,请关注公众号鱼香ROS获取 教程配套机器人开发平台:两驱版| 四驱版 为方便交流,搭建了机器人技术问答社区:地址 fishros.org.cn 通过几个简单的小例子来体验ROS2软件库和工具集。 游戏内容:很

    2024年02月04日
    浏览(73)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包