- 博客(50)
- 收藏
- 关注
原创 freertos入门---ARM架构简明教程
我们在组装电脑时会得到一个主板,然后我们去买CPU,将CPU插入主板,然后去买内存条,将内存条也插入主板,接着我们还需要将硬盘通过接线也连接上电脑。如下图所示:对于我们主板,我们CPU、内存条、硬盘它们是离散的,它们需要通过主板组装在一起。对于我们单片机,它被称为SOC(System on Chip),它是指在一个芯片上具有一个完整的或者相对完整的系统,比如说一款ARM芯片,在这一款芯片上它包含CPU、内存、Flash。Flash负责保存我们的程序,CPU负责运行程序、程序运行过程中我们还需要用到内存。
2024-05-19 16:53:42 799
原创 freertos入门---创建FreeRTOS工程
双击运行STM32CubeMX,在首页选择“ACCESS TO MCU SELECTOR”,如下图所示: 在MCU选型界面,输入自己想要开发的芯片型号,如:STM32F103C8T6: 在“System Core”的“RCC”处选择外部高速时钟源和低速时钟源,这里我们选择外部高速时钟源,如下图所示: 此外,本实验使用FreeRTOS,FreeRTOS的时基使用的是Systick,而STM32CubeMX中默认的hal库时基也是Systick,为了避免可能的冲突,最好将HAL库的时基换为其
2024-05-02 09:59:41 1129
原创 Linux应用开发---网络通信
套接字(socket)是Linux下的一种进程间通信机制(socket IPC),使用 socket IPC 可以使得在不同主机上的应用程序之间进行通信(网络通信),也可以是同一台主机上的不同应用程序。socket IPC 通常使用客户端-服务器这种模式完成通信,多个客户端可以同时连接到服务器中,与服务器完成数据交互。内核向应用层提供了 socket 接口,我们只需要调用 socket 接口开发我们的应用程序即可。
2024-02-05 15:45:40 1434
原创 Qt---资源文件添加
Qt 资源系统是一个跨平台的资源机制,用于将程序运行时所需要的资源以二进制的形式存储于可执行文件内部。如果编写的程序需要加载特定的资源,那么将其放置在资源文件中,便不需要担心文件的缺失。
2024-02-04 17:51:11 625
原创 VScode远程开发
在一文中,我么介绍了如何使用ssh远程连接Jetson nano端,但是也存在诸多不便,比如:编辑文件内容时,需要使用vi编辑器,且在一个终端内,无法同时编辑多个文件。本节将介绍一较为实用的功能——VSCode远程开发,我们可以在VScode中以图形化的方式在Jetson nano上远程开发程序,比ssh的使用更方便快捷,可以大大提高程序开发效率。
2024-01-18 21:47:43 982
原创 ROS---传感器集成
对于ROS机器人,如果想让其启动,我们需要逐一启动底盘控制与激光雷达,操作有点冗余。并且如果只是简单启动这些节点,那么在在 rviz 中显示时,会发现出现了TF转换异常,比如参考坐标系设置为odom时,雷达信息显示失败。
2024-01-18 16:05:39 634
原创 Linux网络编程---socket编程接口接口函数
客户端通过 connect()函数请求与服务器建立连接,对于 TCP 连接来说,调用该函数将发生 TCP 连接的握手过程,并最终建立一个 TCP 连接,而对于 UDP 协议来说,调用这个函数只是在 sockfd 中记录服务器 IP 地址与端口号,而不发送任何数据。当有客户端连接请求到达时,accept函数会与远程客户端建立连接,并且返回一个新的套接字,这个新的套接字与socket函数返回的套接字不同,我们后续与客户端进行数据交互是通过这个套接字。函数执行成功返回新的套接字,失败返回-1。
2024-01-16 21:04:15 1112
原创 Linux网络编程---IP 地址格式转换函数
我们更容易阅读的IP地址是以点分十进制表示的,例如:192.168.5.10 ,这是一种字符串的形式,但是计算器所需要的IP地址是以二进制进行表示,这便需要我们在点分十进制字符串和二进制地址之间进行转换。点分十进制字符串和二进制地址之间的转换函数主要有:inet_aton、inet_addr、inet_ntoa、inet_ntop、inet_pton 这五个,在使用它们时需要包含头文件<sys/socket.h>、<arpa/inet.h>以及<netinet/in.h>。
2024-01-15 19:46:57 1525
原创 惯性导航---里程计非完整性约束
在进行管道中心线定位时,惯性导航系统在初始化后通过不断地力学编排更新载体的姿态、速度和位置信息,但是由于传感器是惯性器件,其导航误差会不断累积,这便需要借助外界观测量辅助惯性导航系统,才可以进行精确的定位。外界辅助分为姿态辅助观测、速度辅助观测和位置辅助观测。通常位置辅助观测可由全球卫星定位系统获取,速度辅助观测可以由里程计或多普勒测速仪获取。本文将介绍里程计观测信息结合非完整性约束辅助的组合导航。
2024-01-13 21:24:49 1305
原创 ROS---激光雷达的使用
激光雷达是现今机器人尤其是无人车领域及最重要、最关键也是最常见的传感器之一,是机器人感知外界的一种重要手段。本文将介绍在ROS下使用激光雷达传感器,我们选用的激光雷达型号为思岚A1。
2024-01-11 22:08:05 1384
原创 使用ros_arduino_bridge控制机器人底盘
搭建了ROS分布式环境后,将ros_arduino_bridge功能包上传至Jetson nano,就可以在PC端通过键盘控制小车的运动了。
2024-01-10 20:37:09 1804 9
原创 C语言中常用的字符串函数(strlen、sizeof、sscanf、sprintf、strcpy)
sizeof是计算变量在内存的占空间的大小,单位是字节。在这里插入代码片sscanf函数是C语言中的一个标准库函数,用于从格式化的字符串中读取输入。其中,str表示要读取的字符串,format表示格式控制字符串,…表示可变参数列表。strcpy函数是将一个字符串复制到另一块空间地址中的函数,‘\0’是停止拷贝的终止条件,同时也会将 ‘\0’ 也复制到目标空间。char *dest------------目标字符串的首地址。
2024-01-08 19:56:27 2478
原创 SSH远程连接
在多处理器的分布式架构中,不同的ROS系统之间可能会频繁的涉及到例如:我们在PC端编写ROS程序,而最终需要在Jetson nano上运行,如何将相关目录以及文件从PC上传到Jetson nano?这便需要使用SSH工具。
2024-01-06 23:11:53 623
原创 Linux系统调用接口---使用write函数写文件
我们打开了一个文件,可以使用write函数往该文件中写入数据。当我们往该文件中写入N个字节数据,位置pos会从0变为N,当我们再次往该文件中写入M个字节数据,位置会变为N+M。
2023-12-13 21:39:48 1165
原创 卡尔曼滤波原理
卡尔曼滤波有连续型和离散型两种形式,连续型卡尔曼滤波器常用于卡尔曼滤波的理论性能分析,离散型卡尔曼滤波器可以在数字计算机上直接实现,本文将介绍数字型卡尔曼滤波器的使用。但是要将卡尔曼滤波用于实际模型中却又诸多考量:若系统模型与实际运动模型不匹配,或观测模型与实际观测输出不匹配时,都可能导致滤波发散,得到错误结果。因此在使用卡尔曼滤波时,应优化实际问题的数学模型、合理地设置过程噪声、观测噪声,使状态空间模型尽可能准确才能获取精确的状态估计。的状态最优估计的方差协方差阵的预测值,P。为过程噪声(s×1),V。
2023-12-13 11:27:22 742
原创 Linux系统调用接口---使用open函数创建/截断文件
open函数不仅可以打开一个文件,还可以创建一个文件或者去截断一个文件。本文将介绍如何使用open函数去创建一个文件或者去截断一个文件。
2023-12-12 21:17:53 764
原创 惯性导航的初始对准和初始校准
捷联惯导系统在载体导航之前需要先进行初始对准,以确定载体初始的姿态、速度和位置信息。只有获取了载体的姿态、速度、位置的初始值,并以初始值为基础通过力学编排才能计算出未来各时刻的姿态、速度和位置信息。因此载体所有的定位信息都是在初始状态下不断力学编排得到的。惯导系统初始对准就是用来确定参考坐标系和导航坐标系的一个过程。常见的初始对准技术有静基座粗对准、静基座静对准和动基座对准等算法。由于静基座粗对准算法简单、容易实现,本文将介绍静基座粗对准的算法。
2023-12-09 10:16:33 3639 2
原创 Linux系统调用接口---使用open函数打开文件
在Linux下,每条命令可以通过man命令来获取使用手册。man命令的使用方法为:man + [要查询的命令]。查询man命令的使用手册可以在终端中输入以下指令man man我们想查找open函数的用法,open函数是系统调用,所以我们查找的时候可以把序号2加上。man 2 open从帮助文档中我们可以看出使用open函数需要包含以下头文件。在man中含有以下常用的按键和功能。
2023-12-02 10:46:19 1026
原创 使用FileZilla传文件
MobaXterm 既可以 ssh 登录又可以传输文件,不过 Mobaxterm 在传输文件时使用效率上没有 FileZilla 高,所以我们选择FileZilla在Windows 和 Ubuntu 之间互相传输文件。
2023-11-24 09:26:51 993
原创 NFS、Vim下载以及环境配置
使用下面命令一键配置/初始化开发环境(其实就是安装 tftp,nfs,vim 等软件,此脚本只支持 Ubuntu-16.04 /Ubuntu-18.04)。
2023-11-23 15:39:54 279
原创 Qt----UI界面设计
在新建工程中,我们需要将Generate form勾选上。在项目中,我们发现添加了一个.ui文件,我们以后可以在这个文件里进行UI界面的设计。在.pro文件中,我们也可以看到添加了一些东西。
2023-11-18 10:34:06 3955
原创 MobeXterm的使用
MobeXterm的使用1 使用 MobaXterm 远程登录 Ubuntu使用ifconfig查看Ubuntu的IP运行 MobaXterm,建立 Session输入密码以上只需要配置一次,以后双击即可打开。2 使用 MobaXterm 串口连接开发板连接串口线和电源线将串口线与电脑、板子连接,开发板插上电源。电源开关可以先不用打开。查看 USB 串口模块驱动在设备管理器中查看是否有新添的串口设备,如果没有考虑是否安装好驱动。使用 MobaXterm 软件打开串口
2023-11-17 17:09:36 3005
原创 虚拟机VMware配置双网卡
NAT(Network Address Translation),指网络地址转换。使用NAT时,Ubuntu操作系统通过委托Windows的网络连接来访问外部网络。当Ubuntu发送数据包时,这些数据包首先会被Windows接收,然后由Windows转发到外部网络。外部网络只能看到Windows,而无法直接感知到Ubuntu的存在。如果Window可以正常上网,Ubuntu一定可以正常上网。
2023-11-14 20:46:29 7405
原创 Git的使用
在window下,git安装包的地址为。下载好安装包后,按照默认安装即可(建议安装目录设为D盘),安装完成后,在开始菜单里找到“Git”->“Git Bash”,双击蹦出一个类似命令行窗口的东西。Git Bash 中命令的用法跟 Linux 完全一样,比如也可以执行 cd、ls 等命令。
2023-11-12 22:26:19 83 2
原创 Qt----QMainWindow_状态栏、铆接部件、核心部件
新建状态栏并将其设置到窗口中我们发现状态栏并没有显示,因为我们还没有添加标签控件,我们可以放置标签控件。我们也可以在状态栏的右侧放置标签。
2023-10-28 11:18:31 148
原创 Qt----QMainWindow_菜单栏和工具栏
QMainWindow是一个为用户提供主窗口程序的类,包含一个菜单栏(menu bar)、多个工具栏(tool bars)、多个锚接部件(dock widgets)、一个状态栏(status bar)及一个中心部件(central widget),是许多应用程序的基础,如文本编辑器,图片编辑器等。
2023-10-26 15:53:37 274
原创 Qt----信号和槽
需求:下课后,老师会触发一个信号,饿了,学生响应信号,请客吃饭。首先创建老师类和学生类。在老师类中,定义信号。在学生类中,设置槽函数。创建老师和学生对象。创建连接并且触发信号设置重载信号设置重载槽函数当我们选择如下方法进行connect连接,程序会报错,这是由于connect不知道选择哪一个重载的信号和槽函数。为了解决以上问题,我们选择函数指针的方法我们可以看到qdebug输出的宫保鸡丁会有引号,但是我们不需要引号,我们需要将QString转为char*。
2023-10-25 23:29:19 60
原创 Ubuntu和Windows的简单比较和使用
在ubuntu下打开终端,可以点击鼠标右键选择open Terminal,也可以使用ctrl+alt+t直接打开终端。在终端中输入ls命令,可以看到当前文件目录。
2023-10-25 10:40:13 354
原创 Qt的对象树与坐标系
在Qt中创建对象的时候会提供一个Parent对象指针,下面来解释这个parent到底是干什么的。QObject是以对象树的形式组织起来的。当你创建一个QObject对象时,会看到QObject的构造函数接收一个QObject指针作为参数,这个参数就是parent,也就是父对象指针。这相当于,这种机制在GUI程序设计中相当有用。例如,一个按钮有一个QShortcut(快捷键)对象作为其子对象。当我们删除按钮的时候,这个快捷键理应被删除。这是合理的。QWidget是能够在屏幕上显示的一切组件的父类。
2023-10-24 22:12:01 111
原创 Qt----QPushButton的创建
QPushButton类需要包含头文件#include < QPushButton >,需要在.pro文件中添加widgets模块,并且父类为QAbstractButton,子类为QCommandLinkButton。
2023-10-22 21:17:14 151
原创 QT----创建第一个Qt程序
点击New Project,选择Qt Widgets Application创建项目名称设置项目路径点击下一步选择基类,QMainWindow是含菜单类,QDialog是含对话框类,QWidget是QMainWindow和QDialog的父类,创建一个空窗口。点击下一步选择版本,点击下一步完成创建。
2023-10-22 17:19:51 105
原创 Qt----设置父对象
在Qt中,我们可以通过设置父对象的方式使两个对象建立连接。如果不设置父对象,两个对象相互独立,不符合我们的设计要求。假如有A和B两个对象,将B设置为A的父对象,A放在B的上面,当指定B显示的时候,A会自动显示。
2023-10-22 14:58:47 311
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人