下面介绍一下如何在ROS2节点中使用多线程。
使用多线程就涉及到回调组(CallbackGroup)了。
使用示例
创建回调组的函数如下:
1 | /// Create and return a callback group. |
jenkins是老牌的CI/CD工具。下面记录一下在云服务器上的安装过程。
docker安装jenkins 下面记录了如何在云服务器上安装jenkins。
新建一个jenkins_docker文件夹,在文件夹里新建一个data文件夹。并给data文件夹读写权限。
1 | chmod -R a+w data/ |
新建一个docker-compose.yml文件。添加下面的内容:
1 | version: "3.1" |
注意,这里是将data目录映射到了docker环境里。
我们使用backward_ros功能包来快速实现用GDB调试ROS2程序。
backward_ros功能包介绍backward_ros功能包是对backward-cpp包的ROS2封装,以便可以简单快速地使用GDB工具。
backward-cpp包的介绍可以查看其仓库:
https://github.com/bombela/backward-cpp
使用backward_ros功能包实现GDB调试ROS2程序只需下面三个步骤:
backward_ros到package.xml 文件。1 | <depend>backward_ros</depend> |
编译选项有很多,这里列出一些常用的编译选项设置,并说明作用。
C++版本1 | set(CMAKE_CXX_STANDARD 17) |
可以根据需求设置11, 14, 17, 20等等C++版本。
1 | add_compile_options(-Wall -Wextra -Wpedantic -Wno-unused-parameter -g) |
告警选项:
| 告警选项 | 作用描述 |
|---|---|
| -Wall | 允许发出gcc提供的所有有用的报警信息 |
| -Wextra | 对所有合法但值得怀疑的表达式发出警告 |
| -Werror | 把告警信息当做错误信息对待 |
| -Wpedantic | 允许发出ANSI C标准所列的全部警告信息 |
| -w | 关闭所有警告(不推荐使用) |
| -Wfatal-errors | 遇到第一个错误就停止,减少查找错误时间 |
我们加上了告警都转成错误后常常会看到下面的错误信息。
1 | error: unused parameter ‘test’ [-Werror=unused-parameter] |
BehaviorTree.CPP是一个开源的C++行为树库。在游戏领域,行为树已经比较流行了。主要用于维护游戏角色的各种动作和状态。但在机器人领域还很少使用的。Navigation2中引入了行为树来组织机器人的工作流程和动作执行。
行为树是树状的结构,它的逻辑流程是由xml文件描述的。我们可以用其配套的工具Groot来可视化行为树。如下图所示:

编译完ros2程序后,我们会发现install目录下有两个脚本local_setup.bash 和 setup.bash。执行程序前,通常需要source一下install目录下的脚本,以便环境变量准备就绪。这样ros2 run和ros2 launch就能找到对应的执行文件和依赖。
下面的内容是从setup.bash中截取出来的一段。可以发现它会先source 一下/opt/ros/galactic目录再source 一下/home/ubuntu/turtlebot3_ws/install目录,最后再source一下当前目录。这样就会把外部的多个工作空间囊括进来。如果多个工作空间中有相同名字的功能包可能就会互相冲突。
1 | # source chained prefixes |
注意:下面的解释说明是以Navigation2 v1.0.12来进行的。其对应的ROS2版本为Galactic。

Nav2具有下列工具:
● 加载、提供和存储地图的工具(地图服务器Map Server)
● 在地图上定位机器人的工具 (AMCL)
● 避开障碍物从A点移动到B点的路径规划工具(Nav2 Planner)
● 跟随路径过程中控制机器人的工具(Nav2 Controller)
● 将传感器数据转换为机器人世界中的成本地图表达的工具(Nav2 Costmap 2D)
● 使用行为树构建复杂机器人行为的工具(Nav2 行为树和BT Navigator)
● 发生故障时计算恢复行为的工具(Nav2 Recoveries)
● 跟随顺序航点的工具(Nav2 Waypoint Follower)
● 管理服务器生命周期的工具和看门狗(Nav2 Lifecycle Manager)
● 启用用户自定义算法和行为的插件(Nav2 Core)
要使用Hexo必须先安装Git和Node.js。本文是在Ubuntu20环境下进行操作的。使用其它系统也可以将下面的操作作为参考。
1 | sudo apt-get install git-core |
推荐安装当前最新版。不同的Hexo版本依赖不同版本的Node.js。下面是版本对照表。

这里建议安装Node.js最新稳定版。
Node.js官方下载网址:
https://nodejs.org/en/download/
这里以二进制安装方式进行,也可使用源码编译安装。
按图示下载好二进制文件包。

按照下面的方式操作即可安装好。
1 | tar xvf node-v16.15.1-linux-x64.tar.xz |

新一代的turtlebot终于来了。[撒花撒花]
turtlebot是开源的低成本移动机器人平台,希望以低成本的方式帮助更多的开发者学习实践机器人技术。
这次发布的TurtleBot 4共有两个版本:TurtleBot 4 Standard和TurtleBot 4 Lite。
它们是以iRobot Create3作为移动底盘,配备了OAK-D摄像头和2D激光雷达。计算平台是Raspberry Pi 4,并运行ROS2。
TurtleBot 4 软件运行在Ubuntu 20.04 LTS (Focal Fossa) 上,目前只支持ROS2 Galactic版本。它是目前第一个支持ROS2的Turtlebot。
开发turtlebot4的公司叫clearpathrobotics,下面是它在github上的主页:
机器人的开发需要很多的测试。而测试就需要搭建场地。测试项目一多,需要的场地的形式也会更多。搭建这样的场地不仅成本高,耗费的人力和物力都相当可观。有些场景在真实环境中不容易出现,但却可以在仿真环境中制造出来。
通过对静态环境的模拟和动态环境的模拟,仿真系统可以帮助开发人员和测试人员触及到很多长尾的情况。而做到这些的代价要比在真实环境中的测试低很多,效率也更高。不管是服务机器人领域还是自动驾驶,仿真技术已经成为一项不可或缺的关键技术。这里对仿真系统做如下简单的定义以方便大家有个整体的概念。
1)仿真系统是通过计算机仿真技术对真实环境的数学建模。它需要模拟重力,碰撞,摩擦,机器人的动力学等等基础物理现象。
2)仿真技术的基本原理是在仿真场景内,将真实控制器变成算法,结合传感器仿真等技术,完成对算法的测试和验证。
目前ROS中存在webots、gazebo、stage三种仿真环境。
Webots 是一个开源的三维移动机器人模拟器,它与gazebo类似都是ros中仿真环境。webots在2018年以前是一款商业软件,商业软件的好处就是安装简单,在windows和ubuntu上都可以实现一键安装,对用户很友好,webots从2018年以后webots进行了开源(自2018年12月起,Webots作为开放源码软件在Apache 2.0许可下发布。)。
Webots支持C/C++、Python、MATLAB、Java、ROS和TCP/IP等多种方式实现模型的仿真控制。Webots内置了接近100种机器人模型,包括轮式机器人、人形机器人、爬行移动机器人、单臂移动机器人、双臂移动机器人、无人机、大狗、飞艇等等,其中就包括大家比较熟悉的Boston Dynamics Atlas、DJI Mavic 2 PRO、Nao、PR2、YouBot、UR、Turtlebot3 Burger等机器人。当然还有我们需要的自动驾驶环境,webots还提供有火星车的模型可以让大家使用。
Webots的一些关键功能包括:
Windows,Linux和Mac)。目前Webots是通过webots_ros2功能包来和ROS2集成的。
