linux下读取ATI公司力传感器数据&&c++中调用c源文件&&移植到ros+问题解决
源文件
关于源代码中makefile文件的编写,进行学习。
netft: netft.o
gcc netft.o -o netft
netft.o: netft.c
gcc -c netft.c -o netft.o
clean:
rm *.o netft
书写格式一般为:
1、最终生成的可执行文件首先写。
2、gcc netft.o -o netft 的效果与 gcc -o netft netft.o一样。
3、冒号前面是需要生成的文件;冒号后面需要有空格;冒号后面的文件是需要的文件。
4、-c是编译,-o是链接成可执行文件。
5、clean可以通过执行make clean实现。
在cpp文件中调用c文件
因为源代码是用c语言编写,而ros中常用的是c++文件,因此首先尝试在单独的cpp文件中调用c文件。
既然是要在cpp文件中调用c文件,那首先就要将原来的c文件中的main函数改为一个普通的函数,然后加上返回值。这里返回指针型。
然后在c和c++之间调用需要
在.h文件中
#include <stdio.h>
#ifndef _NETFT_H_
#define _NETFT_H_
#ifdef __cplusplus
extern "C"
{
#endif
int *a(int argc,char **argv);
#ifdef __cplusplus
}
#endif
#endif
在.c文件中导入头文件
在.cpp文件中
#include <stdio.h>
#ifdef __cplusplus
extern "C"
{
#endif
#include "netft.h"
#ifdef __cplusplus
}
#endif
int main(int argc, char **argv)
{
while(1)
printf("%d\n",a(argc,argv)[1]);
}
完成了程序设计,接下来需要进行编译和链接等。
首先需要生成c源文件的库文件
gcc -c netft.c -o netft.o
这里会报错netft.c:10:19: fatal error: netft.h: 没有那个文件或目录
这里一种可行的办法是,将**.h文件移动到/usr/include**然后再执行就可。
生成库文件以后,就要进行链接生成可执行文件
g++ diaoyong.cpp netft
完成!
ros中实现
首先需要选择合适的消息结构,以及正确的赋值方法:(ps:当然也需要加上上面的技巧)
/**
* 该例程将发布chatter话题,消息类型String
*/
#include <sstream>
#include "ros/ros.h"
#include "geometry_msgs/WrenchStamped.h"
#include <stdio.h>
#ifdef __cplusplus
extern "C"
{
#endif
#include "netft.h"
#ifdef __cplusplus
}
#endif</

本文档详细记录了在Linux环境下,使用C语言读取ATI公司力传感器数据,然后在C++中调用C源码,最终将程序移植到ROS系统中的过程。遇到的主要问题包括makefile的编写、C++调用C文件的头文件引用、ROS中消息结构的选择和赋值,以及程序运行时的连接中断问题。通过修改源代码,解决了连接中断问题,实现了ROS中力传感器数据的发布。
最低0.47元/天 解锁文章
1832

被折叠的 条评论
为什么被折叠?



