- 博客(90)
- 收藏
- 关注
原创 树莓派4B点亮LED小灯
树莓派引脚序号如下图所示GPIO是标准引脚,可以用来打开和关闭设备。例如,一个LED。I2C(Inter-Integrated Circuit)引脚连接并与支持该协议(I2C协议)的硬件模块对话。这个协议通常会占用两个引脚。SPI(串行外设接口总线)引脚可用于连接和对话SPI设备。和I2C差不多,但使用了不同的协议。UART(Universal asynchronous receiver/transmitter,通用异步接收/发送器)是用于与其他设备通信的串行引脚。GND是用来接地的引脚。使
2022-03-22 15:11:40
4497
原创 激光SLAM建图过程中的问题MessageFilter [target=odom_combined ]:Dropped 100.00% of messages so far.,解决方案
最近在和师弟用kobuki底盘进行SLAM建图的过程中遇到一个比较棘手的问题,一直没有解决,直到今天我在仿真环境中也碰到了[ WARN] [1618301922.711685031, 2351.764000000]: MessageFilter [target=odom_combined ]: Dropped 100.00% of messages so far. Please turn the [ros.slam_karto.message_filter] rosconsole logger to D
2021-04-13 17:24:42
3273
原创 2021年阿里数据库产品C++研发岗面经
首先说一下为啥参加这次的阿里校招吧。这是一次偶然的机会,是同学的朋友在阿里数据库产品事业部,然后说有些内推名额,因为我老板不允许实习,刚开始就没同意,结果阿里的HR说可以不实习也可以等下次秋招的时候去实习,我就心动了,就把我的简历投过去了,然后就有了以下的经历: 跟大多数公司一样,一开始肯定是性格测试和思维测试,这个测试有三轮,有个比较难得就是跟公务员考试考的那种逻辑思维题一样,时间根本不够(几乎靠蒙,哈哈哈哈哈)。 大约三四天之后(2021年3月12号)进行第一次笔试,这次笔试...
2021-03-21 17:10:37
365
原创 ROS轨迹保存为tum格式,并用evo轨迹绘制
安装evo evo共有两种安装方式 快捷安装 ,直接安装最新的稳定发行版;pip install evo --upgrade --no-binary evo 源码安装 ,下载源码进行安装; 首先在任意文件夹下下载evo,也可以在home中直接下载git clone https://github.com/MichaelGrupp/evo.git 然后进入evo文件夹pip install --editable . --upgrade --no-...
2021-03-11 16:46:03
4146
13
原创 Rviz显示机器人运动轨迹
在实际操作机器人进行移动的时候,虽然直接观察机器人本身是比较直观的,但是无法查看到机器人运动过程中比较细微的变化(比如方向的变化),那么就需要将机器人的运动轨迹用可视化软件Rviz显示出来以便于观察。这个功能是利用Rviz中的Path类型实现的,只需要将机器人的位置信息已nav_msgs/Path类型的消息的形式发布到ROS系统中,然后在Rviz上订阅该类型的消息就可以显示机器人的运动轨迹了 下面了解一下nav_msgs/Path类型数据的数据结构:Header he...
2021-03-03 11:07:09
5377
15
原创 Gazebo仿真WARN-The root link base_link has an inertia specified in the URDF, but KDL does not support
在Gazebo中进行小车仿真的过程中会出现如下警告The root link base_link has an inertia specified in the URDF, but KDL does not support a root link with an inertia. As a workaround, you can add an extra dummy link to your URDF该警告的意思是根关节的base_link在urdf中具有惯性参数,但是KDL不支持,建议的解决办法是
2020-12-23 16:22:21
7160
8
原创 《移动机器人开发教程》声明
最近有收到一些私信问有没有ROS源码包的代码注释或者是框架图的,在这统一回复一下我们实验室的移动机器人开发小组正在编写一本关于小型移动机器人开发的教程,里面包含了ROS基础知识、移动机器人(从底层硬件平台的搭建,到高层核心算法的解释,以及所有典型实验操作)的讲解。可以指导ROS入门和小型移动机器人的开发。本教材预计十二月底一月初发行第一版,后期会搭配移动机器人平台、和标准化实验场地,请大家敬请期待。...
2020-12-01 21:15:07
368
原创 解决 Costmap2DROS transform timeout.问题
用gmapping_slam或者karto_slam把房屋地图建好之后运行ROS导航navigation模块的时候会出现Costmap2DROS transform timeout.错误问了一下做过相关内容的师兄,发现可能是因为系统时间不统一造成的,于是尝试了修改系统时间,结果真好了,大家可以参考其实就是树莓派没有时钟模块,未联网状态下开机的时间默认为出厂时间,从而导致了系统时间早于地图的创建时间(比如系统时间时2016年某月某日,创建地图的时间是2020年某月某日),所以要将系统时间改到地图创建时
2020-09-08 17:17:52
6231
19
原创 读取 /tf 话题中指定tf
大家都知道在ROS系统中同一个话题可以被多个node节点发送或者订阅,如下图是一个典型的tf结构那么如何才能获得到自己想要用的那一个变换矩阵是一个非常棘手的问题,经过查阅资料,我写了下面这一个读取/tf话题中的指定tf的demo供大家一起学习讨论。#include<iostream>#include<ros/ros.h>#include<tf/tf.h>#include<tf/transform_listener.h>#include<geo
2020-08-11 17:06:39
1071
原创 PID参数设定
在电机的控制领域,不同的电机有不同的驱动方式,其中应用最广泛的就是PID(proportion integration differentiation)控制。P、I和D分别指比例控制,积分控制和微分控制。其算法简单可靠性高,广泛应用于工业过程控制,至今有90%左右的控制回路具有PID结构。在双轮移动机器人,大多数的电机的速度控制和反馈系统如下:在上图模型中,根据指定速度和实际速度构成控制偏差,将偏差按照比例、积分和微分通过线性组合构成控制量,对被控的电机进行控制。其控制规律为:判断一个控制系统是否优
2020-08-03 17:18:47
1803
原创 ROS学习——巡线(C++ 、opencv)
这个功能需要摄像头的配合,如有需要可以查看我之前的博客,话不多说,直接上代码#include<ros/ros.h>#include<sensor_msgs/Image.h>#include<geometry_msgs/Twist.h>#include<cv_bridge/cv_bridge.h>#include<opencv2/opencv.hpp>#include<opencv2/imgproc.hpp>#inclu
2020-07-29 14:07:56
4298
2
原创 二轮差分模型分析及里程计计算
小型移动机器人的底盘主要有两轮差速底盘和四轮差速底盘两种,因为两轮差速底盘的控制原理以及运动模型分析比较简单,所以运用的比较多,下面主要介绍两轮差速底盘的工作原理。如图1所示,两轮差速底盘由两个驱动轮和一个万向轮组成,两个驱动轮分别位于底盘的左右两侧,并且独立控制速度,通过不同的速度来实现底盘的转向,万向轮的作用是辅助支撑。如图5.1所示,v所指方向为移动机器人的前进方向,vl、vr分别为左轮和右轮的线速度,l为左右两轮的轮间距。假定l、vl、vr这三个值均已知。转向角速度W:移动机器人线速度V
2020-07-24 15:37:43
6708
1
原创 ROS学习——控制小车转向
给定一个旋转的角度,让小车进行顺时针或逆时针旋转。#include<iostream>#include<string>#include<ros/ros.h>#include<geometry_msgs/Twist.h>#include<geometry_msgs/Quaternion.h>#include<nav_msgs/Odometry.h>#include<tf/tf.h>#define UNIT_
2020-07-22 11:32:18
5362
1
原创 ubuntu内存不足1G解决办法
最近在使用ROS的时候出现ubuntu内存不足的问题,经查阅百度,发现是由于ros的输出日志过多造成的,也就是终端显示的日志ROS会自动保存起来,时间过长就会导致log文件过多过大,造成内存不足。解决办法:rosclean checkrosclean purge如果没有安装rosclean,就可以直接进行如下操作cd .rosrm -rf log再次检查ubuntu内存,就发现内存足够了...
2020-07-22 09:43:38
2017
原创 ROS学习——控制小车前进给定距离
现在提出了一个小小的需求,就是要求控制小车前进五米。那么这个需求可以转化为一个问题,就是如何控制小车前进给定的距离,于是我编写了下面这个程序,向小车发布指令,然后使小车前进。#include<ros/ros.h>#include<string>#include<iostream>#include<geometry_msgs/Pose.h>#include<nav_msgs/Odometry.h>#include<geometr.
2020-07-21 09:57:34
7679
9
原创 ROS学习——读取IMU数据
在ROS工作空间的src文件夹下创建read_imu功能包,并在包内创建include、launch、src、cfg四个文件夹。在cfg文件夹中创建param.ymal文件,并写入以下内容:imu_dev: /dev/ttyUSB0baud_rate: 9600data_bits: 8parity: Nstop_bits: 1pub_data_topic: imu_datapub_temp_topic: imu_tempyaw_topic: yaw_datalink_name: base
2020-07-09 10:45:37
10656
12
原创 ROS学习——读取激光雷达数据Laser
在ROS工作空间的src文件夹下创建read_laser功能包,并在包内创建include、launch、src四个文件夹。在include文件夹中创建read_laser.h文件,并写入以下内容:#include<ros/ros.h>#include<std_msgs/UInt16.h>#include<string>#include<iostream>#include<sensor_msgs/LaserScan.h>#includ
2020-07-09 10:42:27
4938
2
原创 ROS学习——读取摄像头数据image
在ROS工作空间的src文件夹下创建read_camera功能包,并在包内创建include、launch、src、cfg四个文件夹。在cfg文件夹中创建param.yaml文件,并写入以下内容:image_dev: /dev/video0save_path: /home/huanyu/datasets/camerasave: falsevisualization: true在include文件夹中创建camera_manager.h文件,并写入以下内容:#include<openc
2020-07-09 10:38:59
4108
6
原创 激光雷达运动畸变去除方法
激光雷达运动畸变产生的原因在机器人运动过程中,每个激光点都在不同的基准位姿上产生。激光扫描时伴随着机器人的运动,每个角度的激光数据都不是瞬时获得的,当激光雷达扫描的频率比较低的时候,机器人运动带来的激光帧的运动畸变是不能被忽略的。例如扫描频率是5Hz的激光雷达,一帧数据的收尾时间差是200ms,如果机器人以0.5m/s的速度沿着x方向行走并扫描前面的墙体,那么200ms后尾部的测量距离和首部的测量距离在x方向上就差10cm。所以如果不是高频扫描,这种运动畸变是不容忽视的。去除运动畸变的原理去除激光
2020-06-28 14:48:29
3038
1
原创 ROS学习——TF&URDF
TF(transform)TF是指坐标变换(位置+姿态),是坐标系数据维护的工具。ROS里面的tf指的是坐标转换的标准、话题、工具、接口。tf of C++TF相关数据类型tf::Vector3 向量tf::Point 点tf::Quaternion 四元数tf::Matrix3x3 3x3矩阵tf::Pose 位姿tf::Transform 变...
2020-04-22 14:22:41
409
原创 ROS学习——Client Library——rospy
rospy-Node相关函数 init_node(name)#注册和初始化nodeMasterProxy get_master()#获取master的句柄bool is_shutdown()#返回是否关闭 on_shutdown(fn)#在node关闭时调用函数str get_node_uri()#返回节点的URL get_name()#返回本节点的全名...
2020-04-21 20:17:11
228
原创 ROS学习——CLient Library与roscpp以及模版
CLient LibraryCLient Library提供ROS编程的库(接口API),但是与API有些不同,CLient Library比API的高级,封装层次更高,有利于开发者使用。提供的库常用的主要有roscpp/rospy/roslisproscpp是C++版本的,执行效率高,适合做图像和SLAM方面的工作,但是代码非常复杂;rospy是python版本的,开发效率高。主要介绍...
2020-04-21 13:20:40
360
原创 安装ROS遇到的大坑
按照官网给的教程在Ubuntu16.04上安装kinetic,进行到sudo apt-get install ros-kinetic-desktop-full时会出现以下错误Reading package lists… DoneBuilding dependency treeReading state information… DoneSome packages could not be ...
2020-04-17 20:15:36
853
原创 ROS学习——ROS通信架构
Master节点管理器作用:每个Node启动时都要想master注册,管理node之间的通信(可实现点对点通信)$roscore 启动ros masternode节点(ROS的进程)pkg里面的可执行文件运行的实例。启动一个node$rosrun[包名][节点名]rosnode$rosnode list查看当前运行的node信息$rosnode info [node_n...
2020-04-17 14:58:15
259
原创 ROS学习——工程结构
catkinpackage是catkin编译的最基本的单元,catkin编译的时候会递归查找src目录下的每一个package。packagepackage是ROS软件的基本组织形式,一个package可以包含多个可执行文件(节点)。一个package中至少含有一个CMakeLists.txt和一个package.xml。CMakeLists.txt规定catkin编译的规则...
2020-04-17 13:49:32
198
原创 在Mac上安装Kinetic遇到的大坑
在执行brew tap ros/deps的时候遇到Error: Invalid formula: /usr/local/Homebrew/Library/Taps/ros/homebrew-deps/gfortran.rbgfortran: undefined method `prefer_64_bit?' for OS::Mac:ModuleError: Cannot tap ro...
2020-04-16 09:38:02
1352
2
原创 ROS学习——简介
ROS起源2000s,斯坦福大学-机器人软件系统框架(吴恩达)2007,柳树车库(Willow Garage)发起(Opencv,pcl)2010,ROS 1.0发布2013,ROS Hydro2014,ROS Indigo(对应Ubuntu14.04,LTS)2015,ROS Jade2016,ROS Kinetic(对应Ubuntu16.04,LTS)2017,ROS Luna...
2020-04-15 20:11:14
248
原创 sd
from keras.models import Sequentialfrom keras.layers import Conv2D, Input, BatchNormalizationfrom keras.callbacks import ModelCheckpointfrom keras.optimizers import SGD, Adamimport numpyimport ma...
2018-05-01 20:47:30
299
原创 蓝桥杯——历届试题 分糖果
问题描述 有n个小朋友围坐成一圈。老师给每个小朋友随机发偶数个糖果,然后进行下面的游戏: 每个小朋友都把自己的糖果分一半给左手边的孩子。 一轮分糖后,拥有奇数颗糖的孩子由老师补给1个糖果,从而变成偶数。 反复进行这个游戏,直到所有小朋友的糖果数都相同为止。 你的任务是预测在已知的初始糖果情形下,老师一共需要补发多少个糖果。输入格式
2018-02-07 20:51:08
207
原创 蓝桥杯-关联矩阵
问题描述 有一个n个结点m条边的有向图,请输出他的关联矩阵。输入格式 第一行两个整数n、m,表示图中结点和边的数目。n<=100,m<=1000。 接下来m行,每行两个整数a、b,表示图中有(a,b)边。 注意图中可能含有重边,但不会有自环。输出格式 输出该图的关联矩阵,注意请勿改变边和结点的顺序。样例输入 5 9 1 2 3 1 1 5
2017-12-20 14:15:39
332
原创 矩阵乘法
问题描述 输入两个矩阵,分别是m*s,s*n大小。输出两个矩阵相乘的结果。输入格式 第一行,空格隔开的三个正整数m,s,n(均不超过200)。 接下来m行,每行s个空格隔开的整数,表示矩阵A(i,j)。 接下来s行,每行n个空格隔开的整数,表示矩阵B(i,j)。输出格式 m行,每行n个空格隔开的整数,输出相乘後的矩阵C(i,j)的值。样例输入 2 3 2 1
2017-12-07 17:28:15
248
原创 Torry的困惑(基本型)
问题描述 Torry从小喜爱数学。一天,老师告诉他,像2、3、5、7……这样的数叫做质数。Torry突然想到一个问题,前10、100、1000、10000……个质数的乘积是多少呢?他把这个问题告诉老师。老师愣住了,一时回答不出来。于是Torry求助于会编程的你,请你算出前n个质数的乘积。不过,考虑到你才接触编程不久,Torry只要你算出这个数模上50000的值。输入格式 仅包含一个正整数n
2017-12-07 12:55:36
211
原创 前缀表达式
问题描述 编写一个程序,以字符串方式输入一个前缀表达式,然后计算它的值。输入格式为:“运算符 对象1 对象2”,其中,运算符为“+”(加法)、“-”(减法)、“*”(乘法)或“/”(除法),运算对象为不超过10的整数,它们之间用一个空格隔开。要求:对于加、减、乘、除这四种运算,分别设计相应的函数来实现。 输入格式:输入只有一行,即一个前缀表达式字符串。 输出格式:输出相应的计算结果(如果
2017-12-05 16:59:25
422
原创 Anagrams问题
问题描述 Anagrams指的是具有如下特性的两个单词:在这两个单词当中,每一个英文字母(不区分大小写)所出现的次数都是相同的。例如,“Unclear”和“Nuclear”、“Rimon”和“MinOR”都是Anagrams。编写一个程序,输入两个单词,然后判断一下,这两个单词是否是Anagrams。每一个单词的长度不会超过80个字符,而且是大小写无关的。输入格式:输入有两行,分别为两个单词。
2017-12-05 16:46:52
202
原创 蓝桥杯-最大最小公倍数
问题描述 已知一个正整数N,问从1~N中任选出三个数,他们的最小公倍数最大可以为多少。输入格式 输入一个正整数N。输出格式 输出一个整数,表示你找到的最小公倍数。样例输入 9样例输出 504数据规模与约定 1 <= N <= 106。如果按照正常的暴力搜索来解决问题,可想而知肯定会超时的,所以要知道一点:相邻的两个正整数是互斥的,而且互斥的正整
2017-11-27 21:19:32
882
原创 蓝桥杯-算法训练 出现次数最多的整数
问题描述 编写一个程序,读入一组整数,这组整数是按照从小到大的顺序排列的,它们的个数N也是由用户输入的,最多不会超过20。然后程序将对这个数组进行统计,把出现次数最多的那个数组元素值打印出来。如果有两个元素值出现的次数相同,即并列第一,那么只打印比较小的那个值。 输入格式:第一行是一个整数N,N £ 20;接下来有N行,每一行表示一个整数,并且按照从小到大的顺序排列。 输出格式:输出
2017-11-27 18:50:24
1355
原创 蓝桥杯——算法训练 大小写转换
问题描述 编写一个程序,输入一个字符串(长度不超过20),然后把这个字符串内的每一个字符进行大小写变换,即将大写字母变成小写,小写字母变成大写,然后把这个新的字符串输出。 输入格式:输入一个字符串,而且这个字符串当中只包含英文字母,不包含其他类型的字符,也没有空格。 输出格式:输出经过转换后的字符串。输入输出样例 样例输入 AeDb 样例输出 aEdB
2017-11-27 15:57:14
853
原创 蓝桥杯试题——区间K大数查询
问题描述 给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个。输入格式 第一行包含一个数n,表示序列长度。 第二行包含n个正整数,表示给定的序列。 第三个包含一个正整数m,表示询问个数。 接下来m行,每行三个数l,r,K,表示询问序列从左往右第l个数到第r个数中,从大往小第K大的数是哪个。序列元素从1开始标号。输出格式 总共输出m行,每行一个数
2017-11-20 11:32:40
236
原创 蓝桥杯算法训练 排序
问题描述 编写一个程序,输入3个整数,然后程序将对这三个整数按照从大到小进行排列。 输入格式:输入只有一行,即三个整数,中间用空格隔开。 输出格式:输出只有一行,即排序后的结果。 输入输出样例样例输入9 2 30样例输出30 9 2#include<iostream>#include<algorithm>using namespace std;int A(int a,in
2017-11-19 21:41:27
196
原创 蓝桥杯算法训练:递归求二项式系数值
#include <iostream>using namespace std;int DD(int a,int b){ if(a==0||a==b)return 1; else return DD(a,b-1)+DD(a-1,b-1);}int main(){ int k,n; cin>>k>>n; cout<<DD(k,n); retur
2017-11-19 21:35:51
273
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人