- 博客(162)
- 收藏
- 关注
原创 百度Apollo智能驾驶之CyberRT__自定义cyber_param命令行工具
自定义 cyber_param 命令工具前言最近在使用 Apollo 的实时通信框架 CyberRT,难免的使用中会与ROS作比较,就个人感受而言,CyberRT更简洁高效,尤其是当从CyberRT切换回ROS时更是能够感觉到ROS设计的臃肿且冗余,不过简洁的的代价之一就是功能上的弱化,比如:命令行工具无论在CyberRT还是ROS中都是极其常用的,使用命令工具可以大大提高我们的开发调试效率,不过使用过程中发现较之于ROS,在CyberRT中竟然没有提供参数服务相关的命令。咋办?自己写一个呗!闲话少说,
2022-05-02 12:33:54
2239
3
原创 10.5 本章小结
10.5 本章小结《ROS入门-理论与实践》视频教程镇楼本章介绍了ROS中的一些进阶内容,主要内容如下:Action 通信;动态参数;pluginlib;nodelet。上述内容其实都是对之前通信机制缺陷的进一步优化:action较之于以往的服务通信是带有连续反馈的,更适用于耗时的请求响应场景;动态参数较之于参数服务器实现,则可以保证参数读取的实时性;最后,nodelet可以动态加载多个节点到同一进程,不再是一个节点独占一个进程,从而可以零成本的实现不同节点之间的数据交互,降低了数据传
2021-06-07 21:34:13
717
1
原创 10.4.2 nodelet实现
ROS入门 10.4.2 nodelet实现《ROS入门-理论与实践》视频教程镇楼nodelet本质也是插件,实现流程与插件实现流程类似,并且更为简单,不需要自定义接口,也不需要使用类加载器加载插件类。需求:参考 nodelet 案例,编写 nodelet 插件类,可以订阅输入数据,设置参数,发布订阅数据与参数相加的结果。流程:准备;创建插件类并注册插件;构建插件库;使插件可用于ROS工具链;执行。1.准备新建功能包,导入依赖: roscpp、nodelet;2.创建插件类
2021-06-06 23:17:39
558
原创 10.4.1 使用演示
ROS入门 10.4.1 使用演示《ROS入门-理论与实践》视频教程镇楼在ROS中内置了nodelet案例,我们先以该案例演示nodelet的基本使用语法,基本流程如下:案例简介;nodelet基本使用语法;内置案例调用。1.案例简介以“ros- [ROS_DISTRO] -desktop-full”命令安装ROS时,nodelet默认被安装,如未安装,请调用如下命令自行安装:sudo apt install ros-<<ROS_DISTRO>>-nodel
2021-06-05 23:42:20
326
原创 10.4 nodelet
ROS入门 10.4 nodelet《ROS入门-理论与实践》视频教程镇楼ROS通信是基于Node(节点)的,Node使用方便、易于扩展,可以满足ROS中大多数应用场景,但是也存在一些局限性,由于一个Node启动之后独占一根进程,不同Node之间数据交互其实是不同进程之间的数据交互,当传输类似于图片、点云的大容量数据时,会出现延时与阻塞的情况,比如:现在需要编写一个相机驱动,在该驱动中有两个节点实现:其中节点A负责发布原始图像数据,节点B订阅原始图像数据并在图像上标注人脸。如果节点A与节点B仍
2021-06-04 23:03:10
342
原创 10.3.1 pluginlib使用
ROS入门 10.3.1 pluginlib使用《ROS入门-理论与实践》视频教程镇楼需求:以插件的方式实现正多边形的相关计算。实现流程:准备;创建基类;创建插件类;注册插件;构建插件库;使插件可用于ROS工具链;配置xml导出插件使用插件;执行。1.准备创建功能包xxx导入依赖: roscpp pluginlib。在 VSCode中需要配置 .vascode/c_cpp_properties.json文件中关于 includepath 选项的设置。{
2021-06-03 23:08:32
423
原创 10.3 pluginlib
ROS入门 10.3 pluginlib《ROS入门-理论与实践》视频教程镇楼pluginlib直译是插件库,所谓插件字面意思就是可插拔的组件,比如:以计算机为例,可以通过USB接口自由插拔的键盘、鼠标、U盘…都可以看作是插件实现,其基本原理就是通过规范化的USB接口协议实现计算机与USB设备的自由组合。同理,在软件编程中,插件是一种遵循一定规范的应用程序接口编写出来的程序,插件程序依赖于某个应用程序,且应用程序可以与不同的插件程序自由组合。在ROS中,也会经常使用到插件,场景如下:1.导航插
2021-06-02 23:55:28
307
原创 10.2.3 动态参数服务端B(Python)
ROS入门 10.2.3 动态参数服务端B(Python)《ROS入门-理论与实践》视频教程镇楼需求:编写两个节点,一个节点可以动态修改参数,另一个节点时时解析修改后的数据。服务端实现流程:新建并编辑 Python 文件;编辑CMakeLists.txt;编译并执行。0.vscode配置需要像之前自定义 msg 实现一样配置settings.json 文件,如果以前已经配置且没有变更工作空间,可以忽略,如果需要
2021-04-25 23:35:17
184
原创 10.2.2 动态参数服务端A(C++)
ROS入门 10.2.2 动态参数服务端A(C++)《ROS入门-理论与实践》视频教程镇楼需求:编写两个节点,一个节点可以动态修改参数,另一个节点时时解析修改后的数据。服务端实现流程:新建并编辑 c++ 文件;编辑CMakeLists.txt;编译并执行。0.vscode配置需要像之前自定义 msg 实现一样配置settings.json 文件,如果以前已经配置且没有变更工作空间,可以忽略,如果需要配置,配置方式与之前相同:{ "configurations":
2021-04-24 22:34:11
217
原创 10.2.1 动态参数客户端
ROS入门 10.2.1 动态参数客户端《ROS入门-理论与实践》视频教程镇楼需求:编写两个节点,一个节点可以动态修改参数,另一个节点时时解析修改后的数据。客户端实现流程:新建并编辑 .cfg 文件;编辑CMakeLists.txt;编译。1.新建功能包新建功能包,添加依赖:roscpp rospy std_msgs dynamic_reconfigure。2.添加.cfg文件新建 cfg 文件夹,添加 xxx.cfg 文件(并添加可执行权限),cfg 文件其实就是一个
2021-04-22 22:21:20
149
原创 rosdep
rosdep 初始化时异常解决方案rosdep 初始化时异常解决-视频教程安装构建依赖在 noetic 最初发布时,和其他历史版本稍有差异的是:没有安装构建依赖这一步骤。随着 noetic 不断完善,官方补齐了这一操作。首先安装构建依赖的相关工具sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essentialROS中使用许多工具前,要求
2021-04-21 23:12:38
3591
原创 10.2动态参数
ROS入门 10.2动态参数《ROS入门-理论与实践》视频教程镇楼参数服务器的数据被修改时,如果节点不重新访问,那么就不能获取修改后的数据,例如在乌龟背景色修改的案例中,先启动乌龟显示节点,然后再修改参数服务器中关于背景色设置的参数,那么窗体的背景色是不会修改的,必须要重启乌龟显示节点才能生效。而一些特殊场景下,是要求要能做到动态获取的,也即,参数一旦修改,能够通知节点参数已经修改并读取修改后的数据,比如:机器人调试时,需要修改机器人轮廓信息(长宽高)、传感器位姿信息…,如果这些信息存储在参数
2021-04-21 22:05:05
135
原创 10.1.3 action通信自定义action文件调用(Python)
ROS入门 10.1.3 action通信自定义action文件调用(Python)《ROS入门-理论与实践》视频教程镇楼需求:创建两个ROS 节点,服务器和客户端,客户端可以向服务器发送目标数据N(一个整型数据)服务器会计算 1 到 N 之间所有整数的和,这是一个循环累加的过程,返回给客户端,这是基于请求响应模式的,又已知服务器从接收到请求到产生响应是一个耗时操作,每累加一次耗时0.1s,为了良好的用户体验,需要服务器在计算过程中,每累加一次,就给客户端响应一次百分比格式的执行进度,使用 a
2021-04-20 21:22:13
551
原创 10.1.2 action通信自定义action文件调用A(C++)
ROS入门 10.1.2 action通信自定义action文件调用A(C++)《ROS入门-理论与实践》视频教程镇楼需求:创建两个ROS 节点,服务器和客户端,客户端可以向服务器发送目标数据N(一个整型数据)服务器会计算 1 到 N 之间所有整数的和,这是一个循环累加的过程,返回给客户端,这是基于请求响应模式的,又已知服务器从接收到请求到产生响应是一个耗时操作,每累加一次耗时0.1s,为了良好的用户体验,需要服务器在计算过程中,每累加一次,就给客户端响应一次百分比格式的执行进度,使用 act
2021-04-19 23:28:05
409
原创 10.1.1action通信自定义action文件
ROS入门 10.1.1action通信自定义action文件《ROS入门-理论与实践》视频教程镇楼action、srv、msg 文件内的可用数据类型一致,且三者实现流程类似:按照固定格式创建action文件;编辑配置文件;编译生成中间文件。1.定义action文件首先新建功能包,并导入依赖: roscpp rospy std_msgs actionlib actionlib_msgs;然后功能包下新建 action 目录,新增 Xxx.action(比如:AddInts.acti
2021-04-19 23:26:31
365
原创 10.1 action通信
ROS入门 10.1 action通信《ROS入门-理论与实践》视频教程镇楼关于action通信,我们先从之前导航中的应用场景开始介绍,描述如下:机器人导航到某个目标点,此过程需要一个节点A发布目标信息,然后一个节点B接收到请求并控制移动,最终响应目标达成状态信息。乍一看,这好像是服务通信实现,因为需求中要A发送目标,B执行并返回结果,这是一个典型的基于请求响应的应答模式,不过,如果只是使用基本的服务通信实现,存在一个问题:**导航是一个过程,是耗时操作,如果使用服务通信,那么只有在导航结
2021-04-18 23:25:58
300
原创 第 10 章 ROS进阶
ROS入门 第 10 章 ROS进阶《ROS入门-理论与实践》视频教程镇楼在本教程的第二章内容介绍了ROS的核心实现:通信机制 ——话题通信、服务通信和参数服务器。三者结合可以满足ROS中的大多数数据传输相关的应用场景,但是在一些特定场景下可能就有些力不从心了,本章主要介绍之前的通信机制存在的问题以及对应的优化策略,本章主要内容如下:action通信;动态参数;pluginlib;nodelet。本章预期达成的学习目标:了解服务通信应用的局限性(action的应用场景),熟练掌握
2021-04-18 23:24:15
511
原创 7.4 本章小结
ROS入门 7.4 本章小结《ROS入门-理论与实践》视频教程镇楼本章介绍了在仿真环境下的机器人导航实现,主要内容如下:导航概念以及架构设计SLAM概念以及gmapping实现地图的序列化与反序列化定位实现路径规划实现导航中涉及的消息解释导航整体设计架构中,包含地图、定位、路径规划、感知以及控制等实现,感知与控制模块在上一章机器人系统仿真中已经实现了,因此没有做过多介绍,其他部分,当前也是基于仿真环境实现的,后续,我们将搭建一台实体机器人并实现导航功能。...
2021-04-17 23:57:36
217
原创 7.3.8 深度图像转激光数据
ROS入门 7.3.8 深度图像转激光数据《ROS入门-理论与实践》视频教程镇楼本节介绍ROS中的一个功能包:depthimage_to_laserscan,顾名思义,该功能包可以将深度图像信息转换成激光雷达信息,应用场景如下:在诸多SLAM算法中,一般都需要订阅激光雷达数据用于构建地图,因为激光雷达可以感知周围环境的深度信息,而深度相机也具备感知深度信息的功能,且最初激光雷达价格比价比较昂贵,那么在传感器选型上可以选用深度相机代替激光雷达吗?答案是可以的,不过二者发布的消息类型是完全不同
2021-04-15 23:39:26
2734
6
原创 7.3.7 导航之相机
ROS入门 7.3.7 导航之相机《ROS入门-理论与实践》视频教程镇楼深度相机相关消息有:sensor_msgs/Image、sensor_msgs/CompressedImage、sensor_msgs/PointCloud2sensor_msgs/Image 对应的一般的图像数据,sensor_msgs/CompressedImage 对应压缩后的图像数据,sensor_msgs/PointCloud2 对应的是点云数据(带有深度信息的图像数据)。调用rosmsg info sensor
2021-04-15 23:37:25
426
原创 7.3.6 导航之激光雷达
ROS入门 7.3.6 导航之激光雷达《ROS入门-理论与实践》视频教程镇楼激光雷达相关消息是:sensor_msgs/LaserScan,调用rosmsg info sensor_msgs/LaserScan显示消息内容如下:std_msgs/Header header uint32 seq time stamp string frame_idfloat32 angle_min #起始扫描角度(rad)float32 angle_max #终止扫描角度(rad)float32
2021-04-15 23:36:24
379
1
原创 7.3.5 导航之目标点与路径规划
ROS入门 7.3.5 导航之目标点与路径规划《ROS入门-理论与实践》视频教程镇楼目标点相关消息是:move_base_msgs/MoveBaseActionGoal,调用rosmsg info move_base_msgs/MoveBaseActionGoal显示消息内容如下:std_msgs/Header header uint32 seq time stamp string frame_idactionlib_msgs/GoalID goal_id time stamp
2021-04-14 23:34:03
626
原创 7.3.4 导航之定位
ROS入门 7.3.4 导航之定位《ROS入门-理论与实践》视频教程镇楼定位相关消息是:geometry_msgs/PoseArray,调用rosmsg info geometry_msgs/PoseArray显示消息内容如下:std_msgs/Header header uint32 seq time stamp string frame_idgeometry_msgs/Pose[] poses #预估的点位姿组成的数组 geometry_msgs/Point positio
2021-04-14 23:32:41
472
原创 7.3.3 导航之坐标变换
ROS入门 7.3.3 导航之坐标变换《ROS入门-理论与实践》视频教程镇楼坐标变换相关消息是: tf/tfMessage,调用rosmsg info tf/tfMessage 显示消息内容如下:geometry_msgs/TransformStamped[] transforms #包含了多个坐标系相对关系数据的数组 std_msgs/Header header uint32 seq time stamp string frame_id string child
2021-04-14 23:31:58
204
原创 7.3.2 导航之里程计
ROS入门 7.3.2 导航之里程计《ROS入门-理论与实践》视频教程镇楼里程计相关消息是:nav_msgs/Odometry,调用rosmsg info nav_msgs/Odometry 显示消息内容如下:std_msgs/Header header uint32 seq time stamp string frame_idstring child_frame_idgeometry_msgs/PoseWithCovariance pose geometry_msgs/Pos
2021-04-13 21:49:57
422
原创 7.3.1 导航之地图
ROS入门 7.3.1 导航之地图《ROS入门-理论与实践》视频教程镇楼地图相关的消息主要有两个:nav_msgs/MapMetaData地图元数据,包括地图的宽度、高度、分辨率等。nav_msgs/OccupancyGrid地图栅格数据,一般会在rviz中以图形化的方式显示。1.nav_msgs/MapMetaData调用rosmsg info nav_msgs/MapMetaData显示消息内容如下:time map_load_timefloat32 resolutio
2021-04-13 21:48:59
288
原创 7.3 导航相关消息
ROS入门 7.3 导航相关消息《ROS入门-理论与实践》视频教程镇楼在导航功能包集中包含了诸多节点,毋庸置疑的,不同节点之间的通信使用到了消息中间件(数据载体),在上一节的实现中,这些消息已经在rviz中做了可视化处理,比如:地图、雷达、摄像头、里程计、路径规划…的相关消息在rviz中提供了相关组件,本节主要介绍这些消息的具体格式。...
2021-04-13 21:47:39
145
原创 7.2.5 导航与SLAM建图
7.2.5 导航与SLAM建图添加链接描述场景:在 7.2.1 导航实现01_SLAM建图中,我们是通过键盘控制机器人移动实现建图的,而后续又介绍了机器人的自主移动实现,那么可不可以将二者结合,实现机器人自主移动的SLAM建图呢?上述需求是可行的。虽然可能会有疑问,导航时需要地图信息,之前导航实现时,是通过 map_server 包的 map_server 节点来发布地图信息的,如果不先通过SLAM建图,那么如何发布地图信息呢?SLAM建图过程中本身就会时时发布地图信息,所以无需再使用map_se
2021-04-12 21:22:28
1266
2
原创 7.2.4 导航实现04_路径规划
ROS入门 7.2.4 导航实现04_路径规划《ROS入门-理论与实践》视频教程镇楼毋庸置疑的,路径规划是导航中的核心功能之一,在ROS的导航功能包集navigation中提供了 move_base 功能包,用于实现此功能。1.move_base简介move_base 功能包提供了基于动作(action)的路径规划实现,move_base 可以根据给定的目标点,控制机器人底盘运动至目标位置,并且在运动过程中会连续反馈机器人自身的姿态与目标点的状态信息。如前所述(7.1)move_base主要由
2021-04-12 21:17:34
2103
2
原创 7.2.3 导航实现03_定位
ROS入门 7.2.3 导航实现03_定位《ROS入门-理论与实践》视频教程镇楼所谓定位就是推算机器人自身在全局地图中的位置,当然,SLAM中也包含定位算法实现,不过SLAM的定位是用于构建全局地图的,是属于导航开始之前的阶段,而当前定位是用于导航中,导航中,机器人需要按照设定的路线运动,通过定位可以判断机器人的实际轨迹是否符合预期。在ROS的导航功能包集navigation中提供了 amcl 功能包,用于实现导航中的机器人定位。1.amcl简介AMCL(adaptive Monte Carl
2021-04-12 21:15:31
573
原创 ROS安装
ROS安装与卸载《ROS入门-理论与实践》视频教程镇楼注:下载文件,备份保存,为下次安装,防范于未然文章目录ROS安装与卸载《ROS入门-理论与实践》视频教程镇楼1.1.1 安装虚拟机软件1.下载virtualbox2.安装virtualbox1.1.2 虚拟一台主机1.1.3 安装ubuntu1.ubuntu安装2.使用优化1.安装虚拟机工具2.启动文件交换模式3.安装扩展插件4.其他1.1.4 安装 ROS1.配置ubuntu的软件和更新2.设置安装源3.设置key4.安装5.配置环境变量卸载
2021-04-12 21:04:54
1551
原创 7.2.2 导航实现02_地图服务
ROS入门 7.2.2 导航实现02_地图服务《ROS入门-理论与实践》视频教程镇楼上一节我们已经实现通过gmapping的构建地图并在rviz中显示了地图,不过,上一节中地图数据是保存在内存中的,当节点关闭时,数据也会被一并释放,我们需要将栅格地图序列化到的磁盘以持久化存储,后期还要通过反序列化读取磁盘的地图数据再执行后续操作。在ROS中,地图数据的序列化与反序列化可以通过 map_server 功能包实现。1.map_server简介map_server功能包中提供了两个节点: map_s
2021-04-11 21:52:44
588
原创 7.2.1 导航实现01_SLAM建图
ROS入门 7.2.1 导航实现01_SLAM建图《ROS入门-理论与实践》视频教程镇楼SLAM算法有多种,当前我们选用gmapping,后续会再介绍其他几种常用的SLAM实现。1.gmapping简介gmapping 是ROS开源社区中较为常用且比较成熟的SLAM算法之一,gmapping可以根据移动机器人里程计数据和激光雷达数据来绘制二维的栅格地图,对应的,gmapping对硬件也有一定的要求:该移动机器人可以发布里程计消息机器人需要发布雷达消息(该消息可以通过水平固定安装的雷达发布,
2021-04-11 21:51:50
1154
原创 7.2 导航实现
ROS入门 7.2 导航实现《ROS入门-理论与实践》视频教程镇楼本节内容主要介绍导航的完整性实现,旨在掌握机器人导航的基本流程,该章涉及的主要内容如下:SLAM建图(选用较为常见的gmapping)地图服务(可以保存和重现地图)机器人定位路径规划上述流程介绍完毕,还会对功能进一步集成实现探索式的SLAM建图。准备工作请先安装相关的ROS功能包:安装 gmapping 包(用于构建地图):sudo apt install ros-<ROS版本>-gmapping
2021-04-11 21:50:08
443
原创 7.1.3导航条件说明
ROS入门 7.1.3导航条件说明《ROS入门-理论与实践》视频教程镇楼导航实现,在硬件和软件方面是由一定要求的,需要提前准备。1.硬件虽然导航功能包集被设计成尽可能的通用,在使用时仍然有三个主要的硬件限制:它是为差速驱动的轮式机器人设计的。它假设底盘受到理想的运动命令的控制并可实现预期的结果,命令的格式为:x速度分量,y速度分量,角速度(theta)分量。它需要在底盘上安装一个单线激光雷达。这个激光雷达用于构建地图和定位。导航功能包集是为正方形的机器人开发的,所以方形或圆形的机器人将是
2021-04-10 23:21:18
393
原创 7.1.2 导航之坐标系
ROS入门 7.1.2 导航之坐标系《ROS入门-理论与实践》视频教程镇楼1.简介定位是导航中的重要实现之一,所谓定位,就是参考某个坐标系(比如:以机器人的出发点为原点创建坐标系)在该坐标系中标注机器人。定位原理看似简单,但是这个这个坐标系不是客观存在的,我们也无法以上帝视角确定机器人的位姿,定位实现需要依赖于机器人自身,机器人需要逆向推导参考系原点并计算坐标系相对关系,该过程实现常用方式有两种:通过里程计定位:时时收集机器人的速度信息计算并发布机器人坐标系与父级参考系的相对关系。通过传感
2021-04-10 23:20:35
379
原创 7.1.1导航模块简介
ROS入门 7.1.1导航模块简介《ROS入门-理论与实践》视频教程镇楼机器人是如何实现导航的呢?或换言之,机器人是如何从 A 点移动到 B 点呢?ROS 官方为了提供了一张导航功能包集的图示,该图中囊括了 ROS 导航的一些关键技术:假定我们已经以特定方式配置机器人,导航功能包集将使其可以运动。上图概述了这种配置方式。白色的部分是必须且已实现的组件,灰色的部分是可选且已实现的组件,蓝色的部分是必须为每一个机器人平台创建的组件。总结下来,涉及的关键技术有如下五点:全局地图自身定位路径规
2021-04-08 20:35:12
1361
原创 7.1 概述
ROS入门 7.1 概述《ROS入门-理论与实践》视频教程镇楼1.概念在ROS中机器人导航(Navigation)由多个功能包组合实现,ROS 中又称之为导航功能包集,关于导航模块,官方介绍如下:一个二维导航堆栈,它接收来自里程计、传感器流和目标姿态的信息,并输出发送到移动底盘的安全速度命令。更通俗的讲: 导航其实就是机器人自主的从 A 点移动到 B 点的过程。2.作用秉着"不重复发明轮子"的原则,ROS 中导航相关的功能包集为机器人导航提供了一套通用的实现,开发者不再需要关注于导航算
2021-04-08 20:34:32
284
原创 6.8 本章小结
ROS入门 6.8 本章小结《ROS入门-理论与实践》视频教程镇楼本章主要介绍了ROS中仿真实现涉及的三大知识点:URDF(Xacro)RvizGazeboURDF 是用于描述机器人模型的 xml 文件,可以使用不同的标签具代表不同含义,URDF 编写机器人模型代码冗余,xacro 可以优化 URDF 实现,代码实现更为精简、高效、易读。容易混淆的是Rviz与Gazebo,在此我们着重比较以下二者的区别:rviz是三维可视化工具,强调把已有的数据可视化显示;gazebo是三维物理
2021-04-08 20:33:38
158
原创 6.7.4 kinect信息仿真以及显示
ROS入门 6.7.4 kinect信息仿真以及显示《ROS入门-理论与实践》视频教程镇楼通过 Gazebo 模拟kinect摄像头,并在 Rviz 中显示kinect摄像头数据。实现流程:kinect摄像头仿真基本流程:已经创建完毕的机器人模型,编写一个单独的 xacro 文件,为机器人模型添加kinect摄像头配置;将此文件集成进xacro文件;启动 Gazebo,使用 Rviz 显示kinect摄像头信息。1.Gazebo仿真Kinect1.1 新建 Xacro 文件,配置
2021-04-07 21:30:03
589
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人