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,且包名拼写正确。