【ROS自定义文件】自定义头文件及源文件的调用

24 篇文章 3 订阅
20 篇文章 0 订阅
本文记录ROS中的自定义文件的调用,主要包括自定义头文件和源文件的使用。
1 自定义C++头文件的调用

注意这个文件目录的结构,尤其是 hello.h 这个自定义的头文件在 include/plumbing_head
文件夹之下,这个会直接影响后续头文件的引用。

在这里插入图片描述
hello.h文件的内容

#ifndef _HELLO_H
#define _HELLO_H
namespace hello_ns{
class HelloPub {
public:
    void run();
};
}
#endif

src下面定义hello.cpp
在这里插入图片描述
hello.cpp的内容

#include "ros/ros.h"
#include "plumbing_head/hello.h"
//"/home/Documents/learn/ros/ros_ws_demo1/src/plumbing_head/include/**",
namespace hello_ns {
void HelloPub::run(){
    ROS_INFO("自定义头文件的使用....");
}
}
int main(int argc, char *argv[])
{
    setlocale(LC_ALL,"");
    ros::init(argc,argv,"test_head_node");
    hello_ns::HelloPub helloPub;
    helloPub.run();
    return 0;
}
上述源代码如何起作用?仍需下面的配置
1 项目目录下的c_cpp_properties.json文件的 includePath 配置该 .h 头文件所在的位置,一定要注意前面说的hello.h 这个自定义的头文件在 include/plumbing_head文件夹下
 "includePath": [
        "/home/Documents/learn/ros/ros_ws_demo1/src/plumbing_head/include/**"
        ],
2 配置 CMakeLists.txt
include_directories(
 include
  ${catkin_INCLUDE_DIRS}
)
add_executable(hello_node src/hello.cpp)
add_dependencies(hello_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
target_link_libraries(hello_node
  ${catkin_LIBRARIES}
)
然后即可编译运行,启动roscore后,尝试运行该节点即可,就可以发现正常执行了。

在这里插入图片描述

2 自定义C++文件的调用

同样是在该工作空间下,定义haha.cpp 和 test_haha.cpp,一个为源文件,一个为测试文件。实现逻辑为:在haha.cpp中对函数进行了定义,而test_haha.cpp中对haha.cpp中定义的函数进行调用。
在这里插入图片描述

haha.cpp 内容

#include "plumbing_head/hello.h"
#include "ros/ros.h"
namespace hello_ns{
void HelloPub::run(){
    ROS_INFO("hello,head and src ...");
}
}

test_haha.cpp内容

#include "ros/ros.h"
#include "plumbing_head/hello.h"
int main(int argc,char *argv[]){
    ros::init(argc,argv,"head_src");
    hello_ns::HelloPub helloPub;
    helloPub.run();
    return 0;
}
难点还是在于配置层面,在以上配置CMakeLists.txt基础上,再进行下面的配置
add_library(head_src
  include/${PROJECT_NAME}/hello.h
  src/haha.cpp
)
add_dependencies(head_src ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
add_executable(test_haha_node src/test_haha.cpp)
add_dependencies(test_haha_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})
target_link_libraries(head_src
  ${catkin_LIBRARIES}
)
target_link_libraries(test_haha_node
  head_src
  ${catkin_LIBRARIES}
)
然后进行编译后,启动roscore节点,然后运行test_haha_node。

在这里插入图片描述

3 Python模块的自定义引用

Python的文件结构如下
在这里插入图片描述
haha.py

num = 10

test_haha.py

#! /usr/bin/env python
# -*- coding:utf-8 -*-

import os
import sys
import rospy
p = os.path.abspath(".")
rospy.loginfo("*"*10+p)
# 临时环境变量,不然无法加载到 haha.py,,因为在运行过程中,默认路径为工作空间目录而不是scripts目录
sys.path.insert(0,p + "/src/plumbing_head/scripts")
import haha
if __name__=="__main__":
    rospy.init_node("hah")
#rospy.loginfo("*"*10+os.path.abspath("."))
    rospy.loginfo(haha.num)

【注】注意修改上面两个py文件的执行权限。

CMakeLists.txt的配置
catkin_install_python(PROGRAMS
  scripts/haha.py
  scripts/test_haha.py
  DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

然后运行即可
在这里插入图片描述

  • 2
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值