关注公众号“混沌无形”,右下角点击【作者资源】→选择【混沌小店】,找到【ROS采集无人机遥控器信号数据源码包】获取完整工程源码!或者直接点击链接:🍞正在为您运送作品详情
本文采用Arduino mega2560的6个外部中断来采集Microzone接收机的6个通道的PPM信号,主要是测量PPM信号中高电平的时间(单位是us),并将数据通过rosserial将数据发送给ROS,用于控制小车的运动
经本人开发的ROSMicrozoneBridge软件包,亲测有效,数据准确.
使用步骤
1.获取工程源码
2.为满足与ROS传输数据,需要自己创建消息文件(根据自己的需要创建)
make a file named selfmakemessage and a sub-file named msg
mkdir selfmakemessage/msg
touch Microzone.msg
编辑内容为:int ch1 int ch2 int ch3 int ch4 int ch5 int ch6
catkin_Make
3.下载安装rosserial
sudo apt-get install ros-indigo-rosserial-arduino
sudo apt-get install ros-indigo-rosserial
下载编译 rosserial GitHub - ros-drivers/rosserial: A ROS client library for small, embedded devices, such as Arduino. See: http://wiki.ros.org/rosserial
主函数代码如下
#include <ros.h>
#include <selfmakemessage/Microzone.h>
#include <std_msgs/String.h>
#include <std_msgs/Empty.h>
#include "signalRead.h"
ros::NodeHandle nh;
selfmakemessage::Microzone Microzone_msg;
ros::Publisher MicrozonePublish("Microzone", &Microzone_msg);
unsigned int* arr;
//*arr *(arr+1) ...即为数组的元素
//Serial.print("\t");//输出元素之间有一定的间隔
void setup(){
// Serial.begin(115200); // Serial for debug
PWMReadInit();//PWMRead function initial
nh.initNode();
nh.advertise(MicrozonePublish);
}
void loop() {
//Serial.println(singlePWMRead(1));
arr = MixPWMRead();//read pwm signal
Microzone_msg.ch1 = (*arr);
Microzone_msg.ch2 = *(arr+1);
Microzone_msg.ch3 = *(arr+2);
Microzone_msg.ch4 = *(arr+3);
Microzone_msg.ch5 = *(arr+4);
Microzone_msg.ch6 = *(arr+5);
MicrozonePublish.publish(&Microzone_msg);
nh.spinOnce();
//Serial.println(*arr);
// nh.logdebug(debug);
nh.loginfo("in loop");
// nh.logwarn(warn);
// nh.logerror(error);
// nh.logfatal(fatal);
}
喜欢的话,请关注《混沌无形》,可阅读更多好文!