
开发类
多年以后ls
做个有趣的人
展开
-
ubuntu 换源深层次解析
换源也是一个容易出错的问题,本文以树莓派为例展开,x86也是一样的操作。那么假设成立的话,就要记住我们是在树莓派(arm)上安装的ubuntu,不是X86,不是amd。安装好系统后,我们第一步做的就是查看版本号:lsb_release -a一定要记住Codename!!!! 我们前面安装18.04的系统感觉有点问题,于是最后换成了最新版的20.04,其刷机过程和前面一样,懒得改了。我们可以看出树莓派下的ubuntu20.04的Codename是 focal,可能会有人疑问记住这个干嘛,下面原创 2020-12-01 11:04:41 · 2394 阅读 · 1 评论 -
C/C++ 从创建线程到多线程的使用(加锁,解锁)
1、首先介绍什么是线程,为什么提出线程,优点在哪?有人会把线程和进程搞混,线程虽然不是进程,但可以理解为轻量级的进程,进程中可以包含多个线程,且这些线程可以执行不同的操作。同一进程中的多条线程将共享该进程中的全部系统资源,如虚拟地址空间,文件描述符和信号处理等等。但同一进程中的多个线程有各自的调用栈(call stack),自己的寄存器环境(register context),自己的线程本地存...原创 2019-07-28 11:20:37 · 1979 阅读 · 0 评论 -
二维(一维)动态空间的开拓与释放
开发音视频工程项目时,在音频的传输方面我们需要开发一些存储的堆栈或者队列,下面先从一维开始说起,另外用到两个对开拓空间很有用的函数:alloca,malloc1、在栈上开发空间(一维):float *pcm = NULL;pcm = (float *)alloca(sizeof(float) * 1920 * 1);参数是申请分配内存的字节数,返回值为分配到的内存地址。它与mallo...原创 2019-07-26 15:12:28 · 273 阅读 · 0 评论 -
分布式麦克风的开发及ros中的实现
这一篇博客会详细描述实际开发分布式麦克风的整个过程,闲话不说,直奔主题。该工程实现的是单通道的,采样率都行的分布式麦克风音频传输,通过socket传输通信具体用法如下所示:发送端:./tx -r 16000 -c 1 -h 192.168.***.*** -d plughw:*,*,* -m 256接受端:./rx -m 256上面r代表采样率,c代表通道,h代表传输音频ip地址,d代表...原创 2019-07-22 10:32:00 · 1167 阅读 · 0 评论 -
ubuntu install :The following packages have unmet dependencies(未能满足依赖关系)
ubuntu版本不一样,或者源不一样都会出现下面这样的问题:The following packages have unmet dependencies: libopus-dev : Depends: libopus0 (= 1.1.2-1ubuntu1) but 1.2.1-1~16.04.york0 is to be installedE: Unable to correct probl...原创 2019-07-21 14:48:42 · 19031 阅读 · 6 评论 -
ROS多线程发布订阅话题信息
下面讲述几种ros订阅多个话题的例子:1、实现接收两个topic,并发布一个topic,采用的是ros多线程的方法解决。#include <ros/ros.h> #include "std_msgs/String.h"#include <boost/thread.hpp>#include <sstream>class SubscribeAndPu...原创 2019-07-24 21:38:29 · 3304 阅读 · 1 评论 -
ROS多个(单通道)分布式麦克风并行传输数据
前面文章已经讲过分布式麦克风linux下的开发,以及在ROS中的应用,也提到了实现多线程的方法,本文主要简单补充一下多个单通道麦克风并行收发数据的实现。由于ros中多进程一般是指通过多个ros节点收发信息的方式,而多线程的实现仅在一个进程(一个节点)中就可以实现。前面博文已经说明多进程的工作机制,这里不再说明。由于分布式麦克风是通过ip地址及端口号发送数据的,这里仅拓展到实现两个麦克风的情景,...原创 2019-07-29 20:41:52 · 737 阅读 · 0 评论 -
ros 创建自己的msg
在使用ros订阅话题消息的时候,有些时候为了能够进行数据类型的转换或者想实现消息的传输问题时,需要用到自己定义的.msg消息类型。创建一个msg文件,再创建一个.msg文件:mkdir msgvi test.msg如下定义:float32[] datauint16 sizeHeader headerint16 port紧接着修改Cmakelist和packag...原创 2019-07-24 20:11:55 · 1552 阅读 · 0 评论 -
ros中开发rnnoise语音增强算法的开发示例
最近看了一个关于rnn语音增强算法的项目,想到机器人听觉可能会需要语音降噪方面的算法,于是一时兴起搞了一下。除噪效果还是很明显的。采用的是 GRU/LSTM 模型。项目地址为:rnnoise我们可以考虑采用用作者训练的模型来构建数据集,也可以自己根据上面项目工程的地址按照步骤自己训练模型供自己调用,具体的请自己开发。但是目前作者提供的只是一个仅支持48K采样率的音频数据。不过测了一下16k...原创 2019-07-20 10:29:29 · 1165 阅读 · 0 评论 -
linux下makefile的编写
默认的编译器是linux下的GCC和CCmake编译的步骤:源文件首先会生成中间目标文件(一般为.o文件),再由中间目标文件生成执行文件。在编译时,编译器只检测程序语法,和函数、变量是否被声明。如果函数未被声明,编译器会给出一个警告,但可以生成Object File。而在链接程序时,链接器会在所有的Object File中找寻函数的实现。1、Makefile的规则 target... : ...翻译 2019-07-17 09:38:19 · 1034 阅读 · 0 评论 -
ROS 做tf坐标变换的几种坐标(一)
平时开发机器人时少不了一些传感器接受信息并传给机器人本体,无论是做导航(雷达或视觉),还是做定位追踪,都需要一些附加在机器人本体上的坐标系来实现,所以下面简单介绍几种常见的坐标:base_link:机器人本体坐标系,与机器人中心重合base_footprint:坐标系原点为base_link原点在地面的投影,z值可能不同map:地图坐标系,一般设该坐标系为固定坐标系odom:里程计坐标系,...原创 2019-07-07 11:21:18 · 2441 阅读 · 0 评论 -
ROS关于tf坐标转换的问题(二)
1、tf变换的主要目的就是统一机器人的所有坐标关系,它可以实现系统中任一个点在所有坐标系之间的坐标变换。tf分为两个部分:(1)监听tf变换:接收并缓存系统中发布的所有参考系变换,并从中查询所需要的参考系变换。(2)广播tf变换:向系统中广播参考系之间的坐标变换关系。系统中更可能会存在多个不同部分的tf变换广播,每个广播都可以直接将参考系变换关系直接插入tf树中,不需要再进行同步。如果你足...原创 2019-07-07 10:51:18 · 1504 阅读 · 0 评论 -
ROS topic 通过三种形式发送数据信息(publish msg)
1、在C++中通过创建一个类,这个类的子函数可以传递信息,并根据需要进行转换(如需要的话),并且可以在这个类中直接publish msg举例如下:class Publish{ public: ros::NodeHandle n_; SubscribeAndPublish() { //Topic you want to publish ...原创 2019-07-06 21:46:06 · 5932 阅读 · 0 评论 -
如何理解ROS中欧拉角和四元数
在ROS想必不少人碰到过欧拉角和四元数,它俩为什么会经常出现在一起呢?在以后开发机器人的定位模块时了解这些参数是很有必要的,下面给出一位大神的关于欧拉角的介绍,很容易明白,也指出为什么会用到四元数的问题哦。给上链接:如何理解欧拉角...原创 2019-07-10 22:00:19 · 1051 阅读 · 0 评论 -
ROS+科大讯飞语音识别控制机器人
科大讯飞语音识别控制实际机器人运动。本文将ros与语音识别想结合进行开发。进行以下步骤,1、创作ros工作空间2、安装mpalyer播放器sudo apt-get install mplayer3、将讯非的语音库动态文件.so文件放到/usr/lib/下4、ros工程目录src下新建文件xf_asr.cpp 并将以下内容复制进去,appid改成你自己的(官网申请)。/** 语音听...原创 2019-04-23 21:09:37 · 8770 阅读 · 32 评论 -
ROS简单实现订阅/scan激光雷达的距离信息
ROS 常常会用到导航系统的开发,为了有助于理解导航原理的背后是什么,该篇主要以得到距离信息为主写了非常简单的demo。import rospyfrom sensor_msgs.msg import LaserScanfrom geometry_msgs.msg import Twistclass Obstacle(): def __init__(self): s...原创 2019-06-20 19:05:57 · 9594 阅读 · 14 评论 -
ROS 订阅雷达/scan信息和定位信息的数据融合进行目标跟随
雷达信息scan的数据类型如下(通过rosmsg show 查看):代码中用到的min(range)代表离障碍物的最小距离,而且代码含有简单的过滤功能,请仔细研读!!!Header header # Header也是一个结构体,包含了seq,stamp,frame_id,其中seq指的是扫描顺序增加的id,stamp包含了开始扫描的时间和与开始扫描的时间差,frame_i...原创 2019-06-19 20:35:23 · 6023 阅读 · 0 评论