1. ROS环境搭建与工作空间配置
任务目标
在Ubuntu 20.04上安装ROS Noetic,创建catkin工作空间,并通过运行roscore和发布/订阅测试验证ROS核心功能正常。
环境准备
需要一台已安装Ubuntu 20.04的计算机(物理机或虚拟机均可),确保能够访问互联网。ROS Noetic仅官方支持Ubuntu 20.04,其他版本请使用对应发行版。
安装ROS Noetic
依次执行以下命令完成安装(建议逐条复制执行,避免因网络问题中断):
# 1. 配置软件源
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
# 2. 添加密钥
sudo apt install curl -y
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -
# 3. 更新软件源
sudo apt update
# 4. 安装完整版ROS Noetic(包含rviz、gazebo等常用工具)
sudo apt install ros-noetic-desktop-full -y
# 5. 初始化rosdep
sudo rosdep init
rosdep update
# 6. 配置环境变量
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
# 7. 安装构建依赖
sudo apt install python3-rosdep python3-rosinstall python3-rosinstall-generator python3-wstool build-essential -y
安装完成后,打开新终端,输入roscore,若能看到started core service [/rosout]相关日志,说明ROS核心已成功启动。
创建catkin工作空间
执行以下命令创建并初始化工作空间:
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
cd ~/catkin_ws
catkin_make
echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
执行catkin_make后,若输出末尾出现build和devel文件夹的创建信息且无报错,说明工作空间构建成功。
验证ROS核心功能
通过一个最小发布/订阅程序验证ROS通信正常。在工作空间src目录下创建功能包:
cd ~/catkin_ws/src
catkin_create_pkg test_comm std_msgs roscpp
cd ~/catkin_ws
编辑test_comm包中的两个源文件:
talker.cpp(发布节点):
#include "ros/ros.h"
#include "std_msgs/String.h"
#include <sstream>
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);
int count = 0;
while (ros::ok()) {
std_msgs::String msg;
std::stringstream ss;
ss << "hello world " << count;
msg.data = ss.str();
chatter_pub.publish(msg);
ros::spinOnce();
loop_rate.sleep();
++count;
}
return 0;
}
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;
}
编辑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
运行与验证
打开三个终端,分别执行:
# 终端1:启动ROS核心
roscore
# 终端2:启动发布节点
source ~/catkin_ws/devel/setup.bash
rosrun test_comm talker
# 终端3:启动订阅节点
source ~/catkin_ws/devel/setup.bash
rosrun test_comm listener
通过条件:终端3持续输出[ INFO] I heard: [hello world N](N为递增数字),且终端2无报错,说明ROS核心、工作空间和节点通信均正常。
常见问题
- sudo rosdep init报错:多为网络问题,可尝试
sudo apt update后重试,或配置代理。 - catkin_make找不到命令:确认已安装
ros-noetic-desktop-full,并执行过source /opt/ros/noetic/setup.bash。 - rosrun找不到包:确认已在当前终端执行
source ~/catkin_ws/devel/setup.bash,且包名拼写正确。