
ROS
文章平均质量分 70
记录ROS学习过程,以便查看
小明在考研
这个作者很懒,什么都没留下…
展开
-
ROS第四十四节——路径规划
该文件是move_base 在全局路径规划与本地路径规划时调用的通用参数,包括:机器人的尺寸、距离障碍物的安全距离、传感器信息等。(为了省事,我把Gazebo仿真环境的launch文件也集成在这里了,没有按照教程说的单独启动,目前没有出现问题)基本的局部规划器参数配置,这个配置文件设定了机器人的最大和最小速度限制值,也设定了加速度的阈值。运行集大成的launch文件,在rviz里面添加需要的组件,保存rviz文件到工程文件夹里面。要注意的是在设置路径规划的组件的时候,全局路径规划的组件要选择。原创 2023-04-26 13:27:12 · 2702 阅读 · 0 评论 -
ROS第四十三节——定位
在启动的 rviz 中,添加RobotModel、Map组件,分别显示机器人模型与地图,添加 posearray 插件,设置topic为particlecloud来显示 amcl 预估的当前机器人的位姿,箭头越是密集,说明当前机器人处于此位置的概率越高;上一步中集成地图服务、amcl 与 rviz 的 launch 文件;通过键盘控制机器人运动,会发现 posearray 也随之而改变。3.3启动test_amcl.launch。3.1先启动 Gazebo 仿真环境。3.4添加组件,显示效果。原创 2023-04-26 13:26:55 · 859 阅读 · 0 评论 -
ROS学习第四十二节——地图服务
map_server功能包中提供了两个节点: map_saver 和 map_server,前者用于将栅格地图保存到磁盘,后者读取磁盘的栅格地图并以服务的方式提供出去。sudo apt install ros--map-server。原创 2023-04-25 09:22:25 · 4222 阅读 · 1 评论 -
ROS学习第四十一节——SLAM建图
该移动机器人可以发布里程计消息机器人需要发布雷达消息(该消息可以通过水平固定安装的雷达发布,或者也可以将深度相机消息转换成雷达消息)关于里程计与雷达数据,仿真环境中可以正常获取的,不再赘述,栅格地图如案例所示。原创 2023-04-25 09:21:51 · 3044 阅读 · 0 评论 -
戴尔G3 Ubuntu18.04双系统安装
ROS学习需要使用Linux系统,首先就是Ubuntu,我选择的是18.04.6这个版本,因为后面我要使用以Jetson Nano为主控的Jetbot进行ROS编程,Jetbot所带的出厂镜像就是18.04,为了方便程序移植,以及减少不必要的麻烦。选择使用双系统而不是虚拟机或者直接在Jetson Nano上进行学习,是因为这三种方式我都尝试过了,最终发现双系统是学习ROS最优雅的方案。视频中UP 主使用的ROG的电脑,中途有些步骤跟我的不太一样,以下是解决方案。我是参考的以下博客以及B站的视频进行安装。原创 2023-04-18 07:50:55 · 1037 阅读 · 0 评论 -
ROS学习第一节——ROS下载
我自己安装的时候省略了第一部的手动更换镜像源,我是在鱼香ROS安装过程中选择更换的。ROS安装这一步我已经安装了无数次了,以下链接是最方便高效的安装方式。安装好了以后又安装了VScode,方便后期编程。原创 2023-04-18 07:54:30 · 1228 阅读 · 0 评论 -
ROS学习第二节——HelloWorld
上述命令,会在工作空间下生成一个功能包,该功能包依赖于 roscpp、rospy 与 std_msgs,其中roscpp是使用C++实现的库,而rospy则是使用python实现的库,std_msgs是标准消息库,创建ROS功能包时,一般都会依赖这三个库实现。进入该路径下创建helloworld.cpp文档,这个就是我们编写程序的文件。在终端输入以下命令创建demo0文件夹(工作空间),以及src子文件夹。回到该路径,编辑CMakeLists.txt文档,注意文件路径。打开该文档,输入以下代码,并保存。原创 2023-04-18 07:56:43 · 432 阅读 · 0 评论 -
ROS学习第三节——使用VScode进行开发
Ctrl+Shift+B进行编译会出现选择框,点击那个catkin_make:build旁边的设置按钮,进入tasks.json文件如图。建议直接安装最新版,使用的是双系统不用考虑兼容性问题,很兼容,而且好用。在工作空间下打开终端输入 code . 打开VScode。2.VScode实现C++的HelloWorld。现在就可以用VScode开心的编程了!Ctrl+Shift+B编译文件。在右下角新增两个终端,用于运行程序。第一个终端里面启动roscore。第二个终端里面运行执行命令。1.VScode安装。原创 2023-04-18 07:58:57 · 448 阅读 · 0 评论 -
ROS学习第四节——launch文件
一个程序中可能需要启动多个节点,比如:ROS 内置的小乌龟案例,如果要控制乌龟运动,要启动多个窗口,分别启动 roscore、乌龟界面节点、键盘控制节点。如果每次都调用 rosrun 逐一启动,显然效率低下,如何优化?官方给出的优化策略是使用 launch 文件,可以一次性启动多个 ROS 节点。选定 launch 文件夹右击 ---> 添加 launch 文件。同样是两个终端,一个开roscore,另外一个输入以下。选定功能包右击 ---> 添加 launch 文件夹。编辑 launch 文件内容。原创 2023-04-18 07:59:26 · 450 阅读 · 0 评论 -
ROS学习第五节——话题通信之发布
首先补充一个命令ROS计算图。原创 2023-04-18 08:00:02 · 1188 阅读 · 0 评论 -
ROS学习第六节——话题通信之订阅
修改CMakeLists.txt配置文件。在通信功能包下面新建订阅文件。另起一个终端,开启订阅程序。在上一节工程文件基础上继续。另起一个终端,开启发布程序。原创 2023-04-18 08:00:25 · 229 阅读 · 0 评论 -
ROS学习第七节——话题通信Python实现
使用之前C++写的订阅节点订阅消息并打印出来。根据以上步骤创建文件夹并编写代码。同发布端步骤,运行程序。新建文件夹和文件如图。原创 2023-04-18 08:00:41 · 481 阅读 · 1 评论 -
ROS学习第八节——话题通信自定义msg
在 ROS 通信协议中,数据载体是一个较为重要组成部分,ROS 中通过 std_msgs 封装了一些原生的数据类型,比如:String、Int32、Int64、Char、Bool、Empty.... 但是,这些数据一般只包含一个 data 字段,结构的单一意味着功能上的局限性,当传输一些复杂的数据,比如: 激光雷达的信息... std_msgs 由于描述性较差而显得力不从心,这种场景下可以使用自定义的消息类型msgs只是简单的文本文件,每行具有字段类型和字段名称,可以使用的字段类型有:int8, int16原创 2023-04-18 08:01:16 · 1659 阅读 · 0 评论 -
ROS学习第九节——服务通信
ROS master(管理者)Server(服务端)Client(客户端)ROS Master 负责保管 Server 和 Client 注册的信息,并匹配话题相同的 Server 与 Client ,帮助 Server 与 Client 建立连接,连接建立后,Client 发送请求信息,Server 返回响应信息。整个流程由以下步骤实现:0.Server注册Server 启动后,会通过RPC在 ROS Master 中注册自身信息,其中包含提供的服务的名称。原创 2023-04-18 08:01:40 · 916 阅读 · 0 评论 -
ROS学习第十节——参数服务器
ROS Master (管理者)Talker (参数设置者)Listener (参数调用者)ROS Master 作为一个公共容器保存参数,Talker 可以向容器中设置参数,Listener 可以获取参数。整个流程由以下步骤实现:1.Talker 设置参数Talker 通过 RPC 向参数服务器发送参数(包括参数名与参数值),ROS Master 将参数保存到参数列表中。2.Listener 获取参数。原创 2023-04-19 07:40:46 · 1388 阅读 · 0 评论 -
ROS学习第十一节——常用命令
机器人系统中启动的节点少则几个,多则十几个、几十个,不同的节点名称各异,通信时使用话题、服务、消息、参数等等都各不相同,一个显而易见的问题是: 当需要自定义节点和其他某个已经存在的节点通信时,如何获取对方的话题、以及消息载体的格式呢?rosnode : 操作节点rostopic : 操作话题rosservice : 操作服务rosmsg : 操作msg消息rossrv : 操作srv消息rosparam : 操作参数。原创 2023-04-19 07:41:32 · 1792 阅读 · 0 评论 -
ROS学习第十二节——话题通信控制小乌龟
因为这里要调用turtlesim功能包里面定义的消息类型,所以需要添加该功能包作为依赖。使用最开始helloworld功能包里的launch文件。创建编程文件并添加可执行权限,编辑配置文件。打开计算图查看具体是那个话题在起作用。这个其实可以通过终端实现,输入以下代码。从上图可以看到两个节点之间的话题是。创建编程文件,编写代码,编辑配置文件。打印出来乌龟键盘控制节点的话题。这里要实现一个小乌龟转圈圈的功能。添加可执行权限,运行查看效果。创建编程文件,修改配置文件。使用以下命令获取话题信息。原创 2023-04-19 07:41:55 · 3437 阅读 · 3 评论 -
ROS学习第十三节——服务通信控制小乌龟
新建编程文件,编辑配置文件,添加可执行权限。创建编程文件,编写代码,编辑配置文件。使用命令实现访问服务端创建小乌龟。获取服务话题以及服务的消息类型。产看该消息的具体信息。原创 2023-04-19 07:42:31 · 754 阅读 · 4 评论 -
ROS学习第十四节——参数服务器控制小乌龟
修改相关参数后,重启 turtlesim_node 节点,背景色就会发生改变了。单独使用命令启动小乌龟节点,不是用lanuch文件,不启动键盘控制节点。新建编程文件,编辑配置文件,添加可执行权限。创建编程文件,编写代码,编辑配置文件。使用命令打印参数服务器参数列表。原创 2023-04-19 07:43:00 · 1325 阅读 · 0 评论 -
ROS学习第十五节——常用API(C++)
由于时间问题,从这一节开始只记录C++实现效果,加油以下附上这一节调试用的程序。原创 2023-04-20 15:43:38 · 477 阅读 · 3 评论 -
ROS学习第十六节—— 头文件与源文件
新建功能包在该路径下创建头文件编写以下代码public:void run();#endif在 VScode 中,为了后续包含头文件时不抛出异常,请配置 .vscode 下 c_cpp_properties.json 的 includepath属性"/home/用户/工作空间/src/功能包/include/**"ROS_INFO("自定义头文件的使用....");return 0;include最后,编译并执行,控制台可以输出自定义的文本信息。1.头文件class My {原创 2023-04-20 16:42:20 · 390 阅读 · 0 评论 -
ROS学习第十七节——元功能包
完成ROS中一个系统性的功能,可能涉及到多个功能包,比如实现了机器人导航模块,该模块下有地图、定位、路径规划...等不同的子级功能包。那么调用者安装该模块时,需要逐一的安装每一个功能包吗?显而易见的,逐一安装功能包的效率低下,在ROS中,提供了一种方式可以将不同的功能包打包成一个功能包,当安装某个功能模块时,直接调用打包后的功能包即可,该包又称之为元功能包(metapackage)。原创 2023-04-20 17:28:46 · 192 阅读 · 0 评论 -
ROS学习第十八节——launch文件(详细介绍)
关于 launch 文件的使用已经不陌生了,之前就曾经介绍到:一个程序中可能需要启动多个节点,比如:ROS 内置的小乌龟案例,如果要控制乌龟运动,要启动多个窗口,分别启动 roscore、乌龟界面节点、键盘控制节点。如果每次都调用 rosrun 逐一启动,显然效率低下,如何优化?采用的优化策略便是使用roslaunch 命令集合 launch 文件启动管理节点,并且在后续教程中,也多次使用到了 launch 文件。概念。原创 2023-04-20 20:25:51 · 1302 阅读 · 0 评论 -
ROS学习第十九节——TF静态坐标变换
现有一机器人模型,核心构成包含主体与雷达,各对应一坐标系,坐标系的原点分别位于主体与雷达的物理中心,已知雷达原点相对于主体原点位移关系如下: x 0.2 y0.0 z0.5。当前雷达检测到一障碍物,在雷达坐标系中障碍物的坐标为 (2.0 3.0 5.0),请问,该障碍物相对于主体的坐标是多少?前者用于传输坐标系相关位置信息,后者用于传输某个坐标系内坐标点的信息。在坐标变换中,频繁的需要使用到坐标系的相对关系以及坐标点信息。所谓静态坐标变换,是指两个坐标系之间的相对位置是固定的。原创 2023-04-21 18:43:17 · 1314 阅读 · 0 评论 -
ROS学习第二十节——TF动态坐标变换
所谓动态坐标变换,是指两个坐标系之间的相对位置是变化的。需求描述:启动 turtlesim_node,该节点中窗体有一个世界坐标系(左下角为坐标系原点),乌龟是另一个坐标系,键盘控制乌龟运动,将两个坐标系的相对位置动态发布。实现分析:乌龟本身不但可以看作坐标系,也是世界坐标系中的一个坐标点订阅 turtle1/pose,可以获取乌龟在世界坐标系的 x坐标、y坐标、偏移量以及线速度和角速度将 pose 信息转换成 坐标系相对信息并发布。原创 2023-04-21 20:58:26 · 377 阅读 · 0 评论 -
ROS学习第二十一节——多坐标变换
现有坐标系统,父级坐标系统 world,下有两子级系统 son1,son2,son1 相对于 world,以及 son2 相对于 world 的关系是已知的,求 son1原点在 son2中的坐标,又已知在 son1中一点的坐标,要求求出该点在 son2 中的坐标首先,需要发布 son1 相对于 world,以及 son2 相对于 world 的坐标消息然后,需要订阅坐标发布消息,并取出订阅的消息,借助于 tf2 实现 son1 和 son2 的转换最后,还要实现坐标点的转换新建功能包,添加依赖。原创 2023-04-22 10:28:47 · 284 阅读 · 0 评论 -
ROS学习第二十二节——坐标系关系查看
在机器人系统中,涉及的坐标系有多个,为了方便查看,ros 提供了专门的工具,可以用于生成显示坐标系关系的 pdf 文件,该文件包含树形结构的坐标系图谱。原创 2023-04-22 10:28:51 · 463 阅读 · 0 评论 -
ROS学习第二十三节——TF坐标变换实操
程序启动之初: 产生两只乌龟,中间的乌龟(A) 和 左下乌龟(B), B 会自动运行至A的位置,并且键盘控制时,只是控制 A 的运动,但是 B 可以跟随 A 运行。乌龟跟随实现的核心,是乌龟A和B都要发布相对世界坐标系的坐标信息,然后,订阅到该信息需要转换获取A相对于B坐标系的信息,最后,再生成速度信息,并控制B运动。键盘是无法控制第二只乌龟运动的,因为使用的话题: /第二只乌龟名称/cmd_vel,对应的要控制乌龟运动必须发布对应的话题消息。编写订阅方,订阅两只乌龟信息,生成速度信息并发布。原创 2023-04-22 10:29:12 · 1296 阅读 · 0 评论 -
ROS学习第二十四节——rosbag
命令实现不够灵活,可以使用编码的方式,增强录制与回放的灵活性,本节将通过简单的读写实现演示rosbag的编码实现。ROS 内置的乌龟案例并操作,操作过程中使用 rosbag 录制,录制结束后,实现重放。操作小乌龟一段时间,结束录制使用 ctrl + c,在创建的目录中会生成bag文件。在test.bag文件所在文件夹打开终端,执行以下命令就可以查看详细信息。通过以下两种方式读取,一种是文档里面写的,另一种是上课讲的。重启乌龟节点,会发现,乌龟按照录制时的轨迹运动。创建目录保存录制的文件。原创 2023-04-22 10:29:34 · 1668 阅读 · 0 评论 -
ROS学习第二十五节——rqt工具箱
rqt_console 是 ROS 中用于显示和过滤日志的图形化插件。原创 2023-04-22 11:12:36 · 454 阅读 · 0 评论 -
ROS学习第二十七节——URDF集成Rviz基本流程
前面介绍过,URDF 不能单独使用,需要结合 Rviz 或 Gazebo,URDF 只是一个文件,需要在 Rviz 或 Gazebo 中渲染成图形化的机器人模型,当前,首先演示URDF与Rviz的集成使用,因为URDF与Rviz的集成较之于URDF与Gazebo的集成更为简单,后期,基于Rviz的集成实现,我们再进一步介绍URDF语法。在 Rviz 中显示一个盒状机器人准备:新建功能包,导入依赖核心:编写 urdf 文件核心:在 launch 文件集成 URDF 与 Rviz。原创 2023-04-22 23:15:12 · 2883 阅读 · 0 评论 -
ROS学习第二十六节——机器人仿真相关组件
例如:可以显示机器人模型,可以无需编程就能表达激光测距仪(LRF)传感器中的传感 器到障碍物的距离,RealSense、Kinect或Xtion等三维距离传感器的点云数据(PCD, Point Cloud Data),从相机获取的图像值等。,可以以一种 XML 的方式描述机器人的部分结构,比如底盘、摄像头、激光雷达、机械臂以及不同关节的自由度.....,该文件可以被 C++ 内置的解释器转换成可视化的机器人模型,是 ROS 中实现机器人仿真的重要组件。打开主目录,打开终端,输入以下命令。原创 2023-04-22 23:15:12 · 618 阅读 · 0 评论 -
ROS学习第二十八节——URDF之robot link
robot 根标签,类似于 launch文件中的launch标签link 连杆标签joint 关节标签gazebo 集成gazebo需要使用的标签关于gazebo标签,后期在使用 gazebo 仿真时,才需要使用到,用于配置仿真环境所需参数,比如: 机器人材料属性、gazebo插件等,但是该标签不是机器人模型必须的,只有在仿真时才需设置。原创 2023-04-22 23:15:45 · 1122 阅读 · 0 评论 -
ROS学习第二十九节——URDF之joint
urdf 中的 joint 标签用于描述机器人关节的运动学和动力学属性,还可以指定关节运动的安全极限,机器人的两个部件(分别称之为 parent link 与 child link)以"关节"的形式相连接,不同的关节有不同的运动形式: 旋转、滑动、固定、旋转速度、旋转角度限制....,比如:安装在底座上的轮子可以360度旋转,而摄像头则可能是完全固定在底座上。joint标签对应的数据在模型中是不可见的。原创 2023-04-22 23:16:00 · 1798 阅读 · 2 评论 -
ROS学习第三十节——URDF练习
创建一个四轮圆柱状机器人模型,机器人参数如下,底盘为圆柱状,半径 10cm,高 8cm,四轮由两个驱动轮和两个万向支撑轮组成,两个驱动轮半径为 3.25cm,轮胎宽度1.5cm,两个万向轮为球状,半径 0.75cm,底盘离地间距为 1.5cm(与万向轮直径一致)原创 2023-04-23 20:42:07 · 356 阅读 · 0 评论 -
ROS学习第三十一节——xacro
使用xacro优化上一节案例中驱动轮实现,需要使用变量封装底盘的半径、高度,使用数学公式动态计算底盘的关节点坐标,使用 Xacro 宏封装轮子重复的代码并调用宏创建两个轮子(注意: 在此,演示 Xacro 的基本使用,不必要生成合法的 URDF )。编写 Xacro 文件,以变量的方式封装属性(常量半径、高度、车轮半径...),以函数的方式封装重复实现(车轮的添加)。会将 xacro 文件解析为 urdf 文件。原创 2023-04-23 20:42:42 · 344 阅读 · 0 评论 -
ROS学习第三十二节——xacro构建激光雷达小车
在前面小车底盘基础之上,添加摄像头和雷达传感器。原创 2023-04-23 20:49:48 · 1625 阅读 · 3 评论 -
ROS学习第三十三节——Arbotix使用
通过 URDF 结合 rviz 可以创建并显示机器人模型,不过,当前实现的只是静态模型,如何控制模型的运动呢?在此,可以调用 Arbotix 实现此功能。Arbotix 是一款控制电机、舵机的控制板,并提供相应的 ros 功能包,这个功能包的功能不仅可以驱动真实的 Arbotix 控制板,它还提供一个差速控制器,通过接受速度控制指令更新机器人的 joint 状态,从而帮助我们实现机器人在 rviz 中的运动。原创 2023-04-23 20:49:59 · 1511 阅读 · 0 评论 -
ROS学习第三十四节——URDF与Gazebo基本集成流程
较之于 rviz,gazebo在集成 URDF 时,需要做些许修改,比如:必须添加 collision 碰撞属性相关参数、必须添加 inertial 惯性矩阵相关参数,另外,如果直接移植 Rviz 中机器人的颜色设置是没有显示的,颜色设置也必须做相应的变更。需要注意的是,原则上,除了 base_footprint 外,机器人的每个刚体部分都需要设置惯性矩阵,且惯性矩阵必须经计算得出,如果随意定义刚体部分的惯性矩阵,那么可能会导致机器人在 Gazebo 中出现抖动,移动等现象。原创 2023-04-23 20:50:13 · 780 阅读 · 0 评论 -
ROS学习第三十五节——URDF集成Gazebo实操
注意: 如果机器人模型在 Gazebo 中产生了抖动,滑动,缓慢位移 .... 诸如此类情况,请查看。车轮翻转需要依赖于 PI 值,如果 PI 值精度偏低,也可能导致上述情况产生。惯性矩阵是否设置了,且设置是否正确合理。原创 2023-04-24 07:31:15 · 615 阅读 · 0 评论