ROS2初步
安装ROS2下面给出一套在 Ubuntu 上可复现的安装方式(以 FishROS 脚本为例)。1wget http://fishros.com/install -O fishros && bash fishros如果需要卸载 ROS 发行版,可执行:1sudo apt remove ros-foxy-* && sudo apt autoremove 基础概念:与 ROS1 类似,ROS2 也由节点、工作空间、功能包等核心概念构成。 节点 每一个节点都负责一个单独的模块。可以把系统想成一条流水线:每个节点只负责一件事,然后通过标准通信机制协作。例如:一个节点采集激光雷达数据,一个节点做定位,一个节点做路径规划,一个节点控制底盘执行。 节点通信(详见) ROS2 中主要有以下四种通信方式: 话题-topics 服务-services 动作-Action 参数-parameters 启动节点需要使用指令:1ros2 run <package_name> <executable_name> 命令行查看节点信息这里涉及以下两个 ...
ROS1初步
Topic 与 Message 基础概念话题的基本规则: 话题 Topic 是节点间进行持续通信的发布-订阅机制。 通信双方利用话题名称建立连接,话题中传输的数据单元称为消息(Message)。 消息通常按固定频率持续发送以保证实时性。 消息发送方为发布者(Publisher),接收方为订阅者(Subscriber)。 更多规则: 一个 ROS 节点网络中可同时存在多个话题。 一个话题可以有多个发布者和多个订阅者。 一个节点可同时订阅或发布多个话题。 不同传感器通常各自使用独立话题名称,每条话题只有一个发布者。 速度指令话题也可以有多个发布者,但同一时刻只有一个生效。 Topic 的 C++ 实现发布者流程: 确定话题名称和消息类型。 include 消息类型对应的头文件。 通过 NodeHandle 发布话题,得到 Publisher 对象。 构造消息包并赋值。 调用 pub.publish(msg) 发送消息。 常用调试命令: 123rostopic list # 列出所有活跃话题rostopic echo <话题名> # ...
关于过年抢红包的数学模型
建模初衷旧词已去,新春将至,首先祝各位新春快乐,龙年大吉! 最近,我不禁留意到许多朋友在抢红包这一传统活动中屡次受挫,心生疑惑与好奇。在这个新年风俗的背后,究竟隐藏着怎样的数学模型和本源机制呢?于是,我产生了一个突发奇想的想法,希望通过构建一个专注于抢红包的数学模型,深入探讨这一活动的规律、趋势以及可能的变数。 这个数学模型的目标不仅仅是揭示红包金额的分配方式,更是希望通过对抢红包过程的数学建模,挖掘其中的概率学、随机性、和博弈理论等数学原理。通过精心设计模型,我们或许能够理解为何有些人总能赢得更多,而有些人却屡屡受挫的原因。这也为我们提供了一个新的视角,来看待这个看似简单却又蕴含深厚数学内涵的传统文化现象。 模型雏形 在红包数据庞大的情况下,抢红包的机制可以近似看作是随机抽样。我们可以采用蒙特卡洛模拟方法,通过生成大量的随机样本进行统计分析,从而估算红包分配的平均情况。这种方法通过模拟多次独立的红包抢夺过程,得到了一个近似的红包金额分布, 这种方法的优势在于,它不仅能够在庞大的数据集上进行模拟,而且还能够灵活地应用于不同的分布类型。我 ...
OpenCV学习
经过长达一天的重装和环境配置,正式开始OpenCV的学习。 参考资料:OpenCV入门【C++版】_opencv c++入门-CSDN博客 利用VScode和cmake编译构建C++工程代码 - Oldpan的个人博客 OpenCV - C++实战(05) — 颜色检测_c++图像色素带识别-CSDN博客 基本 (图片&视频)操作首先在opencv中创建一个文件夹mytest,用于存放后续的测试程序,并创建程序test1(后续同理) 123mkdir mytestcd mytestgedit test1.cpp 找一张图片(好友丑照)命名为1.jpg存放于这个目录中用于后续测试(蹂躏)。 1 图片腐蚀示例代码:1234567891011121314#include <opencv2/highgui/highgui.hpp>#include <opencv2/imgproc/imgproc.hpp>using namespace cv;int main(){ Mat srcImage =imread("1.jpg"); ...
CMake入门
1 前言1 .1Cmake是什么CMake是一个跨平台的安装(编译)工具,可以用简单的语句来描述所有平台的安装(编译过程)。可以构建、测试、打包项目。CMake 用于使用简单的平台和编译器独立配置文件来控制程序编译过程,并生成可在您选择的编译器环境中使用的主机配置文件和项目文件。对于c++工程来说,通过cmake配置,然后通过cmake工具自动生成makefile文件,最后通过make编译出二进制文件。也就是说CMake 用于使用简单的平台和编译器独立配置文件来控制程序编译过程,并生成可在您选择的编译器环境中使用的主机配置文件和项目文件。 1.2 Cmake 优缺点 优点 编程式的配置 支持跨平台 支持强依赖受控管理 官方提供的依赖查找方式 支持配置分离 支持多种外部调用方式 官方提供多种系统检测接口 支持工具链(Toolchain)以传递配置 官方提供了多种工具链实现 自身具有版本控制及约束功能 缺点 文档太差。cmake的文档差是一个公认的问题,那官方文档上连一个具体实例都没有,关键点也不会明确体现出来。 弱变量及未定义的变量导致非预期行为。cmake是一个弱语言,其 ...
神经网络初识
参考资料:新手入门python实现神经网络,超级简单!_py 神经网络-CSDN博客 📎Python神经网络编程.pdf Python学习篇30-神经网络_python神经网络-CSDN博客 “反向传播算法”过程及公式推导(超直观好懂的Backpropagation)-CSDN博客 反向传播算法推导过程(看一篇就够了)_神经网络反向传播算法推导-CSDN博客 1.发展历史神经网络的发展历史可以追溯到20世纪中叶。 McCulloch和Pitts的神经元模型(1943): Warren McCulloch和Walter Pitts提出了神经元模型,将神经元抽象为二进制开关,形成了后来神经网络的基础。 感知器的提出(1957): Frank Rosenblatt提出了感知器,这是一种基于神经元模型的学习算法。感知器可以实现简单的二分类任务。 早期神经网络的研究(1960s-1970s): 在这一时期,神经网络受到了关注,但受到了硬件和理论上的限制。神经网络的训练和应用遇到了困难。 反向传播算法的提出(1986): David Rum ...
筛去重复元素
最近发现这样一道题,大致意思是给定一个数组,其中元素仅有一个只出现一次,其余元素均出现两次,编写程序以找出这个数。 这里可以用到异或运算。 异或运算法则如下: 交换律:A ^ B = B ^ A 结合律:A ^ (B ^ C) = (A ^ B) ^ C 恒等律:X ^ 0 = X 归零律:X ^ X = 0 自反:A ^ B ^ B = A ^ 0 = A 这里主要用到后三条性质,可以定义变量key,不断与数组元素进行异或运算,某种意义上达到对于数组的压缩储存。 代码实现如下: 123456789101112#include <stdio.h>int func(int *array,int num){ int key=0; for(int i=0;i<num;i++){ key^=array[i]; } return key;}int main(){ int array[]={1,2,4,6,2,1,4,7,8,9,8,7,9}; ...
文件基本操作
文件基本操作(临时抱佛脚,捞捞) 123456789101112131415161718192021222324252627282930313233#include <stdio.h>int main() { FILE *file; // 文件指针 char filename[] = "example.txt"; // 文件名 // 打开文件以进行读写操作(如果文件不存在,则创建新文件) file = fopen(filename, "w+"); if (file == NULL) { printf("无法打开文件 %s\n", filename); return 1; } // 写入数据到文件 fprintf(file, "这是一个文件操作示例。\n"); fprintf(file, "欢迎使用 C 语言进行文件操作!\n"); // 将文件指针移到文件开 ...
链表基本操作
链表基本操作(临时抱佛脚的笔记) 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109#include <stdio.h>#include <stdlib.h>// 定义链表节点结构struct Node { int data; struct Node *next;};// 创建新节点struct Node* createNode(int data) { struct Node* newNode = (struct Node*)malloc(sizeof(struct Node)); if (newNode == NULL) & ...
删除数字
题目描述从键盘接收一个字符串,由数字、大小写字母和空格组成。程序功能为去掉字符串中的所有数字,最后输出变更后的字符串。注意,并列的空格需要缩减为1个空格。比如键盘输入如下: (1)能够从键盘正确接收字符串;(2分) (2)能够去除数字;(4分) (3)能够合并并列的空格;(4分) (4)能够输出变更后的字符串;(2分) (5)程序能够全面正确运行;(3分) 源代码123456789101112131415161718192021222324252627282930313233343536373839404142434445#include <stdio.h>void input(char a[]) { printf("Enter a string: "); fgets(a, 100, stdin); // 使用fgets获取一行输入}void print(char a[]) { printf("%s\n", a);}#include <stdio.h>void d ...
