自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(67)
  • 收藏
  • 关注

原创 ROS2笔记|CMAKELIST中ament_export_targets和ament_export_libraries到底该怎么用

在ROS2的ament构建系统中,ament_export_targets和ament_export_libraries是CMakeLists.txt中两个关键的依赖导出命令,相信大家在看一些开源项目中都会见过这两个命令,到了自己写的时候究竟该怎么用呢?今天花5分钟时间搞清楚。

2025-02-19 11:59:07 384

原创 Webots仿真添加行人的走路模型,并且添加自定义ROS接口。

最近做的导航项目仿真中需要在webots中测试动态避障效果,那么就需要在仿真环境中添加动态行人。幸运的是,webots基础库里已经提供了行人的模型和简单的控制程序,但是还需要将其与ros通信建立连接。自己也是摸索了很长时间,总算跑成功了。大体可以分为两个部分:模型的添加和控制器的改造。我的webots版本是2023B,我的ROS2版本是humble。不同版本可能细节会有所不同,不过方法应该是一样的,我把我的过程记录分享一下,希望能帮到有同样困惑的同学。

2025-02-04 15:29:20 987

原创 一文讲清楚ROS2中多线程、并发、回调组的概念和基础使用

在机器人开发中,多线程的使用司空见惯。ROS2借助executor类帮助开发者简化多线程的使用,但是还是得先把基本概念搞清楚,才能正确的使用。本文解释了ROS1和ROS2中的并发/多线程概念,并且给出了ROS2版本一些实际例子帮助理解。,更偏向于代码开发,可以阅读完本文之后再看,理解更深。

2024-12-05 19:34:29 1481

原创 Ubuntu系统使用DOCKER 和ROS2配置开发环境-24年最新保姆级教程|第二部分

这个教程分为两个部分。第一部分是在UBUNTU 20.04使用docker安装ROS2 HUMBLE的教程和一些docker的基础知识。第二部分是在VSCODE中使用docker环境进行项目开发。本文为第二部分内容。上层目录是你在 VSCode 中打开的文件夹。它包含特殊文件夹 .devcontainer 和 .vscode,VSCode 使用它们加载工作区和首选项。

2024-11-22 17:08:48 643 1

原创 Ubuntu系统使用DOCKER 和ROS2从零开始配置开发环境-24年最新保姆级教程

如果你只是运行或容器因为exit而停止,容器的状态会变为“已停止”,此时容器数据仍然保留。当机器重启后,这些“已停止”的容器仍然存在,你可以用查看,并通过再次启动它。容器会丢失的唯一情况是,你明确地删除了容器(例如运行了或使用了--rm标志启动容器)。如果容器启动时用了 --rm,容器在退出时会被自动删除。此时,无论是否重启机器,容器都无法找回。

2024-11-22 14:28:16 1427

原创 Ubuntu安装osqp-eigen最简单且一定不会出错的方法

