- 博客(48)
- 收藏
- 关注
原创 python_day1
由于之前已经安装好了vscode,并且安装好了其中的python扩展,直接新建文件夹py_study,之后的py代码都放在此文件夹中,新建第一个py文件,hello_world.py。今天主要在官网安装了python3.13。在终端命令行执行(win+R输入cmd)需要先切换到E盘(工作空间盘)
2025-10-16 20:21:07
167
原创 1、机器学习与深度学习
它的基本思想是通过测量不同数据点之间的距离来进行预测。回归任务(填空题) 分类任务(选择题) 生成任务(结构化)(简答题)1、距离度量:KNN使用距离度量(通常是欧式距离)来衡量数据点之间的相似性。机器学习算法:一般是基于数学,或者统计学的方法,具有很强的可解释性。机器学习,具有数学上的 可解释性,但准确率不是 百分百,且不灵活。KNN:k最近邻居(k-Nearest Neighbors)深度学习:设计一个很深的网络架构让机器自己学。1、人工智能、机器学习、深度学习关系。
2025-10-14 20:15:42
230
原创 ros0基础-day30
nodelet软件包旨在提供在同一进程中运行多个算法(节点)的方式,不同算法之间通过传递指向数据的指针来代替了数据本身的传输(类似于编程传值与传址的区别),从而实现零成本的数据拷贝。需求:参考 nodelet 案例,编写 nodelet 插件类,可以订阅输入数据,设置参数,发布订阅数据与参数相加的结果。需求:再同一线程中启动两个Plus节点A与B,向A发布一个数字,然后经A处理后,再发布并作为B的输入,最后打印B的输出。rosnode list 查看,nodelet 的节点名称是: /xiaowang;
2025-08-13 14:10:07
546
原创 ros0基础-day29
参数服务器的数据被修改时,如果节点不重新访问,那么就不能获取修改后的数据,例如在乌龟背景色修改的案例中,先启动乌龟显示节点,然后再修改参数服务器中关于背景色设置的参数,那么窗体的背景色是不会修改的,必须要重启乌龟显示节点才能生效。插件是指从运行时库中动态加载的类。1.导航插件:在导航中,涉及到路径规划模块,路径规划算法有多种,也可以自实现,导航应用时,可能需要测试不同算法的优劣以选择更合适的实现,这种场景下,ROS中就是通过插件的方式来实现不同算法的灵活切换的。
2025-08-12 17:01:42
719
原创 ros0基础-day28
创建两个ROS 节点,服务器和客户端,客户端可以向服务器发送目标数据N(一个整型数据)服务器会计算 1 到 N 之间所有整数的和,这是一个循环累加的过程,返回给客户端,这是基于请求响应模式的,又已知服务器从接收到请求到产生响应是一个耗时操作,每累加一次耗时0.1s,为了良好的用户体验,需要服务器在计算过程中,每累加一次,就给客户端响应一次百分比格式的执行进度,使用 action实现。然后功能包下新建 action 目录,新增 Xxx.action(比如:AddInts.action)。
2025-08-11 17:15:56
660
原创 ros0基础-day27
5.在 rviz 中添加组件,显示栅格地图最后,就可以通过键盘控制gazebo中的机器人运动,同时,在rviz中可以显示gmapping发布的栅格地图数据了,但是,前面也介绍了,由于精度和检测范围的原因,尤其再加之环境的特征点偏少,建图效果可能并不理想,建图中甚至会出现地图偏移的情况。答案是可以的,不过二者发布的消息类型是完全不同的,如果想要实现传感器的置换,那么就需要将深度相机发布的三维的图形信息转换成二维的激光雷达信息,这一功能就是通过depthimage_to_laserscan来实现的。
2025-08-06 16:17:09
856
原创 ros0基础-day26
路径规划算法在move_base功能包的move_base节点中已经封装完毕了,但是还不可以直接调用,因为算法虽然已经封装了,但是该功能包面向的是各种类型支持ROS的机器人,不同类型机器人可能大小尺寸不同,传感器不同,速度不同,应用场景不同....最后可能会导致不同的路径规划结果,那么在调用路径规划节点之前,我们还需要配置机器人参数。SLAM构建的地图是静态地图,而导航过程中,障碍物信息是可变的,可能障碍物被移走了,也可能添加了新的障碍物,导航中需要时时的获取障碍物信息;
2025-08-05 15:21:43
713
原创 ros0基础-day25
秉着"不重复发明轮子"的原则,ROS 中导航相关的功能包集为机器人导航提供了一套通用的实现,开发者不再需要关注于导航算法、硬件交互... 等偏复杂、偏底层的实现,这些实现都由更专业的研发人员管理、迭代和维护,开发者可以更专注于上层功能,而对于导航功能的调用,只需要根据自身机器人相关参数合理设置各模块的配置文件即可,当然,如果有必要,也可以基于现有的功能包二次开发实现一些定制化需求,这样可以大大提高研发效率,缩短产品落地时间。在ROS中,地图数据的序列化与反序列化可以通过 map_server 功能包实现。
2025-08-04 18:35:22
562
原创 ros0基础-day24
关于URDF(Xacro)、Rviz 和 Gazebo 三者的关系,前面已有阐述: URDF 用于创建机器人模型、Rviz 可以显示机器人感知到的环境信息,Gazebo 用于仿真,可以模拟外界环境,以及机器人的一些传感器,如何在 Gazebo 中运行这些传感器,并显示这些传感器的数据(机器人的视角)呢?场景:同一套 ROS 程序,如何部署在不同的机器人系统上,比如:开发阶段为了提高效率是在仿真平台上测试的,部署时又有不同的实体机器人平台,不同平台的实现是有差异的,如何保证 ROS 程序的可移植性?
2025-08-01 13:19:27
783
原创 ros0基础-day23
Arbotix:Arbotix 是一款控制电机、舵机的控制板,并提供相应的 ros 功能包,这个功能包的功能不仅可以驱动真实的 Arbotix 控制板,它还提供一个差速控制器,通过接受速度控制指令更新机器人的 joint 状态,从而帮助我们实现机器人在 rviz 中的运动。需要注意的是,原则上,除了 base_footprint 外,机器人的每个刚体部分都需要设置惯性矩阵,且惯性矩阵必须经计算得出,如果随意定义刚体部分的惯性矩阵,那么可能会导致机器人在 Gazebo 中出现抖动,移动等现象。
2025-07-31 15:51:45
687
原创 ros0基础-day22
1、URDF优化_xacro前面 URDF 文件构建机器人模型的过程中,存在若干问题。问题1:在设计关节的位置时,需要按照一定的公式计算,公式是固定的,但是在 URDF 中依赖于人工计算,存在不便,容易计算失误,且当某些参数发生改变时,还需要重新计算。问题2:URDF 中的部分内容是高度重复的,驱动轮与支撑轮的设计实现,不同轮子只是部分参数不同,形状、颜色、翻转量都是一致的,在实际应用中,构建复杂的机器人模型时,更是易于出现高度重复的设计,按照一般的编程涉及到重复代码应该考虑封装。......
2025-07-30 17:10:32
643
原创 ros0基础-day21
1、URDF练习需求描述:创建一个四轮圆柱状机器人模型,机器人参数如下,底盘为圆柱状,半径 10cm,高 8cm,四轮由两个驱动轮和两个万向支撑轮组成,两个驱动轮半径为 3.25cm,轮胎宽度1.5cm,两个万向轮为球状,半径 0.75cm,底盘离地间距为 1.5cm(与万向轮直径一致)实现流程:创建机器人模型可以分步骤实现新建 urdf 文件,并与 launch 文件集成搭建底盘在底盘上添加两个驱动轮在底盘上添加两个万向轮1.新建urdf以及launch文件urdf 文件:基本实现。
2025-07-28 17:17:44
331
原创 ros0基础-day20
前面介绍过,URDF 不能单独使用,需要结合 Rviz 或 Gazebo,URDF 只是一个文件,需要在 Rviz 或 Gazebo 中渲染成图形化的机器人模型,当前,首先演示URDF与Rviz的集成使用,因为URDF与Rviz的集成较之于URDF与Gazebo的集成更为简单,后期,基于Rviz的集成实现,我们再进一步介绍URDF语法。与游戏引擎提供高保真度的视觉模拟类似,Gazebo提供高保真度的物理模拟,其提供一整套传感器模型,以及对用户和程序非常友好的交互方式。
2025-07-26 16:25:22
638
原创 ros0基础-day19
之前,在 ROS 中使用了一些实用的工具,比如: ros_bag 用于录制与回放、tf2_tools 可以生成 TF 树 ..... 这些工具大大提高了开发的便利性,但是也存在一些问题: 这些工具的启动和使用过程中涉及到一些命令操作,应用起来不够方便,在ROS中,提供了rqt工具箱,在调用工具时以图形化操作代替了命令操作,应用更便利,提高了操作效率,优化了用户体验。启动:可以在 rqt 的 plugins 中添加,或者使用rqt_bag启动。可以在 rqt 的 plugins 中添加,或者使用。
2025-07-24 13:14:13
384
原创 ros0基础-day18
1、TF坐标变换实操需求描述:程序启动之初: 产生两只乌龟,中间的乌龟(A) 和 左下乌龟(B), B 会自动运行至A的位置,并且键盘控制时,只是控制 A 的运动,但是 B 可以跟随 A 运行实现分析:乌龟跟随实现的核心,是乌龟A和B都要发布相对世界坐标系的坐标信息,然后,订阅到该信息需要转换获取A相对于B坐标系的信息,最后,再生成速度信息,并控制B运动。启动乌龟显示节点在乌龟显示窗体中生成一只新的乌龟(需要使用服务)编写两只乌龟发布坐标信息的节点。
2025-07-23 17:30:31
582
原创 ros0基础-day17
现有坐标系统,父级坐标系统 world,下有两子级系统 son1,son2,son1 相对于 world,以及 son2 相对于 world 的关系是已知的,求 son1原点在 son2中的坐标,又已知在 son1中一点的坐标,要求求出该点在 son2 中的坐标。在机器人系统中,涉及的坐标系有多个,为了方便查看,ros 提供了专门的工具,可以用于生成显示坐标系关系的 pdf 文件,该文件包含树形结构的坐标系图谱。首先,需要发布 son1 相对于 world,以及 son2 相对于 world 的坐标消息。
2025-07-22 19:01:22
392
原创 ros0基础-day16
机器人系统上,有多个传感器,如激光雷达、摄像头等,有的传感器是可以感知机器人周边的物体方位(或者称之为:坐标,横向、纵向、高度的距离信息)的,以协助机器人定位障碍物,可以直接将物体相对该传感器的方位信息,等价于物体相对于机器人系统或机器人其它组件的方位信息吗?显示是不行的,这中间需要一个转换过程。现有一移动式机器人底盘,在底盘上安装了一雷达,雷达相对于底盘的偏移量已知,现雷达检测到一障碍物信息,获取到坐标分别为(x,y,z),该坐标是以雷达为参考系的,如何将这个坐标转换成以小车为参考系的坐标呢?
2025-07-21 19:33:20
533
原创 ros0基础-day15
python 中关于参数设置的语法实现比 C++ 简洁一些,调用的API时 rospy.set_param,该函数中,参数1传入参数名称,参数2是传入参数值,参数1中参数名称设置时,如果以 / 开头,那么就是全局参数,如果以 ~ 开头,那么就是私有参数,既不以 / 也不以 ~ 开头,那么就是相对参数。在 ROS 中节点终端,不同的节点之间通信都依赖于话题,话题名称也可能出现重复的情况,这种情况下,系统虽然不会抛出异常,但是可能导致订阅的消息非预期的,从而导致节点运行异常。ROS是一个分布式计算环境。
2025-07-20 20:37:19
1255
原创 ros0基础-day14
是ROS中的一个虚包,里面没有实质性的内容,但是它依赖了其他的软件包,通过这种方法可以把其他包组合起来,我们可以认为它是一本书的目录索引,告诉我们这个包集合中有哪些子包,并且该去哪里下载。显而易见的,逐一安装功能包的效率低下,在ROS中,提供了一种方式可以将不同的功能包打包成一个功能包,当安装某个功能模块时,直接调用打包后的功能包即可,该包又称之为元功能包(metapackage)。在多级层深的ROS系统中,其实现与维护可能会出现一些问题,比如,如何关联不同的功能包,繁多的ROS节点应该如何启动?
2025-07-19 19:14:39
711
原创 ros0基础-day13
设计头文件,可执行文件本身作为源文件。1、编写头文件;2、编写可执行文件(同时也是源文件);3、编辑配置文件并执行。include编译执行2.2、设计头文件与源文件,在可执行文件中包含头文件。1、编写头文件;2、编写源文件;3、编写可执行文件;4、编辑配置文件并执行。include## 声明C++库#此处需要添加之前设置的 head 库head编译执行3、
2025-07-17 16:17:50
273
原创 ros0基础-day12
不同点:ros::spin() 是进入了循环执行回调函数,而 ros::spinOnce() 只会执行一次回调函数(没有循环),在 ros::spin() 后的语句不会执行到,而 ros::spinOnce() 后的语句可以执行。false的话,每2秒都会执行一次。在ROS程序中,频繁的使用了 ros::spin() 和 ros::spinOnce() 两个回旋函数,可以用于处理回调函数。ROS中时间相关的API是极其常用,比如:获取当前时刻、持续时间的设置、执行频率、休眠、定时器...都与时间相关。
2025-07-16 19:19:13
766
原创 ros0基础-day11
需求描述:编码实现向 turtlesim 发送请求,在乌龟显示节点的窗体指定位置生成一乌龟,这是一个服务请求操作。修改turtlesim乌龟显示节点窗体的背景色,已知背景色是通过参数服务器的方式以 rgb 方式设置的。启动 roscore、turtlesim_node 、乌龟生成节点,生成新的乌龟。要通过ROS命令,来获取乌龟生成服务的服务名称以及服务消息类型。获取话题:/spawn(spawn服务产生新的小乌龟)编写服务请求节点,生成新的乌龟。编译Ctrl+shift+B。运行cpp文件生成新的小乌龟。
2025-07-15 14:24:54
365
原创 ros0基础-day10
需求描述: 已知turtlesim中的乌龟显示节点,会发布当前乌龟的位姿(窗体中乌龟的坐标以及朝向),要求控制乌龟运动,并时时打印当前乌龟的位姿。启动 roscore、turtlesim_node 、控制节点以及位姿订阅节点,控制乌龟运动并输出乌龟的位姿。更新环境变量 source ./devel/setup.bash。更新环境变量 source ./devel/setup.bash。运行cpp文件获取乌龟姿态并且输出 (键盘控制小乌龟运动)首先,需要启动乌龟显示以及运动控制节点并控制乌龟运动。
2025-07-14 18:12:28
375
原创 ros0基础-day9
乌龟运动控制实现,关键节点有两个,一个是乌龟运动显示节点 turtlesim_node,另一个是控制节点,二者是订阅发布模式实现通信的,乌龟运动显示节点直接调用即可,运动控制节点之前是使用的 turtle_teleop_key通过键盘 控制,现在需要。本节主要是通过ROS内置的turtlesim案例,结合已经介绍ROS命令获取节点、话题、话题消息、服务、服务消息与参数的信息,最终再以编码的方式实现乌龟运动的控制、乌龟位姿的订阅、乌龟生成与乌龟窗体背景颜色的修改。前进(后退)时候的速度 线速度(米/秒)
2025-07-11 19:40:54
934
原创 ros0基础-day8
机器人系统中启动的节点少则几个,多则十几个、几十个,不同的节点名称各异,通信时使用话题、服务、消息、参数等等都各不相同,一个显而易见的问题是: 当需要自定义节点和其他某个已经存在的节点通信时,如何获取对方的话题、以及消息载体的格式呢?和之前介绍的文件系统操作命令比较,文件操作命令是静态的,操作的是磁盘上的文件,而上述命令是动态的,在ROS程序启动后,可以动态的获取运行中的节点或参数的相关信息。rossrv是用于显示有关ROS服务类型的信息的命令行工具,与 rosmsg 使用语法高度雷同。
2025-07-10 11:27:47
356
原创 ros0基础-day7
参数服务器相当于是独立于所有节点的一个公共容器,可以将数据存储在该容器中,被不同的节点调用,当然不同的节点也可以往其中存储数据。Talker 通过 RPC 向参数服务器发送参数(包括参数名与参数值),ROS Master 将参数保存到参数列表中。ROS Master 作为一个公共容器保存参数,Talker 可以向容器中设置参数,Listener 可以获取参数。Listener 通过 RPC 向参数服务器发送参数查找请求,请求中包含要查找的参数名。配置CMakeList.txt。
2025-07-09 15:50:58
379
原创 ros0基础-day6
ROS Master 负责保管 Server 和 Client 注册的信息,并匹配话题相同的 Server 与 Client ,帮助 Server 与 Client 建立连接,连接建立后,Client 发送请求信息,Server 返回响应信息。Client 启动后,也会通过RPC在 ROS Master 中注册自身信息,包含需要请求的服务的名称。ROS Master 会将节点的注册信息加入到注册表中。服务通信中,客户端提交两个整数至服务端,服务端求和并响应结果到客户端,请创建服务器与客户端通信的数据载体。
2025-07-08 18:28:37
497
原创 ros0基础-day5
在ROS通信协议中,std_msgs只封装了一些原生数据类型,如:String,Int64,Char,Bool,Empty等,这些数据一般只包含一个data字段,结构比较单一,功能存在一定的局限。为了方便代码提示以及误抛异常,需要先配置 vscode,将前面生成的 python 文件路径配置进 settings.json。编写发布订阅实现,要求发布方以10HZ(每秒10次)的频率发布自定义消息,订阅方订阅自定义消息并将消息内容打印输出。编译生成的中间文件查看(后续调用相关msg时,是从这些中间文件调用的)
2025-07-07 17:27:22
774
原创 ros0基础-day4
将此文件修改为这些代码后,可使用快捷键Ctrl+shift+B快速编译。重新编译(ctrl+shift+B)要重新编译才会生效。保持 ROS 后台通信(与其他节点的消息收发不受影响)精度依赖系统时钟(实际延时可能有毫秒级误差)1、发布方逻辑测试验证(C++版本)修改CMakeList配置文件。修改CMakeList.txt。配置CMakeList.txt。暂停当前线程 3 秒(阻塞式)liHua ziHan节点名称。先启动订阅者后启动发布者。重新执行节点1节点2。3、Python实现。
2025-07-03 19:57:11
248
原创 ros0基础-day3
ROS Master 负责保管 Talker 和 Listener 注册的信息,并匹配话题相同的 Talker 与 Listener,帮助 Talker 与 Listener 建立连接,连接建立后,Talker 可以发布消息,且发布的消息会被 Listener 订阅。Listener启动后,也会通过RPC在 ROS Master 中注册自身信息,包含需要订阅消息的话题名。话题通信是ROS中使用频率最高的一种通信模式,话题通信是基于发布订阅模式的,也即:一个节点发布消息,另一个节点订阅该消息。
2025-07-02 18:09:40
371
原创 ros0基础-day2
在 ROS (Robot Operating System) 中,launch 文件(扩展名为 .launch)是一种 XML 格式的配置文件,用于批量启动多个 ROS 节点,并设置节点的参数、命名空间、重映射(remap)等。一个程序中可能需要启动多个节点,比如:ROS 内置的小乌龟案例,如果要控制乌龟运动,要启动多个窗口,分别启动 roscore、乌龟界面节点、键盘控制节点。roscore === 是 ROS 的系统先决条件节点和程序的集合, 必须运行 roscore 才能使 ROS 节点进行通信。
2025-07-01 19:25:29
810
原创 ros0基础-day1
然后,再安装所需类型的 ROS:ROS 多个类型:Desktop-Full、Desktop、ROS-Base。(是 ROS(Robot Operating System)开发环境中的一个关键命令,用于配置当前终端会话的环境变量和路径,使其能够识别和运行 ROS 相关的包、节点和工具。catkin_make 是 ROS(Robot Operating System)中用于构建(编译)工作空间的命令行工具,主要用于 ROS 1(如 Noetic) 的包管理。3、ROS快速体验,实现helloworld。
2025-06-30 19:52:08
556
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