0%

BehaviorTree.CPP是一个开源的C++行为树库。在游戏领域,行为树已经比较流行了。主要用于维护游戏角色的各种动作和状态。但在机器人领域还很少使用的。Navigation2中引入了行为树来组织机器人的工作流程和动作执行。

行为树是树状的结构,它的逻辑流程是由xml文件描述的。我们可以用其配套的工具Groot来可视化行为树。如下图所示:

阅读全文 »

编译完ros2程序后,我们会发现install目录下有两个脚本local_setup.bashsetup.bash。执行程序前,通常需要source一下install目录下的脚本,以便环境变量准备就绪。这样ros2 runros2 launch就能找到对应的执行文件和依赖。

下面的内容是从setup.bash中截取出来的一段。可以发现它会先source 一下/opt/ros/galactic目录再source 一下/home/ubuntu/turtlebot3_ws/install目录,最后再source一下当前目录。这样就会把外部的多个工作空间囊括进来。如果多个工作空间中有相同名字的功能包可能就会互相冲突。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# source chained prefixes
# setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced script
COLCON_CURRENT_PREFIX="/opt/ros/galactic"
_colcon_prefix_chain_bash_source_script "$COLCON_CURRENT_PREFIX/local_setup.bash"
# setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced script
COLCON_CURRENT_PREFIX="/home/ubuntu/turtlebot3_ws/install"
_colcon_prefix_chain_bash_source_script "$COLCON_CURRENT_PREFIX/local_setup.bash"

# source this prefix
# setting COLCON_CURRENT_PREFIX avoids determining the prefix in the sourced script
COLCON_CURRENT_PREFIX="$(builtin cd "`dirname "${BASH_SOURCE[0]}"`" > /dev/null && pwd)"
_colcon_prefix_chain_bash_source_script "$COLCON_CURRENT_PREFIX/local_setup.bash"

unset COLCON_CURRENT_PREFIX
unset _colcon_prefix_chain_bash_source_script
阅读全文 »

注意:下面的解释说明是以Navigation2 v1.0.12来进行的。其对应的ROS2版本为Galactic

image-20220619212218877

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

要使用Hexo必须先安装GitNode.js。本文是在Ubuntu20环境下进行操作的。使用其它系统也可以将下面的操作作为参考。

安装Git

1
sudo apt-get install git-core

安装Node.js

推荐安装当前最新版。不同的Hexo版本依赖不同版本的Node.js。下面是版本对照表。

image-20220603230418480

这里建议安装Node.js最新稳定版。

Node.js官方下载网址:

https://nodejs.org/en/download/

这里以二进制安装方式进行,也可使用源码编译安装。

按图示下载好二进制文件包。

image-20220603230636874

按照下面的方式操作即可安装好。

1
2
3
4
5
6
7
8
tar xvf node-v16.15.1-linux-x64.tar.xz
mkdir /data
mv node-v16.14.2-linux-x64 /data/nodejs
ln -s /data/nodejs/bin/* /usr/bin/
npm install yarn

echo "PATH=$PATH:/data/nodejs/bin" >> /etc/profile
source /etc/profile
阅读全文 »

新一代的turtlebot终于来了。[撒花撒花]

turtlebot是开源的低成本移动机器人平台,希望以低成本的方式帮助更多的开发者学习实践机器人技术。

这次发布的TurtleBot 4共有两个版本:TurtleBot 4 StandardTurtleBot 4 Lite

它们是以iRobot Create3作为移动底盘,配备了OAK-D摄像头和2D激光雷达。计算平台是Raspberry Pi 4,并运行ROS2

TurtleBot 4 软件运行在Ubuntu 20.04 LTS (Focal Fossa) 上,目前只支持ROS2 Galactic版本。它是目前第一个支持ROS2Turtlebot

开发turtlebot4的公司叫clearpathrobotics,下面是它在github上的主页:

https://github.com/clearpathrobotics

阅读全文 »

仿真系统简介

机器人的开发需要很多的测试。而测试就需要搭建场地。测试项目一多,需要的场地的形式也会更多。搭建这样的场地不仅成本高,耗费的人力和物力都相当可观。有些场景在真实环境中不容易出现,但却可以在仿真环境中制造出来。

通过对静态环境的模拟和动态环境的模拟,仿真系统可以帮助开发人员和测试人员触及到很多长尾的情况。而做到这些的代价要比在真实环境中的测试低很多,效率也更高。不管是服务机器人领域还是自动驾驶,仿真技术已经成为一项不可或缺的关键技术。这里对仿真系统做如下简单的定义以方便大家有个整体的概念。

1)仿真系统是通过计算机仿真技术对真实环境的数学建模。它需要模拟重力,碰撞,摩擦,机器人的动力学等等基础物理现象。

2)仿真技术的基本原理是在仿真场景内,将真实控制器变成算法,结合传感器仿真等技术,完成对算法的测试和验证。

仿真软件

目前ROS中存在webotsgazebostage三种仿真环境。

Webots

Webots 是一个开源的三维移动机器人模拟器,它与gazebo类似都是ros中仿真环境。webots在2018年以前是一款商业软件,商业软件的好处就是安装简单,在windowsubuntu上都可以实现一键安装,对用户很友好,webots从2018年以后webots进行了开源(自2018年12月起,Webots作为开放源码软件在Apache 2.0许可下发布。)。

Webots支持C/C++PythonMATLABJavaROSTCP/IP等多种方式实现模型的仿真控制。Webots内置了接近100种机器人模型,包括轮式机器人、人形机器人、爬行移动机器人、单臂移动机器人、双臂移动机器人、无人机、大狗、飞艇等等,其中就包括大家比较熟悉的Boston Dynamics AtlasDJI Mavic 2 PRONaoPR2YouBotURTurtlebot3 Burger等机器人。当然还有我们需要的自动驾驶环境,webots还提供有火星车的模型可以让大家使用。

Webots的一些关键功能包括:

  • 跨平台(WindowsLinuxMac)。
  • 稳定的物理引擎。
  • 可重现性。
  • 使用基于物理的渲染获得逼真的图像的高效渲染引擎。
  • 简单直观的用户界面。
  • 模拟各种传感器和执行器可供选择并可以工作。
  • 可用的机器人模型范围很广,可以投入使用。
  • 范围广泛的文件样本。

目前Webots是通过webots_ros2功能包来和ROS2集成的。

image-20220612111200797

阅读全文 »

不知道阅读本篇文章的你有没有被环境配置搞的焦头烂额过?

想要验证一个功能包,但却需要安装各种依赖。装就装吧!但是安装的依赖可能更新本机中的一些配置或软件版本,导致过去可以运行的软件这么折腾一下后就不能再运行了。

这时可能又后悔又懊恼。严重的可能要重新安装电脑系统。

本文描述了一种在Docker环境中开发和调试ROS程序的方法。旨在解决环境配置和软件依赖给我们带来的困扰。

我们使用Docker+Vscode来构建开发环境。下面的操作在Ubuntu 20.04 LTS上验证过。对于其他操作系统,操作步骤应该也是一致的。

阅读全文 »

运行一个示例

安装依赖

1
sudo apt-get install ros-galactic-turtle-tf2-py ros-galactic-tf2-tools ros-galactic-tf-transformations
1
pip3 install transforms3d

运行示例

在不同的命令窗口中运行下面的命令

启动小乌龟窗口

1
ros2 launch turtle_tf2_py turtle_tf2_demo.launch.py

启动键盘控制节点

1
ros2 run turtlesim turtle_teleop_key

观察坐标转换的结果

1
ros2 run tf2_ros tf2_echo turtle2 turtle1

示例分析

本示例中启动了两只小乌龟Turtle1Turtle2TF发布器会将Turtle1相对于world坐标系的位置关系和Turtle2相对于world坐标系的位置关系发布出来。为了实现Turtle2跟随Turtle1的效果,程序中获取了Turtle1相对于Turtle2的位置关系并且将其折算成速度控制量。

阅读全文 »

launch 文件

launch文件可以同时配置和启动多个ros节点。ROS2中的launch文件可以用Pythonxmlyaml来写。

ROS2中的Python launch文件更为灵活,功能也更加强大。可以用它执行一些其他的任务(比如新建目录,配置环境变量)。所以官方推荐的是使用python来写。而launch文件一般会放在功能包中的launch文件夹下面。如果想感受一下各种方式写launch文件的效果,可以点开下面的链接体会一下。

https://docs.ros.org/en/galactic/How-To-Guides/Launch-file-different-formats.html

launch文件一般通过下面的命令启动:

1
ros2 launch <package_name> <launch_file_name>

值的注意的是,当package编译时加了--symlink-install选项,在包内修改了launch文件,不用编译也是生效的。

阅读全文 »

ROS2最新的5年长期支持版ROS 2 Humble Hawksbill 发布了。它是第一个运行在Ubuntu 22.04 (Jammy Jellyfish)上的版本。

介绍文章:

https://discourse.ros.org/t/ros-2-humble-hawksbill-released/25729

ROS2 Humble Hawksbill 版本新特性:

https://docs.ros.org/en/humble/Releases/Release-Humble-Hawksbill.html#new-features-in-this-ros-2-release

ROS2 Humble Hawksbill官方手册:

https://docs.ros.org/en/humble/index.html

阅读全文 »