Ubuntu16.04安装ROS Kinetic——实现小海龟仿真 详细过程记录

一、什么是ROS?

机器人操作系统(Robot Operating System, ROS)是一个应用于机器人上的操作系统,它操作方便、功能强大,特别适用于机器人这种多节点多任务的复杂场景。

说明:ROS是一个适用于机器人编程的框架, 这个框架把原本松散的零部件耦合在了一起, 为他们提供了通信架构。 ROS虽然叫做操作系统, 但并非Windows、 Mac那样通常意义的操作系统, 它只是连接了操作系统和你开发的ROS应用程序, 所以它也算是一个中间件, 基于ROS的应用程序之间建立起了沟通的桥梁, 所以也是运行在Linux上的运行环境, 在这个环境上, 机器人的感知、 决策、 控制算法可以更好的组织和运行。

ROS特点

1)点对点的设计

ROS中每一个进程都以一个节点的形式运行,可分布于不同主机(分散计算压力,协同工作),节点的通信消息通过一个带有发布和订阅功能的RPC传输系统来传送。

2)多语言支持

C++、Python作为最广泛的ROS开发语言、C、Java及C#和Lisp等,每个模块可以用不同的语言实现。为了支持多语言编程,ROS采用了一种语言中立的接口定义语言来实现各模块之间消息传送。 通俗的理解就是, ROS的通信格式和用哪种编程语言来写无关, 它使用的是自身定义的一套通信接口。

3)架构精简、集成度高

  • 每个功能节点可以单独编译
  • 集成众多开源项目
  • 接口统一、提高软件复用性

4)组件化工具包丰富

  • 3D可视化工具—rviz
  • 物理仿真环境—gazebo
  • 数据记录工具—rosbag
  • Qt工具箱一rqt_*

5)免费并且开源

  • ROS具有一个庞大的社区ROSwiki(http://wiki.ros.org/),可以查阅功能包参数和提问等。
  • ROS开发的软件包已经达到数千万个,相关的机器人已经多达上千款。
  • ROS遵从BSD协议,对个人和商业应用及修改完全免费。

在这里插入图片描述
ROS的应用框架图
在这里插入图片描述
ROS的优点和缺点

优点缺点
提供框架、工具和功能通信实时性能有限
方便移植系统稳定性尚不满足工业级要求
庞人的用户群体安全性上没有防护措施
免费开源仅支持Linux(Ubuntu)

二、安装ROS

我的Ubantu版本是16.04,ros版本需要和Ubuntu版本一致才行,否则会容易出现报错安装失败。

版本ROS
Ubuntu20.04noetic
Ubuntu18.04melodic
Ubuntu16.04kinetic
Ubuntu14.04indigo

1、设置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'

将这一步sources.list替换为国内源会稳定且速度快:

sudo sh -c '. /etc/lsb-release && echo "deb http://mirrors.tuna.tsinghua.edu.cn/ros/ubuntu/ `lsb_release -cs` main" > /etc/apt/sources.list.d/ros-latest.list' 

2、设置key

sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654

如图所示设置成功。
在这里插入图片描述

3、更新package

sudo apt-get update

4、安装ROS kinetic完整版

sudo apt-get install ros-kinetic-desktop-full

5、初始化rosdep

sudo rosdep init

这一步如果出现报错
ERROR: cannot download default sources list from: https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.list
Website may be down.
则在命令行输入sudo gedit /etc/hosts,(注意gedit后面有空格)在host文件最后一行添加199.232.28.133 raw.githubusercontent.com
然后保存就好了。

rosdep update

6、配置ROS环境

echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source ~/.bashrc

7、安装依赖项

sudo apt-get install python-rosinstall python-rosinstall-generator python-wstool build-essential

在这里插入图片描述

8、测试ROS是否安装成功

roscore

如图所示,执行该命令可以启动ROS,初始化ROS环境,还可以看到ROS的版本号等信息。
在这里插入图片描述

三、ROS第一个例程——小海龟

1、启动ROS

roscore

2、在此基础上再打开一个新的终端窗口,输入以下命令,会弹出一个小乌龟窗口

rosrun turtlesim turtlesim_node

3、再打开一个新的终端窗口,输入以下命令,方向键就可以控制小乌龟移动了

rosrun turtlesim turtle_teleop_key

在这里插入图片描述

4、再打开一个新的终端窗口,输入以下命令,可以查看ROS节点信息

rosrun rqt_graph rqt_graph

turtlesim_node节点和turtle_teleop_key节点之间是通过一个ROS话题来相互通信的。turtle_teleop_key在话题上发布键盘按下的消息,turtlesim则订阅该话题以接收消息。
使用rqt_graph可以显示当前运行的节点和话题。
在这里插入图片描述
如果把鼠标放在/turtle1/cmd_vel上面,相应的ROS节点(这里是蓝色和绿色)和话题(这里是红色)就会高亮显示。可以看到turtlesim_node和turtle_teleop_key节点正通过一个名为/turtle1/command_velocity的话题来相互通信。
在这里插入图片描述
使用rostopic echo可以显示在某个话题上发布的数据。
使用格式如下

rostopic echo [topic]

打开一个新的终端窗口,输入指令显示发布在/turtle1/cmd_vel话题上的数据。

rostopic echo /turtle1/cmd_vel

在这里插入图片描述
现在再点开rqt_graph窗口,先按下左上角蓝色的刷新按钮以显示新节点。如图,rostopic echo(这里以红色显示)现在也订阅了turtle1/command_velocity话题。
在这里插入图片描述
话题的通信是通过节点间发送ROS消息实现的。为了使发布者(turtle_teleop_key)和订阅者(turtulesim_node)进行通信,发布者和订阅者必须发送和接收相同类型的消息。这意味着话题的类型是由发布在它上面消息的类型决定的。
使用rostopic type命令可以查看发布在话题上的消息的类型。
使用rosmsg可以查看消息的详细信息。
使用格式:

rostopic type [topic]

输入命令查看信息

rostopic type /turtle1/cmd_vel
rosmsg show geometry_msgs/Twist

在这里插入图片描述

5、使用C++程序控制小海龟走一个标准的圆形

1. 创建工作空间
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
2. 编译工作空间
cd ~/catkin_ws
catkin_make
source devel/setup.bash

在这里插入图片描述

3. 检查环境变量
echo $ROS_PACKAGE_PATH

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.创建并编译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. 编写C++程序

在位置~/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;
}
6. 添加编译选项

Python在ubuntu是可以直接执行的脚本语言,而C++是编译语言,在执行之前需要经过编译过程,因此在编译工作空间之前需要配置文件。

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

如图显示100%就是编译完成了。
在这里插入图片描述

7. 启动小海龟和c++程序,控制其做圆周运动
roscore
#打开新终端
rosrun turtlesim turtlesim_node
#打开新终端
cd ~/catkin_ws
#下面这一步是为了保证rosrun命令能够找到相应的功能包,有可以省去这一步骤的方法,各位可以自行查找
source ~/catkin_ws/devel/setup.bash
rosrun learning_topic publisher

运行结果如动图所示:
在这里插入图片描述

参考资料

Ubuntu16.04安装ROS Kinetic详细过程 —— 异想天开168
【古月居】古月·ROS入门21讲 | 一学就会的ROS机器人入门教程 5.安装ROS系统
ROS入门笔记(一): ROS简介 —— 少云清

  • 62
    点赞
  • 68
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值