1. 创建C++功能包

cd ~/ws/src,输入如下指令创建功能包

ros2 pkg create dog --build-type ament_cmake --dependencies rclcpp

创建结果如下:

在~/ws/src/dog/src下创建CPP文件

2. 代码编写

导入库时,发现如下问题,无法找到相关库(仅在VScode中出现如下问题)

打开"include path setting",添加/opt/ros/eloquent/**

 在dog.cpp文件中编写如下代码:

#include "rclcpp/rclcpp.hpp"

int main(int argc, char **argv){
    //init client
    rclcpp::init(argc, argv);
    //create new node
    auto node = std::make_shared<rclcpp::Node>("dog");
    RCLCPP_INFO(node->get_logger(), "Hello, tom. I will bite you.");
    //spin
    rclcpp::spin(node);
    //shutdown
    rclcpp::shutdown();
}

3. 配置文件修改

打开~/ws/src/dog/CMakeLists.txt,编辑添加如下内容

add_executable(dog_node src/dog.cpp)
ament_target_dependencies(dog_node rclcpp)

install(TARGETS
 dog_node 
 DESTINATION lib/${PROJECT_NAME}
)

其中,dog_node指的是代码中的功能包节点名称。

4. 编译及运行

cd ~/ws,输入如下命令

colcon build --packages-select dog

source更新

source install/setup.bash

 查看功能包

运行功能包

 5. 代码优化

更新如下代码

#include "rclcpp/rclcpp.hpp"

class DogBarkNode: public rclcpp::Node
{
private:
    /* data */
public:
    DogBarkNode(std::string name):Node(name)
    {
        RCLCPP_INFO(this->get_logger(), "Hello, tom. I will bark at you.");
//      RCLCPP_INFO(this->get_logger(), "Hello, tom. %s will bark at you.", name.c_str());
    }

};


int main(int argc, char **argv){
    //init client
    rclcpp::init(argc, argv);
    //create new node
    auto node = std::make_shared<DogBarkNode>("dog_node_bark");
    //spin
    rclcpp::spin(node);
    //shutdown
    rclcpp::shutdown();
}

修改配置文件CMakeLists.txt

add_executable(dog_node_bark src/dog_bark.cpp)
ament_target_dependencies(dog_node_bark rclcpp)

install(TARGETS
 dog_node_bark
 DESTINATION lib/${PROJECT_NAME}
)

参考链接:

【鱼香ROS】动手学ROS2|ROS2基础入门到实践教程|小鱼带你手把手学习ROS2_哔哩哔哩_bilibili

Logo

聚焦RDK与具身智能,汇集机器人开发教程、开源案例和技术交流

更多推荐