0%

使用ros2 lifecycle --h命令可以看到lifecycle相关的命令有哪些。

获取LifecycleNode节点的状态

1
ros2 lifecycle get /lifecycle_node_demo_node

其中/lifecycle_node_demo_node为节点名称

阅读全文 »

map的数据类型

map话题的类型是nav_msgs::msg::OccupancyGrid。使用下面的命令可以查询该类型的数据结构。

1
ros2 interface show nav_msgs/msg/OccupancyGrid

nav_msgs::msg::OccupancyGrid的数据结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# This represents a 2-D grid map
std_msgs/Header header
builtin_interfaces/Time stamp
int32 sec
uint32 nanosec
string frame_id

# MetaData for the map
MapMetaData info
builtin_interfaces/Time map_load_time
int32 sec
uint32 nanosec
float32 resolution
uint32 width
uint32 height
geometry_msgs/Pose origin
Point position
float64 x
float64 y
float64 z
Quaternion orientation
float64 x 0
float64 y 0
float64 z 0
float64 w 1

# The map data, in row-major order, starting with (0,0).
# Cell (1, 0) will be listed second, representing the next cell in the x direction.
# Cell (0, 1) will be at the index equal to info.width, followed by (1, 1).
# The values inside are application dependent, but frequently,
# 0 represents unoccupied, 1 represents definitely occupied, and
# -1 represents unknown.
int8[] data

其中data数据成员用于存储地图中的每个栅格值。nav_msgs::msg::OccupancyGrid存储的栅格值范围在[0~100]。0表示栅格未被占用,100表示栅格被占用了,而0到100之间表示被占用的程度。-1表示未知区域。

info成员变量中主要存储地图文件的一些参数。比如:地图大小,分辨率,原点等信息。

阅读全文 »

Costmap_2d 的插件

Costmap_2d 的插件都是继承于CostmapLayer。具体的关系如下图所示:
img

StaticLayer

StaticLayer内主要是通过接收map_server发布的地图话题来加载静态地图的。所以StaticLayer内是可以在线更改静态地图的。

ObstacleLayer

ObservationBuffer

ObservationBuffer 是一个障碍物观察数据的buffer。观测到的障碍物数据都将转成sensor_msgs::msg::PointCloud2格式,然后存储到ObservationBuffer 中。

ObservationBuffer 里存储的历史障碍物数据可以根据想保持的时间来清空。期望保持的时间主要由变量observation_keep_time_来决定。如果设置成rclcpp::Duration(0.0s)则表示每次都只存储最新的,历史障碍物数据都会被清掉。

看到这里,有同学可能会想,既然可以以时间为依据来清除障碍物,是不是也可以以其他条件来清除障碍物呢?答案肯定是可以的。这个就需要根据应用场景来选择了。比如:使用机器人的移动距离来作为判断条件。当观测数据时的机器人位置与现在机器人的位置超过多远就把该数据清掉。

阅读全文 »

有顺序的的启动节点,暂停节点,关闭节点是ROS1的一个痛点。因为在ROS1中节点启动是无序的。ROS1系统设计时并没有考虑节点启动时可能存在的互相依赖。

但在实际生产使用环境中,某些节点能正常工作是需要其他一些节点已经启动了的。

比如:需要定位功能能正常运行,前提是map_server节点已经正常加载地图文件并且已经把地图话题发布出来。

又或者你想从建图功能切到导航功能。在ROS1中,需要先将建图功能的程序杀干净。然后再启动导航程序。在ROS2中,各个节点的状态是可管理的。

在这个场景里,大可让建图程序休眠,而不用杀掉。切换功能时只需要激活相应功能的节点即可。

阅读全文 »

废话不多说,我们直接开始。

搭建测试环境

为了避免花太多时间折腾环境问题。这里使用Docker来跑测试的示例。

安装Docker

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# step 1: 安装必要的一些系统工具
sudo apt-get update
sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common

# step 2: 安装GPG证书
curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

# Step 3: 写入软件源信息
sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

# Step 4: 更新并安装 Docker-CE
sudo apt-get -y update
sudo apt-get -y install docker-ce

# Step 5: 查看docker是否安装成功
docker version
阅读全文 »

查看Action 信息的常用命令
Action主要用于长时间运行的任务。它们由三部分组成:目标、反馈和结果。

查看action列表

1
ros2 action list

查看action列表和类型

1
ros2 action list -t

查看action信息

1
ros2 action info <action_name>

显示action

1
ros2 interface show <action_name>

action send goal

1
ros2 action send_goal <action_name> <action_type> <values>
阅读全文 »

下面的操作是基于galactic

代码下载

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#安装git和编译工具
sudo apt-get install git python3-vcstool build-essential python3-colcon-common-extensions
mkdir -p turtlebot3_ws/src
cd turtlebot3_ws/

#下载turtlebot3代码
git clone https://ghproxy.com/https://github.com/ROBOTIS-GIT/turtlebot3.git src/turtlebot3 -b galactic-devel
git clone https://ghproxy.com/https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git src/turtlebot3_msgs -b galactic-devel
git clone https://ghproxy.com/https://github.com/ROBOTIS-GIT/turtlebot3_simulations.git src/turtlebot3_simulations -b galactic-devel

#下载navigation2
git clone https://ghproxy.com/https://github.com/ros-planning/navigation2.git src/navigation2 -b galactic
git clone https://ghproxy.com/https://github.com/ros-planning/navigation2_tutorials.git src/navigation2_tutorials -b master

#下载teb_local_planner
git clone https://ghproxy.com/https://github.com/rst-tu-dortmund/costmap_converter.git src/costmap_converter -b ros2
git clone https://ghproxy.com/https://github.com/rst-tu-dortmund/teb_local_planner.git src/teb_local_planner -b ros2-master

注意:链接中的https://ghproxy.com/ 为使用代理下载github代码。

阅读全文 »

Plotjuggler简介

PlotJuggler是一个类似于rqt_plot的基于Qt的数据可视化工具。但PlotJuggler拥有更强大和好用的功能。你可以导入文本文件让它显示文本文件中的数据。你也可以导入ros的bag包,它能自动解析bag包中的数据。并可以回放bag包的数据,然后用Rviz来显示数据。PlotJuggler的功能有很多,这里只介绍几种我常用的功能。应该足以应付日常的机器人开发调试工作。

Plotjuggler官方网址:

https://www.plotjuggler.io/

github地址:

https://github.com/facontidavide/PlotJuggler

阅读全文 »

下面的操作是基于ROS2 galactic

turtlebot3的代码下载:

安装git,编译工具和下载源代码

1
2
3
4
5
6
sudo apt-get install git python3-vcstool build-essential python3-colcon-common-extensions
mkdir -p turtlebot3_ws/src
cd turtlebot3_ws/
git clone https://ghproxy.com/https://github.com/ROBOTIS-GIT/turtlebot3.git src/turtlebot3 -b galactic-devel
git clone https://ghproxy.com/https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git src/turtlebot3_msgs -b galactic-devel
git clone https://ghproxy.com/https://github.com/ROBOTIS-GIT/turtlebot3_simulations.git src/turtlebot3_simulations -b galactic-devel

注意:链接中的https://ghproxy.com/ 为使用代理下载github代码。

阅读全文 »

文本中用于说明的完整示例代码请在下面的仓库中查阅。

https://gitee.com/shoufei/ros2_galactic_turorials.git

https://github.com/shoufei403/ros2_galactic_tutorials.git

参数

理解参数的概念

节点的参数通常维护到yaml文件中。节点启动时通常可以加载参数文件,然后读取参数的内容。而且在ROS中参数是可以动态配置的。

更多细节参考官方文档:

https://docs.ros.org/en/galactic/Tutorials/Parameters/Understanding-ROS2-Parameters.html

给节点设置参数的三种方式

  1. 让节点加载参数文件

以命令行方式加载参数文件

1
ros2 run <package_name> <executable_name> --ros-args --params-file <file_name>

示例:

1
ros2 run turtlesim turtlesim_node --ros-args --params-file ./turtlesim.yaml
阅读全文 »