如果按照现在大多说教程说的安装方法:先git clone osqp库的源码,然后编译安装。最后再git clone osqp-eigen库的源码,然后编译安装。这种方法大概率会出错。错误要么是找不到osqp相关的.h头文件,要么可能找不到相应的函数libOsqpEigen.so.0.8.1: undefined reference to `osqp_update_upper_bound’。出错的核心因为osqp-eigen依赖的老版本的osqp库。

2024-10-28 15:00:32 1306 1

原创 VSCode 在ROS开发时无法智能提示解决办法

在配置VSCode进行ROS开发时,可能会出现智能提示无法正常工作的情况。

2024-10-08 12:48:41 695

原创 如何设置ubuntu20.04系统开机自启(使用systemd方法)

在项目开发环境中很多功能我们希望做成开机自启的形式,比如开机自启roscore,或者开机自启某个节点。本文介绍使systemd工具实现开机自启动的功能,同时在文章最后也罗列了我在配置开机自启的时候遇到的一些坑。:systemd 是现代 Linux 发行版的默认 init 系统,它统一管理系统和服务的启动,简化了服务管理的流程。使用 systemd 可以统一配置和管理自启动服务,而不需要依赖不同的工具和脚本。:systemd 具有强大的依赖管理功能,可以定义服务之间的依赖关系。

2024-07-30 10:06:39 2216

原创 ubuntu系统两个板子(主从机)时间同步方法

有两个板子通过网口连接,一个板子可以连接外网,另一个板子不能连接外网,需要将两台机器的时间同步,以免后续ROS收发消息时时间戳不准确.

2024-07-25 09:00:20 1508

原创 保姆级教程|如何配置ROS1主从机

你可以将端口号设置为其他值,只要确保双方一致并且端口未被其他服务占用。启动ROSMaster或者网络连接测试:在每个板子上运行ping命令测试到对方板子的连接:ping 192.168.31.126 # 在 ubuntu-22 上 ping 192.168.31.125 # 在 nvidia-desktop 上ROS通信测试:使用rostopic和rosnode命令测试ROS话题和节点通信。

2024-07-03 20:16:57 1531

原创 行为树 Behavoir Tree入门教程|讲的最清晰的教程(大概)

在自主系统中,我们看到了一系列超越“简单”编程的抽象化,用于行为建模和执行。一些常见的抽象化形式包括teleo-reactive程序、Petri网、有限状态机(FSMs)和行为树(BTs)。FSMs和BTs是当今最常见的两种抽象化形式。通常,它们包括一组有限的实体,这些实体映射到系统内的特定行为或操作模式,比如“向前移动”,“关闭夹具”,“闪烁警告灯”,“前往充电站”。每个模型类都有一套规则,描述了主体应该何时执行这些行为,更重要的是主体应该如何在它们之间进行切换。

2024-06-12 10:22:09 10200

原创 ROS2 service类型消息的同步调用问题浅析

许多从ROS1转战至ROS2的同学,想必遇到的一个很头疼的事情是 ROS2的service client只有异步调用,而没有同步调用。这篇文章罗列了一些解决方法,欢迎大家补充新的方法。

2024-01-10 18:49:23 2197

原创 C++ STL容器、算法、迭代器入门

无论是在工程中还是在找工作面式笔试中,STL相关的知识点一定会出现,因为这个东西实在是太重要了。想当年自己就是因为在面试中把一个STL迭代器的知识点说错了,错失了百度Apollo的offer。这篇文章帮自己复习巩固下相关的基础知识,也希望能帮到更多人~

2023-10-24 11:21:28 297

原创 我的创作纪念日

我是一名控制工程专业出身,现在在一家机器人公司担任控制算法工程师。我的工作就是研究各类机器人的运动规划与控制算法。两年前,为了记录工作中遇到的问题与解决方案,我创建了一个技术博客。最初写博客仅仅是为了自己记录工作笔记,没想到渐渐有些读者开始关注我的博客。有些读者也在评论里提出自己的看法,这给了我很大的鼓励。我意识到分享自己的工作经验,能够帮助更多同行提高,这成为我持续写作的动力。

2023-07-17 09:37:50 293

原创 ROS2开发|将Pointcloud2数据变换坐标系

我的点云数据发布在"map"坐标系下,我想把这个pointcloud2数据变化至"base_link"坐标系。

2023-04-27 17:36:48 1565

原创 一天一个linux小技巧|.(点)是什么意思

因此当多个shell进程(父子进程或无关进程均可)共享一组变量值时,就可以将这些变量赋值语句定义到一个shell文件里,并在需要这些变量值的程序中使用点语句来引用这个shell文件,从而实现变量值共享(对这些变量值的修改仅涉及到这个shell文件)。它是 source命令的代名词,所以你可以用它在当前 shell 中执行一个文件,而不是以某种其它的方式去运行一个脚本文件(这通常指的是 Bash 会产生一个新的 shell 去运行它)“.”点命令是shell的一个内部命令,它从指定的shell 文件中。

2023-02-17 11:15:42 1287 1

原创 一天一个linux小技巧|grep命令

grep 命令grep是强大的文本搜索命令,grep(Global Regular Expression Print) 全局正则表达式搜索。grep 的工作方式是这样的,它在一个或多个文件中搜索字符串模板。如果模板包括空格,则必须被引用,模板后的所有字符串被看作文件名。搜索的结果被送到标准输出,不影响原文件内容。-A n --after-context显示匹配字符后n行-B n --before-context显示匹配字符前n行-C n --context 显示匹配字符前后n行·

2023-02-17 11:01:21 688

原创 联想电脑安装ubuntu18.04双系统超详细教程(23年最新教程,99%成功率)

ubtuntu的长期支持版本现在应该已经出道21.04版本了,如果你对于版本没有要求的话,建议直接安装最新版ubuntu,因为新版的系统驱动都会进行更新,也对于新版硬件的适配性也会更好~~~如果你跟我一样,公司(实验室)必须或者都在用18.04版本,那就接着往下看吧。虽然装起来问题会比较多,但是办法总比困难多!网上的教程很多,但大多都比较古早,随着硬件不断更新,ubuntu18.04相应的驱动无法支持。在安装中主要会有两个大问题:显卡驱动不适配和wifi网卡驱动不适配,本篇教程也会给出相应的解决办法。

2023-02-01 15:29:52 5259

原创 C++多线程入门及基础知识

线程即操作系统进行CPU任务调度的最小单位。C++的多线程并发,简单理解的话就是,将任务的不同功能交由多个函数实现,创建多个线程,每个线程执行一个函数,一个任务就同时由不同线程执行。

2023-01-13 14:58:58 932

原创 关于迭代器遍历及auto关键词

在使用vector容器或者字符串时,很经常会用到一些遍历操作,除了使用下标遍历之外,使用迭代器遍历也是超级方便,但是迭代器也有有一些小坑,一不注意就会编译出错,所以特意总结一下。迭代器很很多接口,不过最重要要搞清楚迭代器指向的位置!!str.begin();指向字符串的第一个字符的位置str.end();指向字符串的最后一个字符的后一个位置;str.rbegin();指向字符串的最后一个字符的位置;str.rend();指向第一个字符串的前一个位置;举个例子:迭代器的使用方式和指针类似设计规

2022-12-14 15:05:15 1587

原创 Vector数组类型在ROS开发中的用法小结

ROS系统的一个显著优势就是分布式和灵活性,用户可以很方便自定义消息类型。在自动驾驶中,无论是传感器消息sensoe_msgs,还是导航消息nav_msgs等等几乎都离不开一个基本的结构:vector数组。尤其是在SLAM中,在处理雷达消息更是必不可少的操作。所以把vector理解透彻对于ROS开发还是非常重要的。接下来的内容以C++语言为主,python语言是类似的,但是语法可能稍有不同。(PS:对于搞自动驾驶的同学,还是强烈推荐用C++开发,原因无他,C++快!!!

2022-10-25 11:21:34 2020

原创 ROS学习|Nodetlet学习与使用

Nodelet旨在提供一种方法,在一台机器上、在一个进程中运行多个算法,在进程内传递消息时不会产生拷贝成本。普通节点使用TCP。这对很多事情来说都很好用。但是,如果你有多个进程需要使用包含大量数据的消息(如图像或点云),打包消息,发送消息,然后解包,可能需要一点时间。如果两个进程在同一台计算机上,那么只需发送一个指向该数据的指针,而不是通过TCP发送数据本身,这样会更快。但这只适用于同一台计算机上的进程(又称nodelet),因为一台计算机的指针对另一台计算机没有意义。

2022-09-15 15:53:34 2686

原创 Docker技术入门| L4访问仓库&数据管理

仓库(Repository)是集中存放镜像的地方。一个容易混淆的概念是注册服务器(Registry)。实际上注册服务器是管理仓库的具体服务器,每个服务器上可以有多个仓库,而每个仓库下面有多个镜像。从这方面来说,仓库可以被认为是一个具体的项目或目录。例如对于仓库地址 docker.io/ubuntu 来说,docker.io 是注册服务器地址,ubuntu 是仓库名。大部分时候,并不需要严格区分这两者的概念。

2022-08-25 16:59:20 200

原创 Docker技术入门| L3操作容器

容器是 Docker 又一核心概念。简单的说,容器是独立运行的一个或一组应用,以及它们的运行态环境。对应的,虚拟机可以理解为模拟运行的一整套操作系统(提供了运行态环境和其他系统环境)和跑在上面的应用。本文将具体介绍如何来管理一个容器,包括创建、启动和停止等。

2022-08-24 17:48:19 404

原创 Docker技术入门|L2 使用镜像

Docker 运行容器前需要本地存在对应的镜像,如果本地不存在该镜像,Docker 会从镜像仓库下载该镜像。

2022-08-24 14:03:52 241

原创 Docker技术入门|L1简介及安装

Docker 是一个开源的应用容器引擎。Docker 可以让开发者打包他们创建的应用以及相应的依赖包到一个可移植、轻量级的容器中。Docker 可大大简化在容器中管理应用程序的过程。容器使用沙盒机制,运行在其中的应用与主系统相互分离,类似与虚拟机。但容器比虚拟机有更棒的可移植性、占用计算机资源更小。

2022-08-20 11:02:55 414

原创 视觉slam学习|基础篇02

SLAM基础篇01 SLAM基础篇02SLAM中使用的相机与我们平时见到的单反摄像头并不是同一个东西。它往往更加简单,不携带昂贵的镜头,以一定速率拍摄周围的环境,形成一个连续的视频流。普通的摄像头能以每秒钟 30 张图片的速度采集图像,高速相机则更快一些。按照相机的工作方式,我们把相机分为单目(Monocular)、双目(Stereo)和深度相机(RGB-D)三个大类:相机的成像原理可以简单的看成针孔模型(小孔成像)+镜头畸变两个部分。针孔模型就是我们初中学的小孔成像。现在来对这个简单的针孔模型进行几

2022-08-04 17:51:17 737 1

原创 ubuntu/linux系统学习|使用命令行打开任意文件

但当需要打开其他格式文件时,比如pdf、jpg、mp3格式文件,咱们通常做法是进入到文件所在的目录,双击打开,很影响效率。xdg-open会选择合适的程序打开指定文件,跟双击打开效果一样。OK,现在是不是方便多了,通过快捷键Ctrl+Alt+T可以打开shell,F11可以全屏显示(Alt+F9最小化窗口,Alt+F10最大化/恢复窗口),再辅予xdg-open命令,极大减少了鼠标操作,也大大提升了效率。在Ubuntu下,当需要打开其他格式文件时,咱们通常做法是进入到文件所在的目录,双击打开,很影响效率。.

2022-07-26 17:31:06 5666

原创 视觉slam学习|基础篇01

SLAM基础篇01SLAM基础篇02最近在看高翔和张涛写的《视觉SLAM十四讲》,记录一下学习的内容,方便以后复习。这一系列文章更像是这本书的读书笔记,所以结构脉络都与该书相似;更推荐有时间的同学去看原书,写的更加详细易懂。欢迎大家一起探讨学习视觉SLAM相关的知识。SLAM(simultaneous localization and mapping)全称即时定位与地图构建或并发建图与定位),顾名思义可以解决“定位”和“建图“两件事情。 SLAM 问题的本质:对运动主体自身和周围环境空间不确定性的估计。主

2022-07-23 16:24:44 2503

原创 git学习笔记

在开发项目中,尤其实在多人合作开发的项目中,代码管理和版本控制尤为重要。git就是一个非常好用流行的代码管理工具,记录下git的一些基础操作,方便日后复习查看。for mac推荐在app商城安装Xcode,然后先择菜单“Xcode”->“Preferences”,在弹出窗口中找到“Downloads”,选择“Command Line Tools”,点“Install”就可以完成安装了。git基础git init 初始化git add -A 将所有改动添加到仓库暂存区git commit -m “

2022-07-06 11:02:24 147

原创 ROS踩坑|编译的二进制debian文件安装后无法使用

在ROS中将自己的功能包打包为二进制文件后,想安装在自己的主机上测试下打包的有没有问题。使用dpkg命令安装后发现可以使用,便将这个debian文件装到另一个主机上。没想到,最后竟然用不了,显示找不到可执行文件。明明装到自己的电脑上可以,到那时装到别的电脑上就不行。当时以为遇到啥玄学问题了,不过经过排查一番发现还是自己的操作有问题1经过排查主要有两个原因:第一个问题:为什么撞到自己的电脑上没问题而装到别人的电脑上没问题?因为我的电脑上本来就装的有这个package,当我用roslauch的时候,自

2022-06-17 15:41:59 479

原创 ROS踩坑|terminal终端输出消息太长无法全部显示

在ROS中,尤其是在编译的时候,常常会遇到打印的输出太长而无法全部看到。这在debug的时候非常蛋疼,解决方法也很简单,就是把输出的消息都保存在文本文件里,然后再浏览。我查到了两个方法 我的版本是Ubuntu18.04但应该所有的linux系统的命令都是一样的。在终端的命令行中输入以下命令:这样就会在当前目录下创建一个 output.txt 文件,在命令窗口执行的所有命令包括终端输出的所有信息都会写到这个文件中。在终端的命令行中输入 Ctrl + d 之后会停止向文本文件的写入工作。在终端中输入以下内容

2022-06-15 17:40:29 2270 1

原创 ROS学习|Behavoir Tree(BT树)--c++实现第二节

本片文章接着上一篇接着讲述BT树的C++实现以及有关的注意事项。目录使用Subtree组合BT树CrossDoor behaviorLoggers在树和子树中重映射接口例子如何使用多个 XML 文件来存储子树使用"include"加载文件手动加载多文件在初始化和/或构造期间传递额外的参数方法一 注册自定义builder方法2:使用init方法使用协程(Coroutines)的异步操作C++例子使用Subtree组合BT树我们可以将更小且可重用的BT树组合成大规模BT树。换句话说,我们想要创建分层行为树

2022-05-19 11:18:29 1167

原创 ROS学习|Behavoir Tree(BT树)--c++实现

目录创建行为树简单Beahvoir实例使用 XML 动态创建树基本接口(port)输入输出接口输入接口输出接口一个复杂的示例通用类型接口ports with generic types解析一个字符串例子Reactive Sequence 和异步节点Sequence vs ReactiveSequence创建行为树行为树,类似于状态机,过是一种在正确的时间在正确的条件下调用回调的机制。此外,我们将交替使用“callback”和“tick”这两个词。简单Beahvoir实例在这里插入图片描述初始(

2022-05-18 15:52:22 2243

原创 ROS学习|Behavoir Tree(BT树)--基本概念

最近学习BT树进行任务调度。记录和分享一下BT书的相关知识基本概念节点类型

2022-05-14 18:02:18 1816

原创 ros学习|功能包相关|查找、安装、卸载删除某个功能包

在运行别人的demo时,是不是会出现找不到功能包的情况。所以查找、安装和卸载某个功能包是蛮重要的。查找查询当前安装完成的所有包文件 rospack list查询ros的所有功能包 apt-cache search ros-kinetic或者说在不知道要安装功能包的确切名字的情况下找到目标包 apt-cache search ros-kinetic | grep rqt-通过管道线 与grep命令, 输出与关键字rqt-相关的行再或者下述安装命令与Tab键结合sudo apt-ge

2022-04-19 09:33:50 9938 3

原创 ROS踩坑|warning:clock skew detected. Your build may be incomplete

报错展示问题分析ROS编译时遇到这个问题95%是因为系统时钟错误了,比如说你之前的编译的时间时2022年3月12日,而现在系统的时间是2021年3月12日,所以系统编译发现了早于现在编译时间的文件,自然就无法编译。解决办法有三个解决办法:方法一:修改系统的时间,点击界面右上角时间,设置一个往后的时间即可。但这种方法有一个弊端就是,开机重启后仍要设置时间,且设置的时间不能早于之前设置的时间,否则还是编译不通过。方法二: 删除build文件夹和devel文件夹,重新编译。这种方法的弊端是如果项目太大

2022-03-18 11:37:05 4483

原创 ROS|发布和订阅整型/浮点型/布尔型/字符串消息

需要用ROS发布一个布尔类型的消息,上手敲代码的时候竟然不知道具体改用什么数据类型的消息,查找了资料才弄清楚,再这里记录一下话题消息类型ROS中的std_msgs包含几乎全部基础的数据类型,包括布尔型,整型,字符串等等。可用rosmsg show std_msgsstd_msgs/Boolstd_msgs/Bytestd_msgs/ByteMultiArraystd_msgs/Charstd_msgs/ColorRGBAstd_msgs/Durationstd_msgs/Emptystd

2022-02-18 14:34:56 8666 2

原创 ROS踩坑|报错“没有规则可制作目标”

问题描述使用catkin_make编译一个功能包,第一次编译由于编译的cpp文件命名与camkefile中的不一致,所以编译失败了。修改相应的名字之后再次编译还是失败。显示如下报错:make[2]:*** 没有规则可制作目标"auto_alignment/CMakeFiles/alignment_+server.dir/build"。停止recipe for target 'auto_alignment/CMakeFiles/alignment_+server.dir/all' failedreci

2022-01-22 10:15:57 13348 4

原创 ROS踩坑|批量化为.py文件添加可执行权限

问题描述在ROS中,想要用rosrun命令运行python文件,首先要对该文件提价可执行权限。如果要是用鼠标一个一个点左键设置属性,效率很低,并且不够优雅~~~可以用chmod命令解决解决方案chmod命令用于修改文件的访问权限。该命令有两种用法。一种是包含字母和操作符表达式的文字设定法;另一种是包含数字的数字设定法。命令格式:chmod [权限] 文件名文件名可以使用通配符,文件名为星号*表示匹配所有文件。用法示例:为/home/zhidao/py目录下的所有文件添加执行权限。$ chmo

2022-01-07 20:21:36 4069

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除