9、教程-8 使用ROS
本教程介绍如何使用webots附带的webots_ros包中的节点。
这些例子在Linux上用ROS Noetic Ninjemys进行了测试。如果您使用不同的平台或古老的ROS分发,则不保证它们会起作用。
检查Webots ROS API的兼容性
Webots包包含使用最新ROS发行版构建的预编译ROS API:
Ubuntu 20.04 tarball包与ROS Noetic兼容。如果您计划使用不同的ROS发行版,建议安装tarball包并重新编译ROS API:
export ROS_DISTRO=noetic # or ROS_DISTRO=melodic, etc. cd ${WEBOTS_HOME}/projects/default/controllers/ros make
安装ROS以及Webots_ros包
为了使用这些节点,您首先需要安装ROS框架。要在Ubuntu上安装最新版本的ROS,请使用以下命令:
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list' sudo apt install curl curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add - sudo apt-get update sudo apt-get install ros-noetic-desktop-full ros-noetic-moveit # takes time, get a coffee :) sudo apt-get install python3-rosdep sudo rosdep init rosdep update
欲了解更多信息或在其他平台上安装,请阅读http://wiki.ros.org/ROS/Installation.除非您需要其他应用程序的旧版本,否则您应该选择最新的发行版(NoeticNinjemys)。
要安装最新版本的webots_ros软件包,请使用以下命令:
sudo apt-get install ros-noetic-webots-ros
要从源代码安装软件包,请阅读webots_ros-from sources。
如果您以前从未使用过ROS框架,强烈建议您遵循以下教程(初级):http://wiki.ros.org/ROS/Tutorials.这些教程还将帮助您设置ROS环境并初始化您的catkin工作区。最低要求是遵循这些说明(摘自ROS教程1.1.1)。
- 打开一个终端
- 使用这个来检查ROS环境是否ok,
printenv | grep ROS
source /opt/ros/noetic/setup.bash
- Create a
catkin_ws
workspace for ROS:- Create some folders:
mkdir -p ~/catkin_ws/src
- Go back in the main folder:
cd ~/catkin_ws/
- Generate files by compilation:
catkin_make
- Source again the new files:
source devel/setup.bash
- Create some folders:
- To make sure your workspace is properly set-up by the setup script, make sure
ROS_PACKAGE_PATH
environment variable includes the directory you are in. Theecho $ROS_PACKAGE_PATH
command should return/home/youruser/catkin_ws/src:/opt/ros/noetic/share
. - The last step is to set the
WEBOTS_HOME
environment variable:export WEBOTS_HOME=/usr/local/webots
. If you installed Webots in a different place, adapt the variable. This line can be added to your.bashrc
file.
运行节点
您可以使用以下命令(例如e_puck_line)使用ROS启动任何模拟:
source /opt/ros/noetic/setup.bash
roslaunch webots_ros e_puck_line.launch
此启动文件将启动Webots(应设置Webots_HOME环境变量)并启动相应的节点。
Webots的随机数生成器的种子在模拟开始时初始化,而不是在ROS节点连接时初始化。必须运行Webots才能连接ROS节点。然而,我们不能保证在ROS节点连接之前它会运行多久。因此,由于ROS节点连接时的噪声略有不同,传感器测量值和电机命令在每次运行时会略有不同。这可能会对机器人的行为产生影响,从而使这种模拟无法完全再现。您可以使用--synchronize参数来确保在ROS节点连接之前不会运行Webots。这有助于使基于ROS的模拟具有可重复性。
如果您想为ROS主机、Webots模拟和/或节点使用不同的计算机,则必须能够通过SSH以两种方式连接到它们中的每一个。这些计算机的主机名和IP地址应列在每台计算机的已知主机列表中,ROS_MASTER_URI变量应相应调整。
创建一个新节点
这些示例只显示了ROS和Webot接口的几种可能性,但您可以构建自己的节点来连接Webot。这些节点的源代码可以在webots_ros包的存储库中找到。
robot_information_parser节点是最基本的节点,是开始构建自己的节点的良好基础。complete_test节点没有显示任何特定的应用程序,但包含了几乎详尽的Webots API函数列表。
Webots API中的所有函数都有相应的服务或主题。您可以在参考手册中找到与每个设备相关的所有服务和主题的定义。
webots_ros包
如果您运行的是最新版本的Webots,设置Webots_ros包的最简单方法是直接从包管理器安装ros-$ros_DISTRO-Webots-ros包,如上所述。但是,如果您运行的是旧版本的Webots,某些功能可能无法完全支持,或者可能会被最新的ros-$ros_DISTRO-Webots-ros包破坏。在这种情况下,可以按照ros wiki页面上的说明,从源安装较旧的webots_ros软件包版本,并在webots_ros GitHub存储库中选择与webots版本匹配的标签/版本。