系列文章首发在头条"DG数据圈",欢迎关注。「ROS2 foxy」 机器人操作系统实战系列 - 文章汇总
以下是相关实验的小结。
机器人是一个系统工程,它涉及机械、电子、控制、通信、软件等诸多学科。ROS(Robot Operating System)是一个适用于机器人编程的框架,这个框架把原本松散的零部件耦合在了一起,为他们提供了通信架构。
ROS虽然叫做机器人操作系统,但并非Windows、Linux、Mac那样通常意义的操作系统,它由很多免费的软件组成,连接了操作系统和你开发的ROS应用程序,同时也实现了部分传统操作系统的功能,可以把它理解为一个中间件。底层相关的实现包括硬件抽象、竞争管理、进程管理。上层实现则比如异步调用,同步调用,数据中央数据库,机器人设置系统等。
在ROS运行时环境上,机器人的感知、决策、控制算法可以更好的组织和运行。ROS有版本1和版本2, 即ROS, ROS2. ROS2 Foxy Fitzroy可以在不同的操作系统中安装和运行,如Windows, Linux或 Mac。ROS除了可以在电脑操作系统上直接运行,也可以在虚拟机或Docker中运行。
最初Willow Garage开发他的机器人Roboter PR2时,是为了设计一个在已知环境中具有自主导航功能的人形机器人。不过在开发初期,他就将ROS往通用和可定制软件的方向设计,以便以后集成到不同机器人中,能方便改进或修改。如今,ROS 不仅用于 PR2 和类似的机器人,而且还用于各种尺寸的移动机器人、人形机器人、工业机械臂、户外陆地车辆和飞行器等。
ROS2由Robotik社区合作开发,主要对以下几个领域进行了改进:
- 机器人团队合作
- 小型电子卡上搭载的软件
- 实时系统
- 不稳定的网络
- 生产环境
如果想了解机器人操作系统(ROS), 除了看视频和文章,最吸引人的还是让这个系统在电脑上跑起来,然后试用一些它的功能。熟悉后,在它的基础上,就可以试练更多的硬核知识,比如物联网,人工智能,机器人动力学等。
虽然ROS官方说其foxy版本支持三大操作系统,windows, linux和OS X, 在试过Ubuntu及Mac Pro上的安装后,终于找到一种可以顺利安装的方法。
简短的说就是,通过按照ROS提供的debian安装手册,在ubuntu 20系统上,可以顺利安装ROS2 foxy。
安装好后做的第一个测试是关于消息传递,首先是运行ROS2自带的C 程序,它会一直发布一些消息。然后在另一个terminal上运行ROS2自带的python程序,用于监听这些消息。
安装步骤基本上就是照着官网给的debian安装手册做, 运行过程中注意拷贝的口令都被执行了:
代码语言:javascript复制locale
sudo apt update && sudo apt install locales
sudo locale-gen en_US en_US.UTF-8
sudo update-locale LC_ALL=en_US.UTF-8 LANG=en_US.UTF-8
export LANG=en_US.UTF-8
locale
sudo apt update && sudo apt install curl gnupg2 lsb-release
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/share/keyrings/ros-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-keyring.gpg] http://packages.ros.org/ros2/ubuntu $(source /etc/os-release && echo $UBUNTU_CODENAME) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
sudo apt update
sudo apt install ros-foxy-desktop
sudo apt install ros-foxy-ros-base
source /opt/ros/foxy/setup.bash
#open in first terminal
source /opt/ros/foxy/setup.bash
ros2 run demo_nodes_cpp talker
#open in second terminal
source /opt/ros/foxy/setup.bash
ros2 run demo_nodes_py listener
注:ROS提供在ubuntu及Mac上安装ROS2的手册,但用那个安装手册无法顺利安装ROS2,尝试过编译代码以及直接安装, 均告失败。不过,按照ROS提供的debian安装手册,在ubuntu系统上,倒可以顺利安装ROS2 foxy。此外,也可以试试直接用docker运行ROS2 foxy, 也许哪天可以试试。
接下来我们对它的运行环境再做一些配置,方便以后的实验。
代码语言:javascript复制echo "source /opt/ros/foxy/setup.bash" >> ~/.bashrc
代码语言:javascript复制printenv | grep -i ROS
代码语言:javascript复制echo "export ROS_DOMAIN_ID=0" >> ~/.bashrc
注:
ROS2安装分两种,要么编译源代码安装,要么直接使用安装包安装。我们是选择的debian安装包安装的。本节使用的setup.bash路径也是默认的。如果是通过编译源代码安装,这个路径在安装时可以自定义,设置时就得选择相应的路径。
代码 "echo ..."运行后,只是将该行代码写入.bashrc文件,并没有做其他操作。该代码是利用source口令来执行setup.bash,设置环境。.bashrc会被运行,当新的terminal被打开时。所以运行printenv代码时,需要开启一个新的terminal。
优点是以后再运行ROS2自带的口令,就不需要每次运行source那段口令。printenv运行后,它会输出类似这样的信息:
代码语言:javascript复制ROS_VERSION=2
ROS_PYTHON_VERSION=3
AMENT_PREFIX_PATH=/opt/ros/foxy
PYTHONPATH=/opt/ros/foxy/lib/python3.8/site-packages
LD_LIBRARY_PATH=/opt/ros/foxy/opt/yaml_cpp_vendor/lib:/opt/ros/foxy/opt/rviz_ogre_vendor/lib:/opt/ros/foxy/lib/x86_64-linux-gnu:/opt/ros/foxy/lib
ROS_LOCALHOST_ONLY=0
PATH=/opt/ros/foxy/bin:......
ROS_DISTRO=foxy
ROS_DOMAIN_ID的值需要在0到232之间。DDS(数据分发服务)是一个开放标准的实时系统连接框架,它使分布式系统能够作为一个集成的整体安全运行。ROS2基于 DDS,可轻松实现分布式机器人系统的 3D 可视化,ROS_DOMAIN_ID在DDS中会被使用到。
现在ROS2的运行环境就准备好了。
下一次我们将介绍在ROS2上控制物体在图形界面上的移动。