下面的操作是基于galactic
代码下载
1 | #安装git和编译工具 |
注意:链接中的https://ghproxy.com/ 为使用代理下载github代码。
下面的操作是基于galactic
代码下载
1 | #安装git和编译工具 |
注意:链接中的https://ghproxy.com/ 为使用代理下载github代码。
Costmap_2d 的插件都是继承于CostmapLayer。具体的关系如下图所示:
StaticLayer内主要是通过接收map_server发布的地图话题来加载静态地图的。所以StaticLayer内是可以在线更改静态地图的。
ObservationBuffer 是一个障碍物观察数据的buffer。观测到的障碍物数据都将转成sensor_msgs::msg::PointCloud2格式,然后存储到ObservationBuffer 中。
在ObservationBuffer 里存储的历史障碍物数据可以根据想保持的时间来清空。期望保持的时间主要由变量observation_keep_time_来决定。如果设置成rclcpp::Duration(0.0s)则表示每次都只存储最新的,历史障碍物数据都会被清掉。
看到这里,有同学可能会想,既然可以以时间为依据来清除障碍物,是不是也可以以其他条件来清除障碍物呢?答案肯定是可以的。这个就需要根据应用场景来选择了。比如:使用机器人的移动距离来作为判断条件。当观测数据时的机器人位置与现在机器人的位置超过多远就把该数据清掉。
下面的操作是基于ROS2 galactic
安装git,编译工具和下载源代码
1 | sudo apt-get install git python3-vcstool build-essential python3-colcon-common-extensions |
注意:链接中的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 | ros2 run <package_name> <executable_name> --ros-args --params-file <file_name> |
示例:
1 | ros2 run turtlesim turtlesim_node --ros-args --params-file ./turtlesim.yaml |
本文介绍ROS2中话题和服务的内容。并配合示例代码来实践以便加深理解。
安装相应的工具:
colcon 编译工具安装
1 | sudo apt install python3-colcon-common-extensions git |
设置colcon_cd,方便用colcon_cd 包名 快速打开到包的目录。需要在工作空间目录下使用,其他路径下使用会出现卡住的情况。
1 | echo "source /usr/share/colcon_cd/function/colcon_cd.sh" >> ~/.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翻译过来是代价地图的意思。由SLAM算法生成栅格地图。我们为栅格地图中的每一个栅格分配一个代价值,这样就形成了costmap。路径规划算法则可以在具有代价的栅格地图上生成路径。规划路径的生成则是强依赖于代价值。为了生成合适的路径,我们需要为每个栅格分配合适的代价值。最开始想到的是在单层的costmap中更新每个栅格的代价,然后直接给路径规划算法。但这样会引起诸多问题。比如因为所有的数据都在同一个costmap中更新,任何一个数据的变动都需要拿到之前其他的数据重新一起计算代价值。比如数据更新的地图范围也不好确定。比如当数据类型多了之后,数据整合的顺序不好控制。
后来想到将单层的costmap分成多层是个好办法。如上图所示,一层costmap只用同一种数据来更新。比如最底层的static map就是SLAM算法生成的静态地图。使用静态地图数据生成一层costmap。Obstacles 层则是由传感器数据更新的costmap层。甚至可以根据某些特殊目的自定义一个costmap层,使生成的路径规避某些区域。这在单层的costmap算法中是很难实现的。最后将所有的costmap层按特定的顺序组合起来形成了layered_costmap。可以看到这是一种更为灵活,扩展性也更强的方法。
对于Docker,我只想说早用早享受~
1 | # step 1: 安装必要的一些系统工具 |
安装vcs
1 | sudo apt-get install python3-vcstool |
下载代码
1 | #在ros2_ws目录下运行,代码会存在src目录下(以ros2仓库作为示例) |
更新已经下载的代码
1 | #在ros2_ws目录下运行 |
导出当前src目录下的git仓库信息
1 | vcs export src >> tmp.repos |

2006 年,无比好奇的一群人走在一起,组建了一个机器人研究实验室:柳树车库(Willow Garage)
2010年5月26日,人类历史上第一个机器人毕业典礼在硅谷这条蜿蜒的柳树街68号的小路旁,临时搭建的一座帐篷中举办。

四年思考的三个问题:
第一:为什么人类需要机器人?
斯科特·哈森的答案是:机器人可以帮助我们提高生产和工作效率。机器人已经在工厂里证明可以大幅度的提供工业的生产效率,在日常生活中,人类也需要机器人提高工作效率和生活质量。而且需要大量的机器人。
第二:为什么我们至今还没有好的机器人?
斯科特·哈森答案是:过去的经验告诉我们,造一个机器人非常困难,资本对机器人方向的关注和投入也很少。投资很少是因为市场很小,市场很小是因为机器人能做的事情很有限。没有市场,就没有投资,没有投资就没有人造机器人,没有人造机器人,就没有机器人。所以我们先从造机器人开始。
第三:如何实现人类拥有机器人的梦想?
斯科特·哈森答案是:我们正在做这件事,但是我们自己无法实现这个梦想,我们通过构建一个社群,让工程师,研究人员,工业企业参与进来,联合起来,一起来做 。希望有生之年能实现这个梦想,一个人人拥有机器人的梦想。