ROS1自定义C++头文件的使用--小白教程

创建工作空间:

mkdir -p 自定义工作空间/src
cd 自定义工作空间
catkin_make

这里的自定义工作空间是自己命名的,我命名的是test_ws,接下来创建一个简单的功能包:

cd src
catkin_create_pkg test roscpp rospy std_msgs

其中,test是包名,roscpp rospy std_msgs是包依赖的库。

创建自定义头文件:

在路径:test_ws/src/test/include/test ( 工作空间/src/包文件名/include/包文件名/ )下,创建头文件 test.h:

#ifndef _TEST_H_
#define _TEST_H_

// 声明命名空间
namespace test_ns
{
	// 声明类
    class Test
    {
    public:
    	// 声明函数
        void run();
    };
}

#endif

这里我一开始把include文件夹下的test文件夹删掉了,单独创建了一个test.h文件,后面编译一直没通过,后来在之前的test里面创建test.h就好了。

使用头文件,并在程序中直接实现函数功能:

在 src/ 下,创建 test.cpp 文件,具体代码如下:

#include "ros/ros.h"
#include "test/test.h"

// 自定义函数具体功能的实现
namespace test_ns
{
    void Test::run()
    {
        ROS_INFO("测试成功!");
    }
}

int main(int argc, char *argv[])
{
    // 设置中文编码
    setlocale(LC_ALL, "");
    // ROS 初始化
    ros::init(argc, argv, "test_node");
    // 创建一个 Test 对象
    test_ns::Test mytest;
    // 调用自定义函数
    mytest.run();

    return 0;
}

配置CmakeLists文件:

include_directories(
  include
  ${catkin_INCLUDE_DIRS}
)

add_executable(test1 src/test.cpp)

add_dependencies(test1 ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})

target_link_libraries(test1
  ${catkin_LIBRARIES}
)

这里的可执行文件不能使用test,实测catkin_make会报错,应该是因为目录和项目同名错误,改成别的就能编译通过了
在这里插入图片描述

运行可执行文件:

编译通过后,在终端执行

rosrun test test1

test是包名,test1是编译后的可执行文件,运行结果如下:
在这里插入图片描述
测试完毕!

:C++中命名空间的作用:

(1)免命名冲突:在大型项目中,不同的库和模块可能会使用相同的名称。命名空间允许你将名称隔离开,防止命名冲突。

(2)组织代码:命名空间可以帮助组织代码,使得代码结构更加清晰。你可以按功能或模块将代码分组。

(3)简化代码:使用命名空间可以避免在代码中使用长名称。例如,你可以使用std::vector而不是std::tr1::vector。

(4)控制名称的可见性:命名空间可以控制名称的可见性,只有在同一命名空间中的名称才能被直接访问。

(5)支持模板元编程:在模板编程中,命名空间可以用于实现模板的特化和偏特化。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值