ROS(Robot Operating System,机器人操作系统)是一个用于机器人开发的跨平台、模块化、可扩展的软件框架。它为机器人开发提供了丰富的工具和库,使得开发者可以更加专注于机器人算法的实现,而无需过多关注底层硬件的细节。本文将带你从基础配置到实战演练,轻松入门ROS节点搭建。
一、ROS简介
ROS是一个由一系列库、工具和文档组成的框架,它允许开发者创建、测试和部署机器人软件。ROS的核心是节点(Node),节点是ROS中的最小执行单元,它负责处理数据、发送和接收消息等。
二、基础配置
2.1 安装ROS
首先,你需要安装ROS。以下是不同操作系统下的安装步骤:
2.1.1 Ubuntu
- 打开终端,输入以下命令安装ROS依赖:
sudo apt-get update
sudo apt-get install -y python-rosdep python-rosinstall-generator python-wstool python-rosinstall
- 使用以下命令安装ROS桌面版:
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -cs) main" > /etc/apt/sources.list.d/ros-latest.list'
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
sudo apt-get update
sudo apt-get install -y ros-$ROS_DISTRO-desktop-full
- 初始化rosdep:
sudo rosdep init
rosdep update
- 设置环境变量:
echo "source /opt/ros/$ROS_DISTRO/setup.bash" >> ~/.bashrc
source ~/.bashrc
2.1.2 macOS
- 安装Homebrew:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
- 安装Xcode Command Line Tools:
xcode-select --install
- 安装CMake:
brew install cmake
- 安装Python依赖:
pip install -r requirements.txt
- 下载ROS安装脚本:
curl -LO https://raw.githubusercontent.com/ros/rosdistro/master/rosinstall
- 使用以下命令安装ROS桌面版:
sudo xcode-select --install
sudo xcodebuild -license accept
sudo xcodebuild -run-script /path/to/install_ros.sh
2.2 配置ROS环境
安装ROS后,你需要配置ROS环境。以下是配置步骤:
- 打开终端,输入以下命令设置环境变量:
echo "source /opt/ros/$ROS_DISTRO/setup.bash" >> ~/.bash_profile
source ~/.bash_profile
- 验证ROS环境是否配置成功:
roscore
如果终端中显示“ROS master running on http://localhost:11311”,则表示ROS环境配置成功。
三、创建ROS工作空间
工作空间是ROS项目的基本目录结构,用于存放源代码、构建文件和运行文件等。以下是创建工作空间的步骤:
- 打开终端,输入以下命令创建工作空间:
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make
- 设置环境变量:
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bash_profile
source ~/.bash_profile
四、实战演练
4.1 创建节点
在ROS中,节点是执行任务的基本单元。以下是创建一个简单的节点示例:
在工作空间src目录下创建一个名为
my_node的文件夹。在
my_node文件夹下创建一个名为src的文件夹。在
src文件夹下创建一个名为my_node.py的Python文件,并添加以下代码:
#!/usr/bin/env python
import rospy
from std_msgs.msg import String
def talker():
pub = rospy.Publisher('chatter', String, queue_size=10)
rospy.init_node('my_node', anonymous=True)
rate = rospy.Rate(10) # 10hz
while not rospy.is_shutdown():
hello_str = "hello world %s" % rospy.get_time()
rospy.loginfo(hello_str)
pub.publish(hello_str)
rate.sleep()
if __name__ == '__main__':
try:
talker()
except rospy.ROSInterruptException:
pass
- 在
my_node文件夹下创建一个名为CMakeLists.txt的文件,并添加以下内容:
cmake_minimum_required(VERSION 3.0.2)
project(my_node)
find_package(catkin REQUIRED COMPONENTS
rospy
std_msgs
)
catkin_package(
INCLUDE_DIRS include
LIBRARIES my_node
CATKIN_DEPENDS rospy std_msgs
)
add_executable(my_node src/my_node.py)
target_link_libraries(my_node ${catkin_LIBRARIES})
- 在
my_node文件夹下创建一个名为package.xml的文件,并添加以下内容:
<?xml version="1.0"?>
<package format="2">
<name>my_node</name>
<version>0.0.0</version>
<description>A ROS node that publishes messages</description>
<buildtool_depend>catkin</buildtool_depend>
<build_depend>rospy</build_depend>
<build_depend>std_msgs</build_depend>
<run_depend>rospy</run_depend>
<run_depend>std_msgs</run_depend>
</package>
- 在工作空间根目录下,使用以下命令构建项目:
cd ~/catkin_ws/
catkin_make
- 在工作空间根目录下,使用以下命令运行节点:
source devel/setup.bash
rosrun my_node my_node
此时,你可以在另一个终端中运行以下命令查看节点发布的信息:
rostopic echo chatter
4.2 创建订阅者
订阅者用于接收节点发布的信息。以下是创建一个简单的订阅者示例:
在工作空间src目录下创建一个名为
my_subscriber的文件夹。在
my_subscriber文件夹下创建一个名为src的文件夹。在
src文件夹下创建一个名为my_subscriber.py的Python文件,并添加以下代码:
#!/usr/bin/env python
import rospy
from std_msgs.msg import String
def callback(data):
rospy.loginfo(rospy.get_caller_id() + " I heard %s", data.data)
def listener():
rospy.init_node('my_subscriber', anonymous=True)
rospy.Subscriber('chatter', String, callback)
rospy.spin()
if __name__ == '__main__':
listener()
- 在
my_subscriber文件夹下创建一个名为CMakeLists.txt的文件,并添加以下内容:
cmake_minimum_required(VERSION 3.0.2)
project(my_subscriber)
find_package(catkin REQUIRED COMPONENTS
rospy
std_msgs
)
catkin_package(
INCLUDE_DIRS include
LIBRARIES my_subscriber
CATKIN_DEPENDS rospy std_msgs
)
add_executable(my_subscriber src/my_subscriber.py)
target_link_libraries(my_subscriber ${catkin_LIBRARIES})
- 在
my_subscriber文件夹下创建一个名为package.xml的文件,并添加以下内容:
<?xml version="1.0"?>
<package format="2">
<name>my_subscriber</name>
<version>0.0.0</version>
<description>A ROS subscriber that listens to messages</description>
<buildtool_depend>catkin</buildtool_depend>
<build_depend>rospy</build_depend>
<build_depend>std_msgs</build_depend>
<run_depend>rospy</run_depend>
<run_depend>std_msgs</run_depend>
</package>
- 在工作空间根目录下,使用以下命令构建项目:
cd ~/catkin_ws/
catkin_make
- 在工作空间根目录下,使用以下命令运行订阅者:
source devel/setup.bash
rosrun my_subscriber my_subscriber
此时,你可以在另一个终端中运行以下命令发布信息:
rosrun my_node my_node
订阅者将显示发布的信息。
五、总结
通过本文的介绍,相信你已经对ROS节点搭建有了初步的了解。ROS是一个功能强大的机器人开发框架,它可以帮助你轻松地搭建机器人系统。希望本文能帮助你快速入门ROS节点搭建,为你的机器人开发之路奠定基础。