0%

ROS2的构建系统ament_cmake是基于CMake改进而来的。本篇文章我们详细介绍一下ament_cmake常用的语句。

一个功能包的诞生

使用ros2 pkg create <package_name>可以生成一个功能包的框架。

image-20220716195445774

一个功能包的构建信息将会包含在CMakeLists.txtpackage.xml这两个文件中。package.xml文件中包含该功能包的依赖信息,它可以帮助编译工具colcon确定多个功能包编译的顺序。当我们需要单独编译功能包时必须确保编译的包名必须与package.xml文件中的一致。

1
colcon build --packages-select <package_name>

CMakeLists.txt就是我们需要重点关注的。它描述了如何构建功能包。

阅读全文 »

下面介绍一下如何在ROS2节点中使用多线程。

使用多线程就涉及到回调组(CallbackGroup)了。

使用示例

创建回调组的函数如下:

1
2
3
4
5
6
/// Create and return a callback group.
RCLCPP_PUBLIC
rclcpp::CallbackGroup::SharedPtr
create_callback_group(
rclcpp::CallbackGroupType group_type,
bool automatically_add_to_executor_with_node = true);
阅读全文 »

jenkins是老牌的CI/CD工具。下面记录一下在云服务器上的安装过程。

基于docker安装jenkins

下面记录了如何在云服务器上安装jenkins

新建一个jenkins_docker文件夹,在文件夹里新建一个data文件夹。并给data文件夹读写权限。

1
chmod -R a+w data/

新建一个docker-compose.yml文件。添加下面的内容:

1
2
3
4
5
6
7
8
9
10
version: "3.1"
services:
jenkins:
image: jenkins/jenkins:2.332.3-lts
container_name: jenkins
ports:
- 8080:8080
- 50000:50000
volumes:
- ./data/:/var/jenkins_home/

注意,这里是将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程序只需下面三个步骤:

  1. 添加backward_rospackage.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.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

阅读全文 »