- 博客(80)
- 收藏
- 关注
原创 字符串基础知识
字符串#include<string.h> 以0(整数0)结尾的一串字符->0或“\0”是一样,但和‘0’不同0字符串结束标志,但它不是字符串的一部分,字符串长度是我们眼睛所看到的字符字面量长度(不包括这个结束标志0) 字符串以数组形式存在,以数组或指针形式访问(可以通过数组的方式遍历字符串)字符串变量char work[10] = "working"; char work_arr[] = "working"; //字符串字面量用来初始化数组 char *work_
2022-06-05 22:08:27
1261
原创 指针与const
指向非常量数据的常量指针(指针是const)表示一旦得到某个变量的地址,不能再指向其他变量 int * const q = &i; //q是const(q的值不可以改变,q的值是永久的) *q = 26; //OK q++; //ERROR#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<iostream>using namespace std;int main(){ prin...
2022-05-29 00:53:17
126
原创 读取串口文件
C语言open()打开文件函数:open() --><io.h>(头文件)函数原型:int open(char *path,int access[,int auth]);函数解析:char *path —文件路径int access —打开方式#include<stdio.h>#include<io.h>int open(const char* port){ int fd; /*以读写方式打开串口*/ fd = ::open(port, O_
2022-03-20 15:04:50
1146
原创 C语言和C++结构体
C语言结构体C语言定义结构体// An highlighted blockstruct { int real; int image;}m_Complex; //m_Complex是上面结构体的成员//orstruct Complex{ int real; int image;};定义结构体Date的成员struct Complex m_Complex; //需要带有关键字struct 数组和结构体区别:数组同类数据结构体(每个构成成员必须具有相同的数据类型),结构体异类
2022-03-06 22:09:52
1114
原创 数组、地址&指针
数组、地址&指针数组名作为指针// An highlighted blockint grade[] = {98, 87, 92, 79, 85};int *gPtr;gPtr = &grade[0]; //指针gPtr存储数组grade起始地址//也可以写成gPtr = grade;数组元素两种访问方式数组元素下标符号指针符号元素0grade[0]*gPtr /*grade元素1grade1*(gPtr +1) / *(grade+1)
2022-02-27 15:24:30
2925
原创 堆-heap
priority queue可以借用堆(heap),binary heap是一种complete binary tree(完全二叉树)完全二叉树:binary tree除最底层叶节点之外,是填满,最底层叶节点由左到右不得有空隙。用vector来存储所有节点,vector的第0个元素保留设为(无限大或者无限小),完全二叉树某个节点位于vector的 i 处,其左节点位于vector的2i处,其右边节点位于vector的2i+1处(隐式表述法)。heap可分为max-heap和min-heap.
2021-12-16 00:14:06
1050
原创 set关联容器去除重复地图点出现问题 error: no match for ‘operator<’ (operand types are ‘const Point’ and ‘const Point
set中每个元素只包含一个关键字,set支持高效关键字查询---检查一个关键字是否在set中。vector<sweep::MetricPoint2D> carpetPoint;set<Point> gridPoint;void DealMap::onRobotPoseReceived(const geometry_msgs::PoseStampedPtr ptrRobotPose){ if (robot_state->device_state.carpet
2021-12-07 21:13:13
1742
原创 多项式方程求根
参考别人的博客,顺便借鉴过来作个笔记.使用多项式的伴随矩阵进行求解多项式: 多项式的伴随矩阵:的特征值就是的根.使用Eigen进行多项式的求解:#include <iostream>#include <Eigen/Core>// 稠密矩阵的代数运算(逆,特征值等)#include <Eigen/Dense>using namespace std;int main( int argc, char** argv ){ E.
2021-05-25 10:35:42
5607
1
原创 yocs_velocity_smoother速度平滑包的动态参数设置
ROS功能:动态重配置实用程序;浅显说就是在程序外部动态改变变量值,可以不用重新编译程序,就是说可以快速调参,其中需要用参数服务器,服务和主题.配置文件保存在和src同级的文件夹cfg中,yocs_velocity_smoother的配置文件../yocs_velocity_smoother/cfg/params.cfg#!/usr/bin/env pythonPACKAGE = "yocs_velocity_smoother"from dynamic_reconfigure.parame
2021-01-29 21:52:35
775
原创 queue 和 deque
一.queue:队列只能访问queue<T>容器适配器第一个元素和最后一个元素.只能在容器的末尾添加新元素,只能从头部移除元素.queue容器的头文件: #include <queue> using namespace std;queue容器的成员函数见下表:函数成员 函数功能 front() 访问第一个元素 back() 访问最后一个元素 push() 在 queue 的尾部添加一个元素 pop().
2021-01-22 10:16:21
531
原创 C语言文件操作FILE,读取txt文件内容并写入到变量里面
参考文件:https://www.cnblogs.com/lanhaicode/p/10320097.html链接上文件说得有点详细读取txt文件内容并写入到变量里面,主要说fscanf和sscanf两个函数scanf:可以自动识别换行符和空格符(1)fscanf可以读取txt文件里面同一行多个变量和不同行的变量都同时读取到多个变量里面 #define FILE_SET "/bin/navigation_test.txt" FILE *fp ; double al
2021-01-12 16:02:52
5705
原创 vector容器添加元素
基础不牢,在容器vector上撞墙,做做笔记来吸取教训vector添加元素,我原来的代码vector<MetricPoint2D> Smooth::smoothPath(const vector<MetricPoint2D> &path){ int length = path.size(); vector<MetricPoint2D> smoothPath; smoothPath.clear(); for (int
2021-01-05 21:26:34
1940
原创 Linux中:wq :wq! :q :q!的区别
:w ->表示保存退出:wq! ->表示强制保存退出,可以保存"readonly"只读文件:q ->在vim中表示退出:q! ->表示强制不保存退出,不对文件进行保存
2021-01-04 09:54:45
6867
转载 判断点在直线左右哪一侧
关于机器人沿边避障的问题,需要判断点在直线左右哪一侧的问题.在网上查找到相关资料觉得受益匪浅,所以转载过来,以便做笔记.判断 某一点在直线左右侧方法一:左右方向是相对前进方向的,只要指定了前进方向就可以知道左右(比如指定前进方向是从直线的起点到终点).判断点在直线的左侧还是右侧是计算几何里面的一个最基本算法.使用矢量来判断.定义:平面上的三点P1(x1,y1),P2(x2,y2),P3(x3,y3)的面积量:S(P1,P2,P3)=|y1 y2 y3| =(1/2)*(x1y2*1+x2y3
2020-12-15 22:55:57
1018
原创 linux的sleep()和usleep()
usleep() :将进程挂起一段时间, 单位是微秒(us)(百万分之一秒);sleep():暂停的单位是秒,而不是毫秒. --LinuxSleep():暂停的单位是毫秒,不是秒,(其中"S"是大写) --Windowusleep函数在Linux系统中两个函数头文件都是: unistd.h 语法: void usleep(int micro_seconds); 返回值: 无 内容说明:本函数可暂时使程序停止执行。参数 micro_seconds 为要暂停的微秒数(us)。
2020-12-12 09:48:48
1397
原创 typedef与define的区别
一.typedef定义类型的别名,和引用相似,引用是变量或者对象的别名typedef prefix suffix; //程序中用后者表示前者#define m_prefix m_suffix; //程序中用前者表示后者这是关于这两者我最直接肤浅的理解。二.typedef struct 和 struct定义结构体也更好理解了。在C中定义一个结构体类型要用typedef:(1)typedef struct Student{ int age; int nu...
2020-12-03 18:41:56
138
原创 C库函数-memset()
memset:C/C++语言初始化函数作用:是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法,该函数通常为新申请的内存做初始化工作。memset函数原型void *memset(void *str, int c, size_t n) //指针函数,函数返回类型是某一个类型的指针复制字符 c(一个无符号字符)到参数 str 所指向的字符串的前 n 个字符。str -- 指向要填充的内存块。c -- 要被设置的值。该值以 int 形式传递,但是函
2020-12-02 15:40:56
230
原创 ROS消息输出指令
ROS_INFO、ROS_DEBUG、 ROS_WARN、ROS_ERROR、ROS_FATALROS_ASSERT:asserts that the provided expression evaluates to true. If it is false, program execution will abort, with an informative statement about which assertion failed, in what file. Use ROS_ASSERT i
2020-11-20 09:58:23
1559
原创 关于priority_queue(优先队列)的一些误解
主要参考博客:https://blog.youkuaiyun.com/weixin_36888577/article/details/79937886优先队列的定义:priority_queue<Type, Container, Functional>Type 就是数据类型,Container 就是容器类型(Container必须是用数组实现的容器,比如vector,deque等等,但不能用 list。STL里面默认用的是vector),Functional 就是比较的方式,当需要用自定义的数据类型
2020-11-18 10:57:53
545
原创 机器人路径规划
MRPT库默认地图栅格格式是:666*666,随机器人运动扩大变化ROS rviz上的位姿和路径轨迹都是米制显示,路径计算要转化成栅格,因此存在栅格坐标和米制坐标之间的互转关系。A*算法:堆数据结构的基础和底层数据结构...
2020-11-05 09:42:42
919
原创 hypot函数、fmod函数
看ros navigation里面的程序经常出现hypot这个函数,百度一番发现惊喜:摘抄别人博客如下:hypot函数 C ++ hypot()函数 (C++ hypot() function)hypot() function is a library function of cmath header, it is used to find the hypotenuse of the given numbers, it accepts two numbers and returns the ca
2020-10-30 22:49:50
1942
原创 STL的函数erase()
void prunePlan(const geometry_msgs::PoseStamped& global_pose, std::vector<geometry_msgs::PoseStamped>& plan, std::vector<geometry_msgs::PoseStamped>& global_plan){ ROS_ASSERT(global_plan.size() >= plan.size()); std::vec.
2020-10-30 15:34:47
327
转载 ROS中odom、map坐标系之间联系
这是我摘抄别人的,我还没时间整理,等有空在去整理,现在就当先抄笔记先。学ROS大半年了,之前一直没搞明白odom和map,今天重新查资料看博客加自己思考才真正理解了。此处参考了https://blog.youkuaiyun.com/flyinsilence/article/details/51854123,博主的解释一开始我还是没太看明白,看了好几遍才看懂,懂了之后才发现人家写的真的是言简意赅啊!我就详细的把自己的理解以及想到的例子写出来,万一有人也是不太明白这个呢。举个栗子比如说我现在算出来了一个
2020-10-19 21:26:29
1698
原创 ROS的发布消息Publishers和订阅消息Subscribers
程序里面主要是订阅录制好的激光数据(并且scan数据通过rosbag回放),经过一系列几何处理之后进行重新发布出来输出信息,消息之间的发布和订阅如下所示:lzm@lzm:~$ rostopic info /scanType: sensor_msgs/LaserScanPublishers: * /play_1602042026551485542 (http://lzm:36033/)Subscribers: * /navigation (http://lzm:45147/) * /
2020-10-07 13:02:53
302
原创 Eigen库计算两个向量夹角
一、一点到原点的距离,pt(x,y)Vector2f v1(x,y);float res1= v1.norm(); // 等于 sqrt(x^2+y^2) , 即距离float res2 = v1.squaredNorm(); // (x^2+y^2)二、两个点之间的距离 CPoint pt1(10, 10), pt2(5, 5); Vector2f v4(pt1.x, pt1.y), v5(pt2.x, pt2.y); float
2020-10-06 15:36:21
6832
1
原创 C++表示无穷大无穷小
在计算直线的斜率的时候,当角度接近PI/2时候,斜率就会接近无穷大。intC++表示无限大的时候,可以借用limits.h库,里面定义各种数据类型最大值最小值#include<limits.h>int数据类型对应最大值/最小值如下:int->INT_MAX / INT_MINunsignen int ->UINT_MAX / UINT_MINlong->LONG_MAX / LONG_MINunsigned long->ULONG_MA
2020-09-28 16:07:40
12419
原创 C++ STL关于map插入元素和map的排序
map插入元素:map<uint32_t,string> temp;方式1:temp[1]="template";方式2:temp.insert(pair<uint32_t,string>(1,"template"));方式3:temp.insert(make_pair(1,"template"));pair实际上是一个结构体,其主要的两个成员是first和second,因此:for(const auto&i :temp){ cout<.
2020-09-28 14:00:59
3885
转载 图像二值化处理
图像二值化将图像上像素点的灰度值设置为0或255,(0显示黑色,255显示白色)在数字图像处理中,二值图像占有非常重要的地位,图像的二值化使图像中数据量大为减少,从而能凸显出目标的轮廓。OpenCV中提供了函数cv::threshold();CV_EXPORTS_W double threshold( InputArray src, OutputArray dst, doubl
2020-09-21 14:17:07
3051
原创 ROS查询话题具体内容常用指令
记忆力不好老是忘记ros查询话题的具体内容,现在来做一下笔记,不记得就翻博客吧。一.$rostopic list输出/scan 二.$rostopic info /scan 输出Type: sensor_msgs/LaserScanPublishers: * /play_1599208623127841919 (http://lzm:40267/)Subscribers: None三.$rosmsg show sensor_msgs/Las.
2020-09-04 16:38:48
7687
原创 预编译处理指令中的条件编译
#if,#ifdef,#ifndef,#else,#elif,#endif的用法:预编译处理语句都是以#开头,其结尾不带分号,与普通程序语句相区别。这些命令可以让编译器进行简单的逻辑控制,当一个文件被编译时,可以用这些命令去决定某些代码的去留,这些是命令式条件编译的命令。常见的条件编译的三种形式:①第一种形式:#if defined(或者是ifdef)<标识符(条件)> <程序段1>[#else <程序段2>] #endif ②第二种形
2020-09-03 18:56:48
514
原创 C++ access( )函数
access( )函数:用于文件读取,判断文件是否存在,并判断文件是否可写。Linux中,函数为access();标准C++中,该函数为_access,两者的使用方法基本相同access(const char *pathname, int mode);//位于<unistd.h>中int _access(const char *pathname, int mode);//位于<io.h>中pathname 为文件路径或目录路径 mode 为访问权限如果文件具有指定的访
2020-09-03 16:43:35
13061
原创 CLion断点单步调试
参考CLion官网:https://www.jetbrains.com/help/clion/2020.2/clion-quick-start-guide.html#debuggingDebug:调试一.调试二.单点调试step over:单步执行--常用step into:逐语句执行Debug调试面板上一个类似计算器图标的“Evaluate Expression”可以看到调试变量每一个值。...
2020-09-01 10:49:57
11709
1
原创 PC端录制扫515地机器人/scan数据
1.手机、PC和扫地机器人连接在同一个局域网“Cloudsbot_2.4G",手机获取机器人IP地址:192.168.233.51可以用指令:ssh root@192.168.233.51---检测PC是否连接上机器人2.在PC上设置机器人为ROS MASTER执行:lzm@lzm:~$ gedit /etc/hosts添加:192.168.233.51 rockchip执行:lzm@lzm:~$ gedit ~/.bashrc 添加:sou
2020-08-28 11:55:36
257
原创 ros::spinOnce()和ros::spin()的使用和区别
运行程序的时候,订阅/scan话题消息一直传不进激光数据,后来挣扎一番问朋友发现是没写ros::spinOnce(),没法调用回调函数传入激光数据。下面是在解决问题之后,参考别人的博客,写的学习笔记。1.关于ros消息发布器和订阅器的教程: http://wiki.ros.org/ROS/Tutorials/WritingPublisherSubscriber(c++)2.看完链接里面的教程后,我们知道: 消息发布器在一个while里面一直循环发送“hello worl...
2020-08-22 13:41:18
249
原创 交叉编译环境出现.so链接文件找不到问题
问题:/opt/rk3308-32bit-cross-complier/bin/../lib/gcc/arm-rockchip-linux-gnueabihf/6.4.0/../../../../arm-rockchip-linux-gnueabihf/bin/ld: warning: libmrpt-graphs.so.1.5, needed by /opt/arm/3308/mrpt/lib/libmrpt-maps.so, not found (try using -rpath or -rpath-l
2020-08-10 14:13:24
1452
原创 Clion编译catkin_ws(ROS工作空间包的简称)加载CMakeLists.txt出现的问题
背景是我前几天在ROS工作空间3308_ws文件夹下面编译ROS的包:lzm@lzm:~/3308_ws$ catkin_make可以通过编译,在Clion IDE里面加载的CMakeLists.txt文件可以通过编译。几天之后就出现链接不上ROS原有的源库: /opt/ros/indigo/...的文件。乱搞一通,编译不通过原以为是python版本问题,然而并不是,最后百度解决了。链接:https://blog.youkuaiyun.com/Alex_wise/article/details/10520
2020-08-04 17:58:21
2115
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人