linux下读取ATI公司力传感器数据&&c++中调用c源文件&&移植到ros+问题解决

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

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</
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值