实验室入门——ubuntu20.04安装ros和ros2全流程


前言

今年实验室招新第一批主要是社团成员,每一名同学都需要经历ubuntu双系统的安装的ros基础的学习,ROS(Robot Operating System) 作为常用的机器人控制软件和通信工具在实验室参加的竞赛中是必不可少的。随着版本和技术更新的需要,实验室逐渐从ros转向ros2系统。学长在这篇中将详细介绍在 Ubuntu20.04 系统上安装 ROS Noetic(ROS1长期支持版)ROS2 Foxy(ROS2长期支持版) 的全流程,涵盖环境配置、安装步骤、验证测试及常见问题解决,助你快速搭建机器人开发环境。


一、前置准备:系统与环境检查

1. 系统要求

  • 操作系统:Ubuntu20.04 LTS(推荐,ROS Noetic和ROS2 Foxy均官方支持)。
  • 硬件:至少4GB内存(推荐8GB+),25GB可用磁盘空间(ROS依赖较多)。
  • 网络:稳定联网(安装过程需下载约3-5GB数据)。

2. 系统初始化

安装前完成以下操作:

# 更新系统软件包,在系统初配置中已经完成
sudo apt update && sudo apt upgrade -y

# 安装必要工具,视觉选手为了避免后续的重复性操作可以看视觉学习中的相关教程,而不是简单通过apt进行安装
sudo apt install -y git build-essential cmake

二、安装ROS Noetic(ROS1长期支持版)

ROS Noetic是ROS1的最后一个长期支持版本,适配Ubuntu20.04,适合传统机器人算法开发(如导航、SLAM)。


