Ubuntu20.04安装ROS
Qf要变强!!O_o 2024-07-09 16:37:03 阅读 80
文章目录
一、ROS的介绍二、ROS软件安装2.1 设置sources.list,添加软件包2.2 设置密钥2.3 安装2.4 设置环境变量2.5 初始化rosdep克隆rosdistro文件修改文件1:20-default.list修改文件2:gbpdistro_support.py修改文件3:rep3.py修改文件4:__init__.py
2.6 安装python-rosdep2.7 创建20-default.list文件2.8 完成初始化rosdep2.9 安装rosinstall2.10 运行ROS
三、小海龟demo四、了解ROS话题和消息的发布与获取的方式,终端命令发布话题控制海龟圆周运动。4.1 话题获取4.2 消息获取4.3 获取消息格式4.4 命令行实现控制圆周运动
五、C++编码实现小海龟圆周运动5.1 创建ROS工作空间5.2 创建ROS功能包5.3 C++代码
参考文章小结
一、ROS的介绍
ROS 是一个适用于机器人的开源的元操作系统。它提供了操作系统应有的服务,包括硬件抽象,底层设备控制,常用函数的实现,进程间消息传递,以及包管理。它也提供用于获取、编译、编写、和跨计算机运行代码所需的工具和库函数。在某些方面ROS相当于一种“机器人框架(robot frameworks)”。
ROS 运行时的“蓝图”是一种基于ROS通信基础结构的松耦合点对点进程网络。ROS实现了几种不同的通信方式,包括基于同步RPC样式通信的服务(services)机制,基于异步流媒体数据的话题(topics)机制以及用于数据存储的参数服务器(Parameter Server)。ROS并不是一个实时的框架,但ROS可以嵌入实时程序。
二、ROS软件安装
参考网站:http://wiki.ros.org/cn/Installation/Ubuntu
2.1 设置sources.list,添加软件包
<code>sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
notice
Linux 中“>”和“>>”的区别
两个运算符都是输出方向运算符。主要区别如下:
“>”:覆盖现有文件,或者如果目录中不存在所提及名称的文件,则创建一个文件。
“>>”:追加现有文件,或者如果目录中不存在所提及名称的文件,则创建一个文件。
2.2 设置密钥
<code>sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
2.3 安装
首先确保软件包索引是最新的,否则上述修改是无效的,使用如下命令更新
<code>sudo apt update
使用桌面完整安装:ROS、rqt、rviz、机器人通用库、2D/3D 模拟器和 2D/3D 感知
<code># Ubuntu 20.04
sudo apt install ros-noetic-desktop-full
# Ubuntu 18.04
sudo apt install ros-melodic-desktop-full
2.4 设置环境变量
在终端输入如下指令,对环境变量进行配置
<code>echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc source ~/.bashrc
2.5 初始化rosdep
克隆rosdistro文件
因为<code>https://raw.githubusercontent.com网站在国内被屏蔽无法访问,直接进行初始化会失败,所以先将需要的rosdistro文件克隆下来。将克隆好的文件夹放置在你自己指定的本地文件夹下,我这里放置在了/opt/ros/noetic/
文件夹下。(注:从github上获取需要让linux可以连接上外网,或者在主机上下载后上传到虚拟机中)
cd /opt/ros/noetic/
git clone https://github.com/ros/rosdistro.git
修改文件1:20-default.list
文件路径:/opt/ros/noetic/rosdistro/rosdep/sources.list.d/
将里面的URL改为file路径,需要删除默认URL路径中的/master/
cd /opt/ros/noetic/rosdistro/rosdep/sources.list.d/
sudo gedit 20-default.list
# 修改为如下内容
# os-specific listings first
yaml file:///opt/ros/noetic/rosdistro/rosdep/osx-homebrew.yaml osx
# generic
yaml file:///opt/ros/noetic/rosdistro/rosdep/base.yaml
yaml file:///opt/ros/noetic/rosdistro/rosdep/python.yaml
yaml file:///opt/ros/noetic/rosdistro/rosdep/ruby.yaml
gbpdistro file:///opt/ros/noetic/rosdistro/releases/fuerte.yaml fuerte
# newer distributions (Groovy, Hydro, ...) must not be listed anymore, they are being fetched from the rosdistro index.yaml instead
修改文件2:gbpdistro_support.py
文件路径为:<code>/usr/lib/python3/dist-packages/rosdep2/(Noetic路径为python3,Melodic或者老版本路径为python2.7)
cd /usr/lib/python3/dist-packages/rosdep2/
sudo gedit gbpdistro_support.py
# 修改为如下内容
FUERTE_GBPDISTRO_URL = 'file:///opt/ros/noetic/rosdistro/' \
'releases/fuerte.yaml'
修改文件3:rep3.py
文件路径为:<code>/usr/lib/python3/dist-packages/rosdep2/
cd /usr/lib/python3/dist-packages/rosdep2/
sudo gedit rep3.py
# 修改为如下内容
REP3_TARGETS_URL = 'file:///opt/ros/noetic/rosdistro/releases/targets.yaml'
修改文件4:init.py
文件路径为:<code>/usr/lib/python3/dist-packages/rosdistro/
cd /usr/lib/python3/dist-packages/rosdistro/
sudo gedit __init__.py
# 修改为如下内容
DEFAULT_INDEX_URL = 'file:///opt/ros/noetic/rosdistro/index-v4.yaml'
2.6 安装python-rosdep
在终端输入如下指令安装<code>python-rosdep,如果不安装,在运行sudo rosdep init
时可能出现sudo:rosdep:找不到命令
的错误。
# Noetic版本ROS为python3-rosdep
sudo apt-get install python3-rosdep
# Melodic版本ROS为python-rosdep
sudo apt-get install python-rosdep
2.7 创建20-default.list文件
安装了python-rosdep后,因为国内网络被屏蔽的原因运行sudo rosdep init还无法下载或连接失败的错误。所以用如下命令创建这个文件。
<code>sudo mkdir -p /etc/ros/rosdep/sources.list.d
cd /etc/ros/rosdep/sources.list.d
sudo gedit 20-default.list
# 在文件中添加如下内容
#os-specific listings first
yaml file:///opt/ros/noetic/rosdistro/rosdep/osx-homebrew.yaml osx
#generic
yaml file:///opt/ros/noetic/rosdistro/rosdep/base.yaml
yaml file:///opt/ros/noetic/rosdistro/rosdep/python.yaml
yaml file:///opt/ros/noetic/rosdistro/rosdep/ruby.yaml
gbpdistro file:///opt/ros/noetic/rosdistro/releases/fuerte.yaml fuerte
#newer distributions (Groovy, Hydro, ...) must not be listed anymore, they are being fetched from the rosdistro index.yaml instead
2.8 完成初始化rosdep
在终端输入如下指令,完成初始化rosdep
2.9 安装rosinstall
<code># Noetic版本ROS为
sudo apt install python3-rosdep
sudo apt install python3-rosinstall
sudo apt install python3-rosinstall-generator
sudo apt install python3-wstool
sudo apt install build-essential
# Melodic版本ROS为
sudo apt install python-rosdep
sudo apt install python-rosinstall
sudo apt install python-rosinstall-generator
sudo apt install python-wstool
sudo apt install build-essential
2.10 运行ROS
roscore
三、小海龟demo
新开一个bash,输入<code>rosrun turtlesim turtlesim_node
新建一个bash,输入<code>rosrun turtlesim turtle_teleop_key,使用上下左右键控制移动
四、了解ROS话题和消息的发布与获取的方式,终端命令发布话题控制海龟圆周运动。
4.1 话题获取
先将小海龟demo运行起来,然后再开一个bash,输入<code>rqt_graph
这个图描述了两个,publisher是/teleop_turtle,subscriber是/turtlesim,也就是publisher通过话题向turtlesim发送控制信息。
4.2 消息获取
bash输入<code>rostopic info /turtle1/cmd_vel
type表示话题的数据类型。
4.3 获取消息格式
<code>rosmsg show geometry_msgs/Twist
分别表示线速度和角速度,取值只有x,z。
<code>rostopic echo /turtle1/cmd_vel 打印传递的信息。
4.4 命令行实现控制圆周运动
先输入以下命令
<code>rostopic pub -r 10 /turtle1/cmd_vel geometry_msgs/Twist "linear:
接下来按下Tab建
,会自动帮我们补全。
然后修改数据,将线速度的x修改为1,角速度的z也修改为1。
五、C++编码实现小海龟圆周运动
5.1 创建ROS工作空间
创建工作空间
<code>mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
编译工作空间
cd ~/catkin_ws
catkin_make
source devel/setup.bash
检查环境变量
echo $ROS_PACKAGE_PATH
5.2 创建ROS功能包
创建功能包
cd ~/catkin_ws/src
catkin_create_pkg learning_topic std_msgs rospy roscpp geometry_msgs
编译功能包
cd ~/catkin_ws
catkin_make
source devel/setup.bash
5.3 C++代码
创建publisher.cpp文件
在位置~/catkin_ws/src/learning_topic/src/
下创建publisher.cpp文件。发布话题的逻辑
1.初始化ROS节点
2.向ROS Master注册节电信息,包括发布的话题名和话题中的消息类型
3.创建消息数据
4.按照一定频率循环发布消息
C++代码:
#include <sstream>
#include "ros/ros.h"
#include "std_msgs/String.h"
#include "geometry_msgs/Twist.h"
int main(int argc, char **argv)
{
//初始化节点
ros::init(argc, argv, "publisher");
//创建节点句柄
ros::NodeHandle n;
//创建publisher,发布话题[/turtle1/cmd_vel],消息类型[geometry_msgs::Twist]
ros::Publisher chatter_pub = n.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel", 1000);
//设置循环频率
ros::Rate loop_rate(100);
while (ros::ok())
{
//定义发布的数据
geometry_msgs::Twist msg;
//定义linear数据
geometry_msgs::Vector3 linear;
linear.x=1;
linear.y=0;
linear.z=0;
//定义angular数据
geometry_msgs::Vector3 angular;
angular.x=0;
angular.y=0;
angular.z=1;
msg.linear=linear;
msg.angular=angular;
//发布msg数据
chatter_pub.publish(msg);
//循环等待回调函数
ros::spinOnce();
//按照循环频率延时
loop_rate.sleep();
}
return 0;
}
添加编译选项
cd ~/catkin_ws/src/learning_topic
gedit CMakeLists.txt
在最后添上如下代码
add_executable(publisher src/publisher.cpp)
target_link_libraries(publisher ${catkin_LIBRARIES})
保存退出,再进行编译命令
cd ~/catkin_ws
catkin_make
启动小海龟并实现控制
#打开新终端
rosrun turtlesim turtlesim_node
#打开新终端
cd ~/catkin_ws
#下面这一步是为了保证rosrun命令能够找到相应的功能包,有可以省去这一步骤的方法,各位可以自行查找
source ~/catkin_ws/devel/setup.bash
rosrun learning_topic publisher
参考文章
Ubuntu20.04.4安装ROS Noetic详细教程
ubuntu20.04ros从安装到卸载
ROS运行程序让小海龟实现圆周运动
小结
初步认识了ROS系统,了解了其具体应用,认识其节点间通信机制的重要性。
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。