ROS2图形化方式新建功能包工具- Turtle Nest

news2024/11/14 14:34:35

提示:全文AI生成。


链接:

https://github.com/Jannkar/turtle_nest

配置

Turtle Nest 使用说明(中文版)

一、Turtle Nest 简介

正如海龟巢是幼海龟的诞生地,ROS 2 Turtle Nest 是 ROS 2 包的诞生和成长之地。Turtle Nest 提供了一个易用的图形用户界面(GUI),简化了 ROS 2 包的创建过程。

二、为什么使用 Turtle Nest?

  1. 易于使用:无需深入 ROS 2 文档查找正确命令,也无需手动编辑 CMakeLists.txt 或 setup.py 文件。
  2. 支持多种语言:能够创建 C++ 和/或 Python 节点,这些节点立即可用于开发。
  3. 自动添加必要依赖:自动添加 rclpy、rclcpp 和 std_msgs 等必要依赖。
  4. 启动文件选项:可选择创建启动文件,以便使用单个命令运行节点。
  5. 参数文件选项:提供包含节点参数示例的参数文件选项。
  6. 语言组合:支持在同一包内创建 C++ 和 Python 节点,通常这两种语言需要分别放在不同包中。
  7. 命名规范强制:强制执行命名规范,避免因包名或节点名错误导致构建失败。
  8. 重要细节记忆:记住工作区路径、维护者姓名和维护者电子邮件等未来包的重要信息。

三、先决条件

  • Ubuntu 22 或 24
  • ROS 2(以下任一版本)
    • Humble
    • Iron
    • Jazzy
    • Rolling

四、安装

  1. 创建一个新的 ROS 2 工作区(如果你还没有的话)。
  2. 克隆 Turtle Nest 仓库。
  3. 安装依赖并构建应用程序。
 

bash复制代码

mkdir -p $HOME/ros2_ws/src/
cd $HOME/ros2_ws/src/
git clone https://github.com/Jannkar/turtle_nest.git
cd ..
sudo apt-get update
rosdep install --from-paths src --ignore-src -r -y --rosdistro ${ROS_DISTRO}
colcon build
source install/setup.bash
mkdir -p $HOME/ros2_ws/src/  
cd $HOME/ros2_ws/src/  
git clone https://github.com/Jannkar/turtle_nest.git  
cd ..  
sudo apt-get update  
rosdep install --from-paths src --ignore-src -r -y --rosdistro ${ROS_DISTRO}  
colcon build  
source install/setup.bash

 

如果出现网络问题,可用kk。

编译一次通过。 

五、使用

  1. 运行应用程序

    turtle-nest

    bash复制代码

    turtle-nest

    在 GUI 中填写必要信息来创建新的 ROS 2 包。

  2. 构建和配置新包

    cd $HOME/ros2_ws/  
    colcon build  
    source install/setup.bash

    bash复制代码

    cd $HOME/ros2_ws/
    colcon build
    source install/setup.bash
  3. 运行节点或启动文件

    • 运行节点:

      ros2 run <package_name> <node_name>

      bash复制代码

      ros2 run <package_name> <node_name>
    • 启动启动文件:

      ros2 launch <package_name> <launch_file_name>

      bash复制代码

      ros2 launch <package_name> <launch_file_name>

六、总结

Turtle Nest 为 ROS 2 开发者提供了一个方便、快捷的包创建工具,极大简化了包创建的复杂流程,使开发者能够更专注于核心功能的开发。通过其图形化界面和自动化功能,Turtle Nest 降低了 ROS 2 开发的门槛,使得新手和资深开发者都能轻松上手。


 

 

 

 

 

 

有误,但可用。

合适规范:


案例 

在ROS 2中使用turtlesim画圆的C++代码需要创建一个能够发布速度指令到/turtle1/cmd_vel话题的节点。这些速度指令将告诉turtlesim节点如何控制海龟的移动,从而画出一个圆。以下是一个简单的C++示例,用于在ROS 2中实现这一功能:

首先,确保你的ROS 2环境中已经安装了turtlesim包。然后,创建一个新的ROS 2包(如果还没有的话),并添加必要的依赖项。

接下来,在你的包目录中,创建一个C++源文件,例如src/draw_circle_main.cpp,并添加以下代码:

 

cpp复制代码

#include <chrono>
#include <functional>
#include <memory>
#include <string>
#include "rclcpp/rclcpp.hpp"
#include "geometry_msgs/msg/twist.hpp"
using namespace std::chrono_literals;
class DrawCircleNode : public rclcpp::Node
{
public:
DrawCircleNode()
: Node("draw_circle_node"), linear_velocity_(1.0), angular_velocity_(1.0)
{
RCLCPP_INFO(this->get_logger(), "Draw Circle Node has been started.");
// 创建一个发布者,发布到/turtle1/cmd_vel话题
twist_pub_ = this->create_publisher<geometry_msgs::msg::Twist>("/turtle1/cmd_vel", 10);
// 创建一个定时器,以固定的间隔发布速度指令
timer_ = this->create_wall_timer(
100ms, std::bind(&DrawCircleNode::publish_velocity, this));
}
private:
void publish_velocity()
{
auto message = geometry_msgs::msg::Twist();
// 设置线速度和角速度以画出圆
message.linear.x = linear_velocity_; // 线速度
message.angular.z = angular_velocity_; // 角速度
RCLCPP_INFO(this->get_logger(), "Publishing velocity: linear.x: %f, angular.z: %f", message.linear.x, message.angular.z);
twist_pub_->publish(message);
}
rclcpp::Publisher<geometry_msgs::msg::Twist>::SharedPtr twist_pub_;
rclcpp::TimerBase::SharedPtr timer_;
double linear_velocity_;
double angular_velocity_;
};
int main(int argc, char *argv[])
{
rclcpp::init(argc, argv);
rclcpp::spin(std::make_shared<DrawCircleNode>());
rclcpp::shutdown();
return 0;
}

在这个示例中,DrawCircleNode类继承自rclcpp::Node,并创建了一个发布者twist_pub_,它发布到/turtle1/cmd_vel话题。publish_velocity方法被定时器调用,以固定的间隔(在这个例子中是100毫秒)发布速度消息。

请注意,线速度(linear_velocity_)和角速度(angular_velocity_)的值可以根据需要调整,以改变圆的半径和绘制速度。

接下来,你需要在你的CMakeLists.txt中添加构建这个源文件的指令,确保包含了必要的依赖项,如rclcppgeometry_msgs

最后,构建你的包:

 

bash复制代码

colcon build

构建完成后,确保turtlesim节点正在运行:

 

bash复制代码

ros2 run turtlesim turtlesim_node

然后,在另一个终端窗口中运行你的draw_circle节点:

 

bash复制代码

ros2 run <your_package_name> draw_circle

<your_package_name>替换为你创建的ROS 2包的名称。你应该会看到turtlesim窗口中的海龟开始画出一个圆。


为了在ROS 2中修改CMakeLists.txt以将src/draw_circle_main.cpp配置为可执行目标文件,你需要按照以下步骤进行:

  1. 找到CMakeLists.txt
    在你的ROS 2包的根目录下找到CMakeLists.txt文件。

  2. 添加可执行文件
    CMakeLists.txt中,使用add_executable函数来声明你的可执行文件,并指定源文件。

  3. 链接依赖项
    使用ament_packagetarget_link_libraries来链接你的可执行文件到所需的ROS 2库和依赖项。

  4. 安装可执行文件
    使用install函数来安装你的可执行文件到适当的目录。

以下是一个示例CMakeLists.txt,它配置了src/draw_circle_main.cpp作为可执行目标文件:

 

cmake复制代码

cmake_minimum_required(VERSION 3.5)
project(your_package_name)
# 查找依赖的包
find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)
find_package(geometry_msgs REQUIRED)
# 添加可执行文件
add_executable(draw_circle src/draw_circle_main.cpp)
# 链接依赖的库
ament_target_dependencies(
draw_circle
rclcpp
geometry_msgs
)
# 安装可执行文件
install(TARGETS
draw_circle
DESTINATION lib/${PROJECT_NAME})
# ament包配置
ament_package()

请确保将your_package_name替换为你的实际ROS 2包的名称。

在这个示例中:

  • add_executable(draw_circle src/draw_circle_main.cpp)声明了一个名为draw_circle的可执行文件,源文件是src/draw_circle_main.cpp
  • ament_target_dependencies(draw_circle rclcpp geometry_msgs)指定了draw_circle可执行文件依赖的ROS 2库。
  • install(TARGETS draw_circle DESTINATION lib/${PROJECT_NAME})指定了安装可执行文件的目录。通常,这会是你的包安装目录下的lib子目录,但你可以根据需要更改它。
  • ament_package()是ament构建系统的必要命令,用于配置包。

完成这些修改后,你可以运行colcon build来构建你的包,并生成draw_circle可执行文件。构建成功后,你就可以使用ros2 run your_package_name draw_circle来运行你的程序了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2117918.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JavaEE:多线程进阶(线程安全的集合类)

文章目录 线程安全的集合类多线程环境使用ArrayList多线程环境使用队列多线程环境使用哈希表HashtableConcurrentHashMap 线程安全的集合类 之前学习的集合类大部分都不是线程安全的. 比如ArrayList,Queue,HashMap等等,这都是线程不安全的. Vector,Stack,Hashtable,这些集合类…

使用Git进行版本控制:前端开发者的最佳实践

聚沙成塔每天进步一点点 本文回顾 ⭐ 专栏简介使用Git进行版本控制&#xff1a;前端开发者的最佳实践1. 引言2. Git的基本概念2.1 版本控制系统的作用2.2 Git 的基本操作 3. Git最佳实践3.1 使用有意义的提交信息3.2 小步提交&#xff0c;频繁提交3.3 使用分支进行开发3.4 代码…

SparkSQL SET和RESET

前言 我们在用代码写spark程序的时候,如果要设置一些配置参数,可以通过: SparkConf val conf = new SparkConf().setMaster("local[2]").setAppName("CountingSheep") val sc = new SparkContext(conf)spark-submit ./bin/spark-submit --name "M…

一个vue前端的例子(六)如何获取table一行的id

比如我们要删除列表一行 vue中template中的scope到底是个什么&#xff1f;_vue template scope-CSDN博客 <el-button click"edit_tool(scope.$index)" type"warning" icon"el-icon-edit">编辑</el-button> 获取列表下标

报错module ‘markdown‘ has no attribute ‘version‘解决方法

问题&#xff1a; 在配置环境时&#xff0c;遇到报错 module markdown has no attribute version 解决方法&#xff1a; 1.打开报错目录下的文件compat.py 2.将 markdown.version 更改为 markdown.__version__ (注意是双下划线&#xff09;

2005-2020年各省乡村高质量发展指数数据

2005-2020年各省乡村高质量发展指数数据 1、时间&#xff1a;2005-2020年 2、来源&#xff1a;农村年鉴、统计年鉴、人口和就业统计年鉴 2、指标&#xff1a;乡村高质量发展指数、每公顷农业机械动力&#xff08;千瓦/公顷&#xff09;、农田节水灌溉率、人均粮食产量&#…

OpenGL/GLUT实践:GLUT环境配置+实现反弹运动的三角形动画与键盘控制(电子科技大学信软图形与动画Ⅱ实验)

源码见GitHub&#xff1a;A-UESTCer-s-Code 文章目录 1 运行效果2 实验过程2.1 环境配置2.2 绘制三角形2.2.1 渲染函数2.2.2 主函数2.2.3 运行结果 2.3 调整窗口大小2.4 简单动画与按键控制2.4.1 简单旋转2.4.2 键盘控制 2.5 窗口反弹动画2.5.1 处理窗口大小变化2.5.2 渲染函数…

使用 `Vitesse Uni App` 创建微信小程序并配置 uview-plus 和 alovajs

使用 Vitesse Uni App 创建微信小程序 Vitesse Uni App&#xff1a;https://vitesse-docs.netlify.app/ UI&#xff1a;https://uview-plus.jiangruyi.com/components/intro.html 编辑器&#xff1a;VScode 安装 Volar&#xff08;Vue Offices&#xff09;插件 创建项目 pnpm …

并发编程:ReentrantLock

一、ReentrantLock 是什么&#xff1f; ReentrantLock 实现了 Lock 接口&#xff0c;是一个可重入且独占式的锁&#xff0c;和 synchronized 关键字类似。不过&#xff0c;ReentrantLock 更灵活、更强大&#xff0c;增加了轮询、超时、中断、公平锁和非公平锁等高级功能。 pu…

十一、C语言:字符串函数

目录 一、strlen 二、strcpy 三、strcat 四、strcmp 五、strstr 六、strtok 七、strerror 一、strlen 注意&#xff1a;strlen()函数的返回值是size_t&#xff0c;两个size_t相减仍为无符号数 int main() {char arr[10] "abc";char brr[10] "abc123&quo…

高基数 GroupBy 在 SLS SQL 中的查询加速

作者&#xff1a;顾汉杰&#xff08;执少&#xff09; 什么是高基数 GroupBy 简单来说&#xff0c;想要分析的数据&#xff0c;拥有超多的“唯一值计数”&#xff08;Distinct Count&#xff09;&#xff0c;而我们需要对这些数据进行分组分析&#xff08;如统计次数、排名、…

如何高效调试JavaScript代码:从Console到断点调试

聚沙成塔每天进步一点点 本文回顾 ⭐ 专栏简介如何高效调试JavaScript代码&#xff1a;从Console到断点调试1. 引言2. 基本调试工具概览2.1 浏览器开发者工具&#xff08;DevTools&#xff09;如何打开浏览器开发者工具&#xff1f; 2.2 常用的调试面板 3. 基本调试方法3.1 使用…

Springboot邮箱发送:如何快速集成并发信?

Springboot邮箱发送性能如何&#xff1f;怎么用SpringBoot发信&#xff1f; Springboot作为一款流行的Java框架&#xff0c;提供了简便的方式来集成邮件发送功能。AokSend将详细介绍如何快速集成Springboot邮箱发送功能&#xff0c;并实现高效的邮件发送。 Springboot邮箱发送…

考拉悠然产品发布会丨以悠然远智全模态AI应用平台探索AI行业应用

9月6日&#xff0c;成都市大模型新技术新成果发布暨供需对接系列活动——考拉悠然专场&#xff0c;在成都市高新区菁蓉汇盛大举行。考拉悠然重磅发布了悠然远智丨全模态AI应用平台&#xff0c;并精彩展示了交通大模型应用——智析快处等最新的AI产品和技术成果。 在四川省科学…

警用车载4G5G无线视频监控技术方案

目录 一、背景 二、系统方案设计 1.1系统架构 1.2车载终端 1.3监控中心 1.4传输网络 三、警用车载监控功能特点 2.1警用车载监控功能 &#xff08;1&#xff09;实时视频监控 &#xff08;2&#xff09;录像存储回放 &#xff08;3&#xff09;车载报警联动 &#…

如何清理C盘临时文件,释放10G以上空间

在我们日常使用电脑系统的过程中&#xff0c;想必大家都曾遇到过这样的情况&#xff1a;明明没有主动安装任何软件&#xff0c;然而 C 盘的可用空间却逐渐减少&#xff0c;甚至有时会收到系统发出的空间不足的提醒。 其实&#xff0c;在系统中存在这样一个至关重要的临时文件夹…

【Prometheus】PromQL聚合函数详细用法与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…

基于springboot+vue乒乓球预约管理系统

基于springbootvuemysql实现的乒乓球预约管理系统&#xff08;源码数据库部署视频&#xff09; ### 主要技术 SpringBoot、LayUI、Vue、MySQL ### 系统角色 用户、管理员 ### 系统功能 前台&#xff1a; 首页、乒乓球场、公告信息、留言反馈、个人中心 后台&#xff1a; …

Nginx解析:入门笔记

&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》《MYSQL》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 ✨欢迎加入探索nginx之旅✨ &#x1f44b; 大家好&#xff01;文本学习和探索Nginx配置。…

【C++ Primer Plus习题】13.2

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream> #include "classic.h&quo…