## 1. 配置ROS软件源  
```bash
# 添加ROS官方源到sources.list,我们选择使用中科大源
#sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
sudo sh -c 'echo "deb http://mirrors.ustc.edu.cn/ros/ubuntu focal main" > /etc/apt/sources.list.d/ros-latest.list'

# 导入ROS公钥(验证软件包完整性)觉得慢的可以参考视觉学习专栏进行加速
curl -s https://raw.githubusercontent.com/ros/rosdistro/master/ros.asc | sudo apt-key add -

#或者换源

curl -s https://gitee.com/ohhuo/rosdistro/raw/master/ros.asc | sudo apt-key add -
#添加完下载链接后需要进行apt更新
sudo apt update

2. 安装ROS Noetic

推荐安装桌面完整版其包含的可视化工具如RViz、RQt等,对于学习导航的同学来说是必不可少的:

sudo apt install -y ros-noetic-desktop-full

3. 初始化rosdep(依赖管理工具)

rosdep用于自动安装ROS包的系统依赖:

sudo rosdep init
#如果提示找不到rosdep命令,需要安装python-rosdep
#sudo apt install python3-rosdep
rosdep update

在这里插入图片描述更新时发现,使用的是国外服务器可能导致time out
这里我就不给解决方案了,大家直接参考其他博主的解决思路
ROS学习——rosdep update 超时解决方法

在这里插入图片描述

4. 配置环境变量

为了避免每次启动终端都需要加载ROS环境变量,我们将配置命令写进.bashrc设置为永久生效:


# 永久生效(添加到~/.bashrc)
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc

在这里插入图片描述

5.检验安装

让我们启动ROS1核心节点(roscore),运行经典乌龟仿真:

# 终端1:启动roscore
roscore

# 终端2:运行乌龟仿真节点(另外打开一个终端或者使用超级终端进行分割)
rosrun turtlesim turtlesim_node

# 终端3:控制乌龟移动(同上)
rosrun turtlesim turtle_teleop_key

在这里插入图片描述

若看到乌龟窗口且可通过键盘控制,ROS1安装成功!


三、安装ROS2 Foxy(ROS2长期支持版)

ROS2基于DDS(数据分发服务),支持实时性、分布式通信,更适合工业级机器人开发。Ubuntu20.04官方支持ROS2 Foxy。

1. 配置ROS2软件源

# 添加ROS2官方源
#sudo sh -c 'echo "deb [arch=$(dpkg --print-architecture)] https://packages.ros.org/ros2/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros2-latest.list'
#中科大源
sudo sh -c 'echo "deb https://mirrors.ustc.edu.cn/ros2/ubuntu/ focal main" > /etc/apt/sources.list.d/ros2-latest.list'



# 导入ROS2公钥(同ROS1使用相同密钥)
curl -s https://gitee.com/ohhuo/rosdistro/raw/master/ros.asc | sudo apt-key add -

2. 安装ROS2 Foxy

推荐安装桌面版(含示例和工具):

 #桌面版安装,学长的电脑不知道怎么了,只能从官网源才能下载,对比其他博主的方法发现没啥区别,就很奇怪~结果发现似乎是学校网的问题,额彻底无语了。所以大家如果出现下载不了的问题可以试试用热点
sudo apt install -y ros-foxy-desktop

3. 配置环境变量

同样需加载ROS2环境变量:

# 临时加载(当前终端有效)
source /opt/ros/foxy/setup.bash

# 永久生效(添加到~/.bashrc)
echo "source /opt/ros/foxy/setup.bash" >> ~/.bashrc
source ~/.bashrc

4. 安装ROS1-ROS2桥接工具(可选)

若需ROS1和ROS2节点通信,安装桥接工具:

sudo apt install -y ros-foxy-ros1-bridge

5. 测试ROS2 Foxy

启动ROS2核心节点(ros2 run),运行发布-订阅示例:

# 终端1:启动talker(发布消息)
ros2 run demo_nodes_cpp talker

# 终端2:启动listener(订阅消息)
ros2 run demo_nodes_cpp listener

在这里插入图片描述

若终端2输出“Hello World”日志,ROS2安装成功!

6. 测试ROS1-ROS2桥接(可选)

通过桥接工具让ROS1乌龟和ROS2节点通信:

# 终端1:启动ROS1 roscore
roscore

# 终端2:打开ros1小乌龟
source /opt/ros/noetic/setup.bash
rosrun turtlesim turtlesim_node

# 终端3(ROS2):开启与ros1桥接
#先声明ros1
source /opt/ros/noetic/setup.bash 
#再声明ros2
source /opt/ros/foxy/setup.bash 
#进行桥接
ros2 run ros1_bridge dynamic_bridge

#终端4 ros2开启键盘控制
source /opt/ros/foxy/setup.bash 
ros2 run turtlesim turtle_teleop_key

若ROS1乌龟随ROS2控制指令移动,桥接成功!
在这里插入图片描述


四、ROS与ROS2共存建议

  • 环境隔离:通过source不同setup.bash切换版本(如source /opt/ros/noetic/setup.bashsource /opt/ros/foxy/setup.bash)。
  • 工作空间管理:ROS1工作空间(~/catkin_ws)和ROS2工作空间(~/ros2_ws)分开存放。
  • 工具兼容:VS Code、CLion等IDE可同时配置ROS和ROS2插件。

总结

通过本文,你已完成Ubuntu20.04下ROS Noetic和ROS2 Foxy的安装,并验证了基础功能。下一步可:

  1. 学习ROS1的catkin构建系统和ROS2的colcon构建系统。
  2. 尝试编写第一个ROS1/ROS2节点(如订阅摄像头数据或控制机械臂)。
  3. 探索SLAM(如Cartographer)或导航(如MoveIt2)等机器人核心功能。

遇到问题时,善用官方文档(http://wiki.ros.org/、https://docs.ros.org/)和社区论坛(如ROS Answers),祝你实验室之旅顺利! 🚀

<think>我们正在处理一个关于在Ubuntu 20.04下使用ROS控制UR(Universal Robots)真实机械臂,并通过C++编程的问题。根据引用内容,我们可以整合相关信息。 首先,我们需要明确步骤: 1. 安装ROS(对于Ubuntu 20.04,通常使用ROS Noetic或ROS2 Foxy,但根据引用[3]提到的是ROS2 Humble,注意Humble是针对Ubuntu 22.04的。而用户要求Ubuntu 20.04,所以应选择与20.04匹配的ROS版本。引用[1]中提到了ROS2 Humble,但该版本要求Ubuntu 22.04。因此,对于Ubuntu 20.04,我们可以选择ROS2 Foxy或ROS1 Noetic。由于用户没有明确要求ROS1还是ROS2,但问题中提到了C++编程,我们需注意版本选择。引用[1]中提到了在Ubuntu20.04下配置franka_ros2,但franka_ros2是用于Franka机械臂的,而用户问的是UR机械臂。因此,我们需要转向UR机械臂的官方支持。 对于UR机械臂,官方提供了ROS驱动,支持ROS1ROS2。在Ubuntu 20.04上,我们可以选择: - ROS1 Noetic(官方支持到2025年) - ROS2 Foxy(官方支持到2023年5月,但用户仍可使用) 由于用户要求C++编程,我们将以ROS1 Noetic为例,因为目前UR的ROS驱动对ROS1的支持更成熟。当然,如果用户倾向于ROS2,也可以选择Foxy,但需要注意Foxy已经EOL(停止支持)。因此,这里我们以ROS1 Noetic为例。 步骤: 1. 安装Ubuntu 20.042. 安装ROS Noetic:按照官方指南(http://wiki.ros.org/noetic/Installation/Ubuntu)进行。 3. 安装UR机械臂的ROS驱动。 UR官方提供了两个主要的ROS包: - universal_robots: 包含UR机器人的ROS驱动MoveIt配置。 - ur_robot_driver: 用于真实机器人的驱动(替代之前的ur_modern_driver)。 具体步骤: ### 1. 安装ROS Noetic 按照官方步骤: ```bash 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 update sudo apt install ros-noetic-desktop-full ``` 然后初始化rosdep: ```bash sudo rosdep init rosdep update ``` ### 2. 创建工作空间并安装UR驱动 ```bash mkdir -p ~/ur_ws/src cd ~/ur_ws source /opt/ros/noetic/setup.bash ``` 克隆仓库(注意:使用ur_robot_driver): ```bash cd src git clone https://github.com/UniversalRobots/Universal_Robots_ROS_Driver.git git clone -b calibration_devel https://github.com/fmauch/universal_robot.git ``` 注意:universal_robot仓库需要特定的分支,通常使用noetic-devel分支。但上述命令中使用了calibration_devel,这是不正确的。应该使用官方的noetic-devel分支。所以更正为: ```bash git clone -b noetic-devel https://github.com/ros-industrial/universal_robot.git ``` 然后安装依赖: ```bash cd ~/ur_ws rosdep install --from-paths src --ignore-src -y ``` 编译: ```bash catkin_make source devel/setup.bash ``` ### 3. 连接真实UR机械臂 需要将机器人的IP地址设置到与电脑同一网段,然后通过ROS启动驱动。 首先,在机器人示教器上设置机器人的IP地址(例如192.168.0.1),然后设置电脑的IP地址为同一子网(例如192.168.0.2)。 然后,启动驱动: ```bash roslaunch ur_robot_driver ur5_bringup.launch robot_ip:=192.168.0.1 ``` (注意:根据机器人型号选择launch文件,如ur3, ur5, ur10) ### 4. C++编程控制机械臂 我们可以使用ROS中的MoveIt!来控制UR机械臂。首先安装MoveIt: ```bash sudo apt install ros-noetic-moveit ``` 然后,在UR的驱动包中已经包含了MoveIt配置。我们可以使用以下命令启动MoveIt: ```bash roslaunch ur5_moveit_config ur5_moveit_planning_execution.launch ``` 在另一个终端启动RViz: ```bash roslaunch ur5_moveit_config moveit_rviz.launch ``` 现在,我们可以编写C++节点来控制机械臂。以下是一个简单的示例,使用MoveIt的C++ API来控制机械臂移动到预定义的位置: 首先,在工作空间的src目录下创建一个包(如果还没有): ```bash cd ~/ur_ws/src catkin_create_pkg my_ur_driver roscpp moveit_core moveit_ros_planning_interface ``` 然后,在包中创建src文件夹,并添加一个cpp文件,例如`move_ur.cpp`: ```cpp #include <moveit/move_group_interface/move_group_interface.h> #include <moveit/planning_scene_interface/planning_scene_interface.h> int main(int argc, char** argv) { ros::init(argc, argv, "move_ur"); ros::NodeHandle node_handle; ros::AsyncSpinner spinner(1); spinner.start(); moveit::planning_interface::MoveGroupInterface move_group("manipulator"); move_group.setMaxVelocityScalingFactor(0.1); // 设置最大速度比例因子 // 设置目标位置(这里以关节空间目标为例) std::vector<double> joint_target = {0.0, -1.57, 1.57, -1.57, -1.57, 0.0}; // 单位:弧度 move_group.setJointValueTarget(joint_target); // 规划并执行 moveit::planning_interface::MoveGroupInterface::Plan my_plan; bool success = (move_group.plan(my_plan) == moveit::planning_interface::MoveItErrorCode::SUCCESS); if(success) move_group.execute(my_plan); ros::shutdown(); return 0; } ``` 在CMakeLists.txt中添加可执行文件: ```cmake add_executable(move_ur src/move_ur.cpp) target_link_libraries(move_ur ${catkin_LIBRARIES}) ``` 然后编译: ```bash cd ~/ur_ws catkin_make source devel/setup.bash ``` 运行节点前,确保已经启动了机械臂驱动MoveIt节点。然后运行: ```bash rosrun my_ur_driver move_ur ``` 注意:上述代码只是一个简单示例,实际应用中需要根据具体任务进行调整。 ### 注意事项 1. 安全:在控制真实机械臂时,务必确保急停按钮可用,且机械臂周围没有障碍物。 2. 校准:UR机械臂需要先进行校准,通常通过示教器上的“校准”程序进行。 3. 网络:确保机器人与计算机之间的网络连接稳定。 以上就是在Ubuntu 20.04下使用ROS1 Noetic控制UR真实机械臂并进行C++编程的基本步骤。 §§相关问题§§ 1. 如何为UR机械臂配置ROS2驱动? 2.ROS中如何实现UR机械臂的轨迹规划? 3. UR机械臂的力控制如何在ROS中实现?</think>### Ubuntu 20.04 ROS控制UR真实机械臂的C++编程方法 #### 1. **环境配置** - **安装ROS Noetic**(Ubuntu 20.04官方支持版本): ```bash 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 update sudo apt install ros-noetic-desktop-full ``` - **初始化ROS环境**: ```bash echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc source ~/.bashrc sudo rosdep init && rosdep update ``` #### 2. **安装UR机械臂驱动** - 创建工作空间并克隆官方驱动包: ```bash mkdir -p ~/ur_ws/src && cd ~/ur_ws/src git clone -b noetic-devel https://github.com/UniversalRobots/Universal_Robots_ROS_Driver.git git clone -b calibration_devel https://github.com/fmauch/universal_robot.git ``` - 安装依赖并编译: ```bash cd ~/ur_ws rosdep install --from-paths src --ignore-src -y catkin_make source devel/setup.bash ``` #### 3. **连接真实机械臂** - **网络配置**: - 将计算机与UR机械臂控制器通过网线直连,设置计算机IP与机械臂同一网段(如机械臂IP:$192.168.0.1$,计算机IP:$192.168.0.2$)。 - **启动驱动节点**: ```bash roslaunch ur_robot_driver ur5_bringup.launch robot_ip:=192.168.0.1 ``` > **注意**:替换`ur5`为您的型号(如`ur3`/`ur10`),并确认机械臂控制器已开启[^1]。 #### 4. **C++编程控制机械臂** ##### 示例:关节空间运动控制 ```cpp #include <ros/ros.h> #include <ur_msgs/SetIO.h> #include <trajectory_msgs/JointTrajectory.h> int main(int argc, char** argv) { ros::init(argc, argv, "ur_control_node"); ros::NodeHandle nh; // 创建发布器(发布到UR的轨迹控制接口) ros::Publisher traj_pub = nh.advertise<trajectory_msgs::JointTrajectory>( "/scaled_pos_joint_traj_controller/command", 10 ); // 设置目标关节角度(单位:弧度) trajectory_msgs::JointTrajectory traj; traj.joint_names = {"shoulder_pan_joint", "shoulder_lift_joint", "elbow_joint", "wrist_1_joint", "wrist_2_joint", "wrist_3_joint"}; trajectory_msgs::JointTrajectoryPoint point; point.positions = {0.0, -1.57, 1.57, -1.57, -1.57, 0.0}; // 目标位置 point.time_from_start = ros::Duration(2.0); // 运动时间 traj.points.push_back(point); // 发布轨迹 ros::Rate rate(10); while (ros::ok()) { traj.header.stamp = ros::Time::now(); traj_pub.publish(traj); rate.sleep(); } return 0; } ``` ##### 关键功能扩展: 1. **MoveIt!集成**(高级运动规划): ```cpp #include <moveit/move_group_interface/move_group_interface.h> void moveToPose() { moveit::planning_interface::MoveGroupInterface group("manipulator"); geometry_msgs::Pose target_pose; target_pose.position.x = 0.4; target_pose.position.y = 0.2; target_pose.position.z = 0.6; group.setPoseTarget(target_pose); group.move(); // 自动规划并执行 } ``` 2. **IO控制**(夹爪/工具控制): ```cpp ros::ServiceClient io_client = nh.serviceClient<ur_msgs::SetIO>("/ur_hardware_interface/set_io"); ur_msgs::SetIO srv; srv.request.fun = 1; // 设置数字输出 srv.request.pin = 0; // 引脚号 srv.request.state = 1.0; // 高电平 io_client.call(srv); ``` #### 5. **调试与验证** - **实时监控**: ```bash rostopic echo /joint_states # 查看实时关节状态 rviz # 可视化机械臂模型 ``` - **安全建议**: - 首次运行时启用**仿真模式**(设置`headless_mode:=true`)[^2]。 - 机械臂附近放置急停开关。 #### 常见问题解决 - **驱动连接失败**:检查IP设置防火墙,确保机械臂控制器启用**外部控制**模式。 - **轨迹执行延迟**:优化网络配置,使用千兆网线并关闭无关服务。 - **MoveIt!规划失败**:调整碰撞检测参数或简化运动约束。 > **提示**:完整API文档参考[Universal Robots ROS Driver官方文档](https://github.com/UniversalRobots/Universal_Robots_ROS_Driver)。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值