自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(310)
  • 问答 (2)
  • 收藏
  • 关注

原创 10四个基本子空间

四个基本子空间及其概念介绍。

2022-05-04 17:18:11 777

原创 09线性相关性、基、维数

一、线性相关性向量独立定义:向量x1,x2,...xnx_1,x_2,...x_nx1​,x2​,...xn​是独立的必要条件是:存在非零组合使得:c1x1+c2x2+⋯+cnxn≠0c_1x_1+c_2x_2+\cdots+c_nx_n\ne0c1​x1​+c2​x2​+⋯+cn​xn​​=0举个例子,二维空间中的两个共线向量,有2v1−v2=02v_1-v_2=02v1​−v2​=0存在系数组合是2,-1是非零组合,所以这些向量是线性相关的;假如其中一个向量v1v_1v1​是零向

2022-04-25 22:32:40 605

原创 08AX=b可解性及解的结构

上节课主要讲的是AX=0AX=0AX=0方程的解,也就是零空间,使得结果向量为零向量的解的集合。#mermaid-svg-ycom4z0dfHvqTHjg .label{font-family:'trebuchet ms', verdana, arial;font-family:var(--mermaid-font-family);fill:#333;color:#333}#mermaid-svg-ycom4z0dfHvqTHjg .label text{fill:#333}#mermaid-svg-yc

2022-04-14 00:29:17 318

原创 ROS入门21讲笔记(十二)常用可视化工具

一、QT类可视化工具1.1 rqt_consolerqt_console 为显示和过滤ROS信息提供了一个GUI插件1.2 rqt_plotrqt_plot使用不同的绘图后端提供数值可视化功能。1.3 rqt_Image_viewrqt_image_view 使用image_transport来显示图像数据。1.4 rqt显示所有的qt类工具,可以自由地组合rqt界面。二、Rviz 机器人开发过程中可视化界面Rviz是一款三维可视化工具,与ROS软件框架兼容性强。Rviz中

2022-04-03 16:41:30 7593

原创 ROS入门21讲笔记(十一)编写并使用launch启动文件

launch文件:通过XML文件实现多节点配置和启动一、launch文件语法launch文件的根节点采用<launch>标签定义,节点采用<node>标签定义。<node>标签用于启动节点<node pkg="package-name" type="executeble-name" name="node-name" />pkg:节点所在的功能包名称type:节点的可执行文件名称name:节点运行时名称output:运行信息输出位置,如输出至屏

2022-04-03 11:57:23 1318

原创 ROS入门21讲笔记(十)tf坐标系广播与监听的编程实现

创建功能包:catkin_create_pkg tfbroadcast_test roscpp std_msgstf turtlesimtf广播代码定义TF广播器(TransformBroadcaster)创建坐标变换值发布坐标变换(sendTransform)

2022-04-01 23:56:08 3230

原创 ROS入门21讲笔记(九)坐标管理系统

TF功能包用来负责维护ROS中坐标变换的。例子:海龟跟随的例子roslaunch turtle_tf turtle_tf_demo.launch #相当于脚本文件如果有报错输入:sudo apt install python-is-python3还挺有意思的:可以用命令:rosrun tf view_frames生成的PDF可以查看tf的链接关系:也可以用rosrun tf tf_echo turtle1 turtle2获取任意两个坐标的实时位置关系:还有更加直观的方法rviz可视

2022-03-31 23:17:55 412

原创 ROS入门21讲笔记(八)参数命令行使用和代码编程

一、ROS参数服务器ROS参数服务器是一种共享的、多变量字典,能够通过网络访问的字典。节点运行的时候将通过这个服务器来存储、检索参数,他不是为高性能涉及的,最好将这些变量用于静态的(static),非二进制的数据(non-binary),最适合的就是一些配置参数。服务器上的数据是全局可见的,我们可以轻而易举的检索系统的配置状态并在必要时修改。二、修改ROS参数命令rosparamrosparam list 列出参数清单rosparam get para_key 显示参数值rosparam se.

2022-03-30 23:44:06 797

原创 ROS入门21讲笔记(七)自定义消息消息类型和使用

这一节主要是学习如何自定义一个服务类型并使用它。一、如何自定义服务消息?服务数据是以.srv结尾的文件,是一个用于描述ROS服务信息简单文本文件,用于生成不同语言消息的源代码。srv文件存放在package文件夹下srv文件夹中。二、自定义服务数据的一般步骤经过下面四个步骤,返回到workspace目录进行catkin_make,ROS就能根据你的srv文件产生C++需要的源文件定义。2.1 Step1 创建一个srv文件srv文件每一行用段类型和段名组成,段类型有:int8, int16,

2022-03-30 22:16:30 1943

原创 ROS入门21讲笔记(六)代码形式写一个服务端

上一节学习了如何创建一个客户端代码并向一个已知服务发送请求,这一节我们来学习以下如何写一个服务器并提供服务。下面是实现的节点之间的关系:一、编写服务端代码这里直接在上一节service_test功能包进行服务端代码编写,直接在service_test/src中新建一个源文件turtle_command_server.cpp:#include <ros/ros.h>#include <geometry_msgs/Twist.h>#include <std_srvs/T

2022-03-28 23:52:55 308

原创 ROS入门21讲笔记(五)代码形式写一个客户端向服务端请求服务

个人觉得,和前面话题的发布和订阅没有很大的区别,所以这一节主要将内容集中在总结上。一、实验任务通过C++代码创建一个客户端,该客户端通过向海龟可视化界面应用中的请求/spawn服务,在指定位置产生一个新的海龟。整个流程总结如下:#mermaid-svg-WFh0IEqwj8xNTyJB {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-WFh0IEqwj8xNTyJ

2022-03-27 22:48:45 1445

原创 ROS入门21讲笔记(四)自定义话题消息类型和使用

除了ROS内置消息外,我们还能自定义消息。这一次我们不再与海龟较劲,而是自定义一个订阅消息类型,让订阅者和发布者通过这个结构进行数据通信。一、如何自定义话题消息?话题消息是以.msg结尾的文件,是一个用于描述ROS话题信息简单文本文件,用于生成不同语言消息的源代码。msg文件一般存放在package下msg文件夹下,其数据类型可以是:int8, int16, int32, int64 (unit*)float32, float64stringtime, duration其他msg文件可变

2022-03-27 18:18:50 7950

原创 ROS入门21讲笔记(三)代码形式写一个订阅者向发布者订阅消息

其实发布程序和订阅程序没有什么不同。#mermaid-svg-8xeNGU2HZcnhSuS6 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-8xeNGU2HZcnhSuS6 .error-icon{fill:#552222;}#mermaid-svg-8xeNGU2HZcnhSuS6 .error-text{fill:#552222;stroke:#552222;}#

2022-03-27 00:27:27 404

原创 ROS入门21讲笔记(二)代码形式写一个发布者向订阅者发布消息

本次的实验目标是利用C++发布一个话题,让海龟可视化界面按照我们想要的方式进行运动。Step1 创建一个工作空间工作空间其实就是项目所在的空间,假如我需要在桌面创建一个工作空间:mkdir myWS # 创建一个文件夹作为工作空间mkdir -p myWS/src # 创建一个源代码空间catkin_make # 利用catkin_make帮助我们补充剩余的空间junwu@Room:~/Desktop/myWS$ tree -L 1.├── build├── devel└── src

2022-03-26 22:47:42 1438

原创 ROS入门21讲笔记(一)基本概念

一、核心概念1.1 节点(Node)和节点管理器(ROS Master)节点是什么?执行具体任务的进程节点具有唯一性节点管理器是什么?为节点提供注册服务完成、记录节点之间的通信参数服务器(运行时参数)1.2 话题通信和服务通信话题(Topic)是异步通信,采用发布/订阅模型;消息(Message),话题通信的消息类型由语言无关的.msg定义,ROS提供标准类型,当然你也可以自定数据类型。服务(Service)是同步通信,客户端/服务器(C/S)模型,服务通信的消息类型由语言无

2022-03-26 20:19:01 2084

原创 (十五)CMake find_package

find_package命令:找到(通常对于项目来说是外部的东西)并加载包特定的细节。一、搜寻模式搜寻模式是cmake搜索所需要包的方法,可分为模块模式(Module mode)和(配置模式)Config Mode。1.1 模块模式(Module mode)在这种模式下,CMake将会搜寻一个名字叫做Find<PackageName>.cmake的文件。首先搜寻在CMAKE_MODULE_PATH列表CMake安装的的查找模块如果找到了这个文件,CMake将会读取并且处理它(比

2022-03-26 14:53:24 490

原创 CODESYS SoftMotion(三)多轴运动实例

前面讲了SoftMotion如何控制单个轴,这一节就来看看多轴控制是如何配置的。本节目标:实现电子凸轮主从控制,这一次使用PLCopenIEC61131-3规定下的另一种编程语言,连续功能图(CFC,Continuous Function Chart)。主轴的范围是:0-10度表换,从轴是编写过程选择PLG_PRG语言为:CFC页面向导添加两个轴,一个是主动轴,另一个是从动轴,注意把名字更改一下:在Application中添加一个Cam表对象:Cam表是分析主轴位置和从轴位置、速度

2022-03-20 11:29:55 7588 1

原创 CODESYS SoftMotion(二)单轴运动实例

一、CODESYS SoftMotion编程实例所有关于SoftMotion都会放在特定位置,可以参考学习,我自己的路径是:D:\CODESYS16\CODESYS\Projects\SoftMotion\4.6.3.0\Examples\Tutorial3.1 单轴运动功能块需要:使能功能块MC_Power、绝对运动功能块MC_MoveAbsolute。下面是编程步骤(极其繁琐)Ctrl+N 新建一个工程:因为我的设备是树莓派单核,所以选择CODESYS Control for Raspber

2022-03-20 00:55:20 7961 3

原创 CODESYS Softmotion(一)功能介绍

一、CODESYS SoftMotion RTE SL产品1.1 CODESYS Runtime SL 产品家族介绍目前支持的主流厂商的硬件产品,让部署在上面的成为实时设备。对于Windows系统,根据需求选择对应的Runtime:RTE极大的提高了实时性,适合进行运动控制,同时RTE还支持了多个主从站协议:还可以选择可选的功能(Single License):RTE对硬件和系统有要求,如果你需要硬件功能,那么网卡会有最低要求。1.2 RTE的下载和安装在官网http://codes

2022-03-20 00:53:29 18911 2

原创 (十四)内部构建和外部构建概念

假设我们有一个如下工程需要进行构建:.├── CMakeLists.txt└── main.cpp0 directories, 3 filesCMakeLists.txt的内容如下:Project(HELLO)SET(SRC_LIST main.cpp)MESSAGE(STATUS "This is BINARY dir " ${HELLO_BINARY_DIR})MESSAGE(STATUS "This is SOURCE dir " ${HELLO_SOURCE_DIR})ADD

2022-03-12 22:55:52 486

原创 (十三)CMake MESSAGE和PROJECT

PROJECT(projectname [CXX][C][Java])命令用于指示名称,并且可以指定工程支持的语言,通常可以忽略。隐式定义了两个CMake变量,分别是:<projectname>_BINARY_DIR<projectname>_SOURCE_DIR上面的两个变量第一个下划线前的字符串等于PROJECT里面的字符串。为了打印两个CMake变量,需要用到MESSAGE打印字符串。Project(HELLO)SET(SRC_LIST main.cpp)M

2022-03-12 22:41:20 726

原创 VSCODE(十)C++语言特有设置

C/C++插件为C/C++开发者提供了丰富的设置项,包括三个方面的设置:env:用户自定义的变量,可以通过类似$<var>$或者$env:<var>$形式进行变量替换configurations:定义了包括但不限于编译器、头文件路径、C++标准在内的多种设置version:定义了c_cpp_propertie.json的版本,一般不修改我们重点关注configuration,它既可以通过settings.json,也可以通过特有的c_cpp_properties.json

2022-03-12 17:27:05 4240

原创 机器人仿真软件一览

通过模拟组件及控制程序创建机器人或系统完整虚拟模型极大程度影响了项目总体的效率。每一个可以被模拟的区域的详细及准确程度无疑会影响整个项目周期及成本。一、 仿真的好处降低机器人生产成本判断源代码所控制的资源(是否正确)模拟多种替代方案而无需物理成本机器人或者组件能够在部署前被提前验证仿真能够在方案设计阶段完成,适合多个项目协作展示系统判断是否可行仿真兼容多种语言更短的交付时间(Delivery times)二、仿真的缺点一个应用只能仿真那些被仿真考虑的因素,那些没有考虑的因素就不永

2022-03-05 01:10:30 13567

原创 extern关键字

extern关键字主要用于改变全局变量的默认链接行为。对于一个const全局变量,默认链接行为是内部的,也就是const只在本文件是可见的;对于一个普通全局变量,默认是外部的,要特别注意重复定义问题。......

2022-01-25 20:00:00 1988

原创 Leetcode (二) 加一

刚开始还想把数组转成对应整数后加一,在取出每一位再转置,结果溢出了。而且题目看,这个数居然有100位,显然转成数字不太现实。下面是一种解题思路:写成代码如下:vector<int> plusOne(vector<int>& digits) { vector<int> res = digits; size_t cur = res.size() - 1; while (1) { if (res[cur.

2022-01-19 21:33:44 107

原创 Leetcode(一)回文数

方法一:观察法bool isPalindrome(int x) { int cur = 0; int num = x; if (x < 0) return false; while (num != 0) { cur = cur * 10 + num % 10; num = num / 10; } return cur==x;}方法二:转成字符串bool isPalindrome(int.

2022-01-18 23:03:15 4479

原创 二分法求函数零点

零点存在性定理结合二分法求取函数零点。

2022-01-18 21:26:33 10386

原创 如何画一个算法流图?

一、流程图的基本组成一般由框和流程线(带箭头的直线)组成。1.1 起止框(不可或缺)上面的圆角矩形代表算法的开始或结束。1.2 输入、输出框上面的平行四边形代表算法的输入和输出。1.3 处理框(执行框)上面的矩形代表数据的处理和执行,一般是赋值或者计算两种类型。按照约定,赋值一般用←\leftarrow←来表示,如下:1.4 判断框上面的菱形代表条件的判断,一般来说判断条件是:两元判断,当然也不排除有多个判断。二、流程图的基本原则为了增加框图的可读性,需要规定一些规则:请

2022-01-17 11:27:36 24120 3

原创 一种传送带跟踪方法实现

一种传送带跟踪实现方法。

2021-12-26 21:44:44 4077

原创 QObject::connect第五个参数

一、事件循环在说明事件循环时,如下程序:#include <stdio.h>#include <string.h>int main(int argc, char* argv[]){ char input[1024]; //假设输入长度不超过1024 const char quitStr[] = "quit"; bool quit = false; while (false == quit) { scanf_s("%s",

2021-12-22 11:32:26 695

原创 QCustomplot(五)QCPAxisRect进行子绘图

文中介绍了QCustomPlot 子绘图需要掌握的类,也就是Matlab中的subplot,最后给出了一个完整的例子。

2021-12-20 22:53:36 8330 8

原创 QCustomplot(零)QCustomPlot官方Demo使用

如何利用官方Demo完成自己项目上的绘制任务。

2021-12-17 13:03:47 1268

原创 C++11线程库 (八) 异步任务

标准库提供了异步任务返回值和异常的便利接口。这些值的属性是异步任务共享的,拥有std::future和std::shared_future的实例线程对共享变量进行查看、等待的等其他操作。

2021-12-07 09:32:48 2270

原创 标准库(二)输入输出库Manipulators

IO操纵符是一种辅助控制输入输出流方法。操纵符对象可以分为两类,一个是带参数的(std::setw(10)),另外一个是不带参数的(set::hex)。下面这些操作是定义在<ios>中的:操作含义boolalphanoboolalpha布尔型显示类型(默认是0 1)showbasenoshowbase是否显示进制(默认不显示)showpointnoshowpoint小数部分为空是否显示小数点(默认不显示)showposnoshowpos非负数是否

2021-11-29 15:39:37 591

原创 对比一下指针和引用

BASIS FOR COMPARISONPOINTERREFERENCE定义指针是存着内存地址的变量引用是变量的别名变量地址操作符*, ->&空引用可指向空永远不为空初始化创建不一定初始化创建一定要初始化初始化时期程序运行的任何时间点只能在创建之时初始化赋值根据需要可以多次赋值任何时候都不能再次赋值从CPU角度看引用和指针,其实两者并没有什么区别。也就是说引用是底层实现还是指针;从top-level、low-...

2021-11-12 10:17:35 336

原创 标准库(三)正则表达式

一、正则表达式是什么?正则表达式是一种描述字符串的一种手段。正则表达式像是一系列字符串特征的描述,比如我们需要在一系列文本中找出xxx@foxmail.com的字符串,我们就可以通过描述正则表达式这个特征找出所有的email地址。正则表达式在很多地方都有应用,如文本合法性表达,网络爬虫,文本替换等等。二、正则表达式库简介C++11已经支持正则表达式(RE库),头文件在regex2.1 正则组件组件名含义regex表示一个正则表达式类regex_match将一个字符串与

2021-11-09 10:02:16 1161

原创 标准库(二)输入输出类文件流2

编程中难免会遇到处理文件,C++定义了fstream和ofstream处理文件设备。一、文件流的特有操作操作含义fstream fstrm创建一个未绑定的文件流fstream fstrm(s)创建一个名为s的文件流fstream fstrm(s,mode)以模式mode创建一个文件名为s的文件fstrm.open(s)打开名为s的文件并与fstrm绑定(无返回值)fstrm.close()关闭与fstrm的绑定(无返回值)fstrm.is_op

2021-11-05 10:14:31 244

原创 标准库(二)输入输出类概述1

C++作为一种面向对象的语言,处理输入和输出都是通过一系列定义在标准库的类来完成的。IO库可以读写内置类型,用户也可以通过定义自己的IO操作,读取自己专属的IO操作。C++处理IO的主要思想是“流”,数据和水流一样,写入和读出。一、IO类有那些?最常见的流是关联到控制台的,用户的所有操作(键盘输入、屏幕显示)都是在这样的流中完成的,没错他就是标准输入输出(iostream),另外一个常见的流就是文件流(fstream),输入输出操作都是关联到文件的,最后一个就是字符串流(sstream),这样的流一般用

2021-11-04 13:45:42 223

翻译 C++11线程库 (七) 线程的停止

在这篇文章里,我们将会讨论如何在C++11下停止和终止一个线程。为什么C++11不直接提供一个停止线程的方法?这是因为线程在停止之前可能有一些资源需要被释放、关闭,比如说:线程中已经获取锁的所有权,突然退出谁将会负责这个锁所有权释放?如果线程打开了一写文件流,谁将会回收这个文件资源?如果线程中有动态内存分配,内存泄露如何避免?简单来说就是线程退出时可能有资源需要回收,而C++11无法知晓用户具体有哪些资源。虽然如此,但是我们仍可以通过简单的方式实现线程退出:即定时检查或者程序中某个节点检查,检

2021-10-29 10:20:47 8398 2

原创 QT事件循环

一句话说明事件循环:以队列形式重新分配线程时间片。一、事件有关的几个问题问题1:Qt中常见的事件有哪些?答:鼠标事件(QMouseEvent)、键盘事件(QKeyEvent)、绘制事件(QPaintEvent)、窗口尺寸改变(QResizeEvent)、滚动事件(QScrollEvent)、控件显示(QShowEvent)、控件隐藏(QHideEvent)、定时器事件(QTimerEvent)等等。。问题2:Qt是事件驱动的,这句话该怎么理解呢?Qt将系统产生的信号(软件中断)转换成Qt事件,并且

2021-10-19 15:55:36 493

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除