赞
踩
在第一版的 ROS 中launch 一般使用 xml 文件的格式进行编写和运行,但从 ROS2 中增添了 py 的 python 的可执行文件
使用官方推荐的 python 的方式来编写 launch 文件(Python 拥有 xml 和 Yaml )
src 工程文件结构
打开终端运行
ros2 pkg create robot_startup --build-type ament_cmake --destination-directory src
内容为以 500 ms 发布消息,内容为 “one”
#include "rclcpp/rclcpp.hpp" #include <iostream> #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()); command_publisher_ = this->create_publisher<std_msgs::msg::String>("command", 10); // 创建定时器,500ms为周期,定时发布 timer_ = this->create_wall_timer(std::chrono::milliseconds(500), std::bind(&Publisher::timer_callback, this)); } private: // 声明话题发布者 rclcpp::Publisher<std_msgs::msg::String>::SharedPtr command_publisher_; void timer_callback() { // 创建消息 std_msgs::msg::String message; message.data = "One"; // 日志打印 RCLCPP_INFO(this->get_logger(), "Publishing: '%s'", message.data.c_str()); // 发布消息 command_publisher_->publish(message); } // 声名定时器指针 rclcpp::TimerBase::SharedPtr timer_; }; int main(int argc, char **argv) { rclcpp::init(argc, argv); auto node = std::make_shared<Publisher>("topic_One"); rclcpp::spin(node); rclcpp::shutdown(); return 0; }
mkdir launch
touch test.launch.py
然后在 .py 文件后键入
# 导入库
from launch import LaunchDescription
from launch_ros.actions import Node
def generate_launch_description():
"""launch内容描述函数,由ros2 launch 扫描调用"""
action_robot_01 = Node(
package="robot_start_up",
executable="action_robot_01"
)
# 创建LaunchDescription对象launch_description,用于描述launch文件
launch_description = LaunchDescription(
[action_robot_01])
# 返回让ROS2根据launch描述执行节点
return launch_description
LaunchDescription
launch_ros.actions 中的 Node
action_robot_01 = Node(
package=“robot_start_up”,
executable=“action_robot_01”
)
其中:
package 后面填写的内容为功能包的名字
executable 后面填写的内容为功能包中的 cpp文件生成的可执行文件名字
最后返回即可
添加以下几项
find_package(ament_cmake REQUIRED)
find_package(rclcpp REQUIRED)
find_package(std_msgs REQUIRED)
add_executable(action_robot_01 src/action_robot_01.cpp)
ament_target_dependencies(action_robot_01 rclcpp std_msgs)
install(TARGETS
action_robot_01
DESTINATION lib/${PROJECT_NAME}
)
install(DIRECTORY launch
DESTINATION
share/${PROJECT_NAME})
colcon build
source install/build
ros2 run robot_start_up est.launch.py
执行结果:
在执行 ‘colcon build’ 后就会发现,在自己创建的工程目录文件夹 ‘install/功能包/share/launch’下会拷贝原来编辑好的 .py 文件
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。