机器人操作系统(ROS)编程开发入门指南
一、ROS基础概念
1.1 什么是ROS
ROS(Robot Operating System)是一个开源的机器人元操作系统,提供了一系列工具、库和约定,用于简化复杂机器人应用的开发。
1.2 ROS核心概念
- 节点(Node): 执行特定任务的进程
- 主题(Topic): 节点间通过消息进行异步通信的通道
- 服务(Service): 节点间通过请求-响应模式进行同步通信
- 消息(Message): 节点间通信的数据结构
- 包(Package): ROS软件的基本组织单元
- 工作空间(Workspace): 开发ROS项目的目录结构
二、环境搭建
2.1 安装ROS
推荐使用Ubuntu系统,以ROS Noetic为例:
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-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
sudo apt update
sudo apt install ros-noetic-desktop-full
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
2.2 初始化工作空间
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/
catkin_make
source devel/setup.bash
三、个ROS程序
3.1 创建ROS包
cd ~/catkin_ws/src
catkin_create_pkg beginner_tutorials std_msgs rospy roscpp
3.2 编写发布者节点(publisher)
在src
目录下创建talker.cpp
:
#include "ros/ros.h"
#include "std_msgs/String.h"
int main(int argc, char **argv) {
ros::init(argc, argv, "talker");
ros::NodeHandle n;
ros::Publisher chatter_pub = n.advertise<std_msgs::String>("chatter", 1000);
ros::Rate loop_rate(10);
while (ros::ok()) {
std_msgs::String msg;
msg.data = "hello world";
chatter_pub.publish(msg);
ros::spinOnce();
loop_rate.sleep();
}
return 0;
}
3.3 编写订阅者节点(subscriber)
在src
目录下创建listener.cpp
:
#include "ros/ros.h"
#include "std_msgs/String.h"
void chatterCallback(const std_msgs::String::ConstPtr& msg) {
ROS_INFO("I heard: [%s]", msg->data.c_str());
}
int main(int argc, char **argv) {
ros::init(argc, argv, "listener");
ros::NodeHandle n;
ros::Subscriber sub = n.subscribe("chatter", 1000, chatterCallback);
ros::spin();
return 0;
}
3.4 编译并运行
修改CMakeLists.txt
,添加:
add_executable(talker src/talker.cpp)
target_link_libraries(talker ${catkin_LIBRARIES})
add_executable(listener src/listener.cpp)
target_link_libraries(listener ${catkin_LIBRARIES})
编译并运行:
cd ~/catkin_ws
catkin_make
roscore & # 启动ROS主节点
rosrun beginner_tutorials talker # 新终端
rosrun beginner_tutorials listener # 另一个新终端
四、常用工具
4.1 命令行工具
roscore
: 启动ROS主节点rosrun
: 运行指定包中的节点rosnode
: 查看节点信息rostopic
: 查看和操作主题rosservice
: 查看和操作服务rosparam
: 管理参数服务器
4.2 可视化工具
rqt_graph
: 显示节点和主题的图形化关系rviz
: 3D可视化工具rqt_console
: 查看和过滤日志消息
五、进阶学习
5.1 常用功能包
tf
: 坐标变换系统move_base
: 导航功能包gmapping
: SLAM建图amcl
: 自适应蒙特卡洛定位turtlebot3
: 常用机器人模型
5.2 学习资源
- 官方文档: http://wiki.ros.org/
- ROS Answers: https://answers.ros.org/
- ROS Tutorials: http://wiki.ros.org/ROS/Tutorials
- GitHub上的开源项目
六、实践
- 遵循ROS命名规范
- 合理使用命名空间
- 编写清晰的文档和注释
- 使用版本控制(Git)
- 编写单元测试
- 利用现有的ROS包避免重复造轮子
通过以上步骤,您已经完成了ROS的基本入门。接下来可以通过实际项目来巩固和扩展ROS知识。