0%

本文介绍ROS2中话题和服务的内容。并配合示例代码来实践以便加深理解。

安装依赖

安装相应的工具:

colcon 编译工具安装

1
sudo apt install python3-colcon-common-extensions git

设置colcon_cd,方便用colcon_cd 包名 快速打开到包的目录。需要在工作空间目录下使用,其他路径下使用会出现卡住的情况。

1
2
3
4
echo "source /usr/share/colcon_cd/function/colcon_cd.sh" >> ~/.bashrc

#设置colcon_cd打开的根目录,根据自己的实际情况设置
echo "export _colcon_cd_root=~/ros2_install" >> ~/.bashrc

设置colcon参数自动补全功能

1
echo "source /usr/share/colcon_argcomplete/hook/colcon-argcomplete.bash" >> ~/.bashrc

ROS2参数自动补全工具(zsh不支持ROS2参数自动补全,bash可以)

1
sudo apt-get install python3-argcomplete
阅读全文 »

costmap是什么?

costmap

costmap翻译过来是代价地图的意思。由SLAM算法生成栅格地图。我们为栅格地图中的每一个栅格分配一个代价值,这样就形成了costmap。路径规划算法则可以在具有代价的栅格地图上生成路径。规划路径的生成则是强依赖于代价值。为了生成合适的路径,我们需要为每个栅格分配合适的代价值。最开始想到的是在单层的costmap中更新每个栅格的代价,然后直接给路径规划算法。但这样会引起诸多问题。比如因为所有的数据都在同一个costmap中更新,任何一个数据的变动都需要拿到之前其他的数据重新一起计算代价值。比如数据更新的地图范围也不好确定。比如当数据类型多了之后,数据整合的顺序不好控制。

后来想到将单层的costmap分成多层是个好办法。如上图所示,一层costmap只用同一种数据来更新。比如最底层的static map就是SLAM算法生成的静态地图。使用静态地图数据生成一层costmap。Obstacles 层则是由传感器数据更新的costmap层。甚至可以根据某些特殊目的自定义一个costmap层,使生成的路径规避某些区域。这在单层的costmap算法中是很难实现的。最后将所有的costmap层按特定的顺序组合起来形成了layered_costmap。可以看到这是一种更为灵活,扩展性也更强的方法。

阅读全文 »

对于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
阅读全文 »

安装vcs

1
sudo apt-get install python3-vcstool

下载代码

1
2
3
4
#在ros2_ws目录下运行,代码会存在src目录下(以ros2仓库作为示例)
mkdir -p ros2_ws/src
cd ros2_ws
vcs import src < ros2.repos

更新已经下载的代码

1
2
#在ros2_ws目录下运行
vcs pull src

导出当前src目录下的git仓库信息

1
vcs export src >> tmp.repos
阅读全文 »

ROS发展历程介绍

img

2006 年,无比好奇的一群人走在一起,组建了一个机器人研究实验室:柳树车库(Willow Garage)

2010年5月26日,人类历史上第一个机器人毕业典礼在硅谷这条蜿蜒的柳树街68号的小路旁,临时搭建的一座帐篷中举办。

img

四年思考的三个问题:

第一:为什么人类需要机器人?

斯科特·哈森的答案是:机器人可以帮助我们提高生产和工作效率。机器人已经在工厂里证明可以大幅度的提供工业的生产效率,在日常生活中,人类也需要机器人提高工作效率和生活质量。而且需要大量的机器人。

第二:为什么我们至今还没有好的机器人?

斯科特·哈森答案是:过去的经验告诉我们,造一个机器人非常困难,资本对机器人方向的关注和投入也很少。投资很少是因为市场很小,市场很小是因为机器人能做的事情很有限。没有市场,就没有投资,没有投资就没有人造机器人,没有人造机器人,就没有机器人。所以我们先从造机器人开始。

第三:如何实现人类拥有机器人的梦想?

斯科特·哈森答案是:我们正在做这件事,但是我们自己无法实现这个梦想,我们通过构建一个社群,让工程师,研究人员,工业企业参与进来,联合起来,一起来做 。希望有生之年能实现这个梦想,一个人人拥有机器人的梦想。

阅读全文 »

ROS1环境

匹配机器人和笔记本电脑的网络

让笔记本电脑和机器人内部的机载电脑连上相同的局域网络。

下面分别配置电脑和机载电脑的/etc/hosts 文件

使用hostname 分别查看笔记本电脑和机载电脑板的系统主机名。
使用ifconfig 分别查看笔记本电脑和机载电脑的IP地址。
使用sudo vim /etc/hosts打开电脑的/etc/hosts文件,添加机载电脑的主机名和IP地址。
完成的效果如下:

1
2
3
4
5
6
7
8
9
10
11
127.0.0.1	localhost
127.0.1.1 kevin-Vostro-5568

# The following lines are desirable for IPv6 capable hosts
::1 ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

192.168.10.87 my_robot #该条为添加内容

my_robot 为机载电脑的主机名(由hostname命令获取)

同样的,在机载电脑上也修改/etc/hosts 文件,添加笔记本电脑的主机名和IP地址。效果如下:

1
2
3
4
127.0.0.1	localhost
127.0.1.1 my_robot
192.168.10.56 my_laptop #该条为添加内容

my_laptop 为笔记本电脑的主机名(由hostname命令获取)

阅读全文 »

下载OpenCV源码

OpenCV的release页面

Releases · opencv/opencv

选择相应的版本,下载源码

OpenCV3.4.14

下载opencv_contrib源码

找到与opencv版本一致的tag

https://github.com/opencv/opencv_contrib/tags

opencv_contrib

编译安装opencv

  1. 新建目录
1
mkdir ~/opencv_build && cd ~/opencv_build

把下载好的opencv和opencv_contrib放到opencv_build目录下。

添加代理到编译过程中的下载链接

阅读全文 »

vscode中的snippet功能简介

vscode的语言插件已经内置了一些snippet。例如:C++的插件。当你在编辑器里输入main时,会提示你可以插入的snippet。

img

但是也可以自己定义snippet,然后通过关键字来触发插入snippet

vscode支持非常多编程语言的snippet。通过ctrl+shift+p ,打开命令面板。输入snippet ,就能看到snippet的配置选项。

img

点击Configure User Snippets 后就可以选择配置哪种语言的snippet了。

img

点击语言名称可以生成相应语言的json文件。这个json文件就是用于维护snippet的。其中的cpp.json和python.json文件就是分别维护相应语言snippet的文件。snippet的内容可以按照语言类别来维护。在编辑器里插入时,vscode会检测当前编辑的是什么语言。当输入snippet的触发词时,只会触发对应语言的snippet。

阅读全文 »

ROS2的通信中间件换成了DDS。这让我们可以精准地控制节点间的通信质量。通信效率也迎来了一次大的提升。

但是…

但是…

一个不小心,看到了类似这样的报错信息:

1
[WARN] [1644578813.965216245] [subscriber_qos_obj]: New publisher discovered on topic '/qos_test', offering incompatible QoS. No messages will be received from it. Last incompatible policy: RELIABILITY

本来好好的Rviz也显示不了雷达数据了。

这就是incompatible QoS搞的鬼!

两个节点的Qos设置不兼容将没法通信

阅读全文 »