提示:全文AI生成。
链接:
https://github.com/Jannkar/turtle_nest
配置
Turtle Nest 使用说明(中文版)
一、Turtle Nest 简介
正如海龟巢是幼海龟的诞生地,ROS 2 Turtle Nest 是 ROS 2 包的诞生和成长之地。Turtle Nest 提供了一个易用的图形用户界面(GUI),简化了 ROS 2 包的创建过程。
二、为什么使用 Turtle Nest?
- 易于使用:无需深入 ROS 2 文档查找正确命令,也无需手动编辑 CMakeLists.txt 或 setup.py 文件。
- 支持多种语言:能够创建 C++ 和/或 Python 节点,这些节点立即可用于开发。
- 自动添加必要依赖:自动添加 rclpy、rclcpp 和 std_msgs 等必要依赖。
- 启动文件选项:可选择创建启动文件,以便使用单个命令运行节点。
- 参数文件选项:提供包含节点参数示例的参数文件选项。
- 语言组合:支持在同一包内创建 C++ 和 Python 节点,通常这两种语言需要分别放在不同包中。
- 命名规范强制:强制执行命名规范,避免因包名或节点名错误导致构建失败。
- 重要细节记忆:记住工作区路径、维护者姓名和维护者电子邮件等未来包的重要信息。
三、先决条件
- Ubuntu 22 或 24
- ROS 2(以下任一版本)
- Humble
- Iron
- Jazzy
- Rolling
四、安装
- 创建一个新的 ROS 2 工作区(如果你还没有的话)。
- 克隆 Turtle Nest 仓库。
- 安装依赖并构建应用程序。
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。
编译一次通过。
五、使用
-
运行应用程序:
turtle-nest
bash复制代码
turtle-nest
在 GUI 中填写必要信息来创建新的 ROS 2 包。
-
构建和配置新包:
cd $HOME/ros2_ws/ colcon build source install/setup.bash
bash复制代码
cd $HOME/ros2_ws/
colcon build
source install/setup.bash
-
运行节点或启动文件:
-
运行节点:
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
中添加构建这个源文件的指令,确保包含了必要的依赖项,如rclcpp
和geometry_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
配置为可执行目标文件,你需要按照以下步骤进行:
-
找到
CMakeLists.txt
:
在你的ROS 2包的根目录下找到CMakeLists.txt
文件。 -
添加可执行文件:
在CMakeLists.txt
中,使用add_executable
函数来声明你的可执行文件,并指定源文件。 -
链接依赖项:
使用ament_package
和target_link_libraries
来链接你的可执行文件到所需的ROS 2库和依赖项。 -
安装可执行文件:
使用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
来运行你的程序了。