平台
Ubuntu 16.04
ROS简介
ROS
即机器人操作系统(Robot Operating System
),ROS
系统是起源于2007
年斯坦福大学人工智能实验室的项目与机器人技术公司Willow Garage
的个人机器人项目之间的合作,2008
年之后就由Willow Garage
来进行推动。2010年Willow Garage
公司发布了开源机器人操作系统ROS
。
ROS
是面向机器人的开源的元操作系统(meta-operatingsystem
)。它能够提供类似传统操作系统的诸多功能,如硬件抽象、底层设备控制、常用功能实现、进程间消息传递和程序包管理等。此外,它还提供相关工具和库,用于获取、编译、编辑代码以及在多个计算机之间运行程序完成分布式计算。
目前主流的ROS
版本如下:
本博客采用的是Kinetic Kame
版本,也是目前为止(2019
年)较为稳定的一个版本。
ROS安装
安装 Ubuntu 16.04
首先安装好Ubuntu 16.04
。(中英文皆可)
设置 sources.list
为Ubuntu
的包管理器增加源,设置计算机接受来自于 packages.ros.org
的软件。1
sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list'
这一步会根据Ubuntu Linux
发行版本的不同,添加不同的源。Ubuntu的版本通过lsb_release -sc
获得。一旦添加了正确的软件库,操作系统就知道去哪里下载程序,并根据命令自动安装软件。
设置密钥
这一步是为了确认源代码是正确的,并且没有人在未经所有者授权的情况下,修改任何程序代码。通常情况下,当添加完软件库时,已经添加了软件库的密钥,并将其添加到操作系统的可信任列表中。1
sudo apt-key adv --keyserver 'hkp://keyserver.ubuntu.com:80' --recv-key C1CF6E31E6BADE8868B172B4F42ED6FBAB17C654
检查软件更新
确保包管理器的索引已经更新至最新。1
sudo apt-get update
正式安装
这里安装的是桌面完整版,也是推荐安装的版本。1
sudo apt-get install ros-kinetic-desktop-full
这一步比较耗时,耐心等待。
初始化 rosdep
在使用ROS
之前,需要先初始化rosdep
。rosdep
使得你可以为你想要编译的源码,以及需要运行的ROS
核心组件,简单地安装系统依赖。1
2sudo rosdep init
rosdep update
注1:多行命令,需依次输入,下同。
注2:实际安装时,通常这里会有个报错:1
2ERROR: cannot download default sources list from:https://raw.githubusercontent.com/ros/rosdistro/master/rosdep/sources.list.d/20-default.list
Website may be down.
导致这个错误的原因为,该链接必须要科学上网才能打开,因此,需要将其域名改为实际的IP
地址。首先打开hosts
文件:1
sudo gedit /etc/hosts
然后添加以下命令:1
199.232.28.133 raw.githubusercontent.com
然后重新sudo rosdep init
(会报一个已经存在的错误,不用管他)。
环境设置
如果在每次一个新的终端启动时,ROS环境变量都能自动地添加进你的bash
会话是非常方便,这可以通过如下命令来实现:1
2echo "source /opt/ros/kinetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
构建包所需的依赖
到这一步,应该已经安装好了运行核心ROS包的所有东西。要创建和管理你自己的ROS workspace
,还有单独发布的许多的工具。比如,rosinstall
是一个常用的命令行工具,使你可以通过一个命令为ROS包简单地下载许多源码树。1
sudo apt-get install python-rosinstall python-rosinstall-generator python-wstool build-essential
至此,已经安装完了ROS的所有部分,下面可以进行一个简单的测试。
测试
启动ROS核心管理器
打开一个终端,输入以下命令:1
roscore
启动乌龟仿真器节点
再打开一个终端,输入以下命令:1
rosrun turtlesim turtlesim_node
启动控制乌龟操作节点
再打开一个终端,输入以下命令:1
rosrun turtlesim turtle_teleop_key
点击该终端,使其处于激活状态,然后按下键盘的方向键就可以看到小乌龟的运动了。
ROS实例——两台计算机的通信
硬件平台
两台安装了Ubuntu16.04
和ROS kinetic
的计算机
路由器
软件配置
安装chrony包,用于实现同步
1 | sudo apt-get install chrony |
安装SSH服务器库
1 | sudo apt-get install openssh-server |
修改配置文件
查看hostname和IP地址
首先利用hostname
命令查看服务器和客户端电脑的名字,假设为server_name
和client_name
。
其次利用ifconfig
命令查看服务器和客户端的IP
地址(连接至同一局域网),假设IP
地址分别为:server_IP
和client_IP
(wlp4s0
的网络地址)。
修改/etc/hosts文件和环境变量
1.打开/etc/hosts
文件:sudo gedit /etc/hosts
,添加如下内容:1
2server_IP server_name
client_IP client_name
注:中间为tab
键,实际操作时,注意替换名字。
输入命令重启网络:sudo /etc/init.d/networking restart
2.打开bash文件:sudo gedit ~/.bashrc
,服务器的计算机增加的内容为:1
2export ROS_MASTER_URL=http://client_IP:11311
export ROS_HOSTNAME=server_name
客户端的计算机增加的内容为:1
2export ROS_MASTER_URL=http://server_IP:11311
export ROS_HOSTNAME=client_name
3.在服务器的计算机中可以输入以下内容进行测试:1
2ssh server_name
ping client_name
同理,客户端也可以进行测试。
编写程序
创建文件夹
创建工作空间
1
2
3mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace创建功能包
1
catkin_create_pkg test roscpp geometry_msgs tf
注:这里的test
是功能包的名字,roscpp,geometry_msgs,tf
是需要的依赖库。
编写cpp文件
在test/src
里面新建一个move_turtle.cpp
文件。其内容如下:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
ros::Publisher cmdVelPub;
void shutdown(int sig)
{
cmdVelPub.publish(geometry_msgs::Twist());//使机器人停止运动
ROS_INFO("move_turtle_goforward ended!");
ros::shutdown();
}
int main(int argc, char** argv)
{
ros::init(argc, argv, "move_turtle");
//初始化ROS,它允许ROS通过命令行进行名称重映射
ros::NodeHandle node;//为这个进程的节点创建一个句柄
cmdVelPub = node.advertise<geometry_msgs::Twist>("/mobile_base/commands/velocity", 1);
//在/mobile_base/commands/velocity topic上发布一个geometry_msgs/Twist的消息
ros::Rate loopRate(10);//ros::Rate对象可以允许你指定自循环的频率
signal(SIGINT, shutdown);
ROS_INFO("move_turtle cpp start...");
geometry_msgs::Twist speed; // 控制信号载体 Twist message
while (ros::ok())
{
speed.linear.x = 0.1; // 设置线速度为0.1m/s,正为前进,负为后退
speed.angular.z = 0; // 设置角速度为0rad/s,正为左转,负为右转
cmdVelPub.publish(speed); // 将刚才设置的指令发送给机器人
loopRate.sleep();//休眠直到一个频率周期的时间
}
return 0;
}
该程序的作用是:使turtlebot
一直以0.1m/s
的速度前进。
修改CMakeLists.txt
在test
功能包中的CMakeList.txt
文件的末尾加上两句:1
2add_executable(move_turtle src/move_turtle.cpp)
target_link_libraries(move_turtle ${catkin_LIBRARIES})
编译工程
回到工作空间1
cd ~/catkin_ws/
编译1
catkin_make
设置环境变量1
source devel/setup.bash
附:将工作空间永久添加到环境变量中:1
2echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc
启动turtlebot
- 打开
turtlebot
电源,并使其和客户端计算机连接,将客户端计算机放在turtlebot
上。 - 在客户端计算机中,打开节点管理器(打开终端输入):
roscore
,再打开一个终端启动节点:roslaunch kobuki_node minimal.launch
。 - 在服务器计算机中也打开节点管理器,再打开一个终端,启动刚才的工程:
rosrun test move_turtle
。 - 此时就会看到
turtlebot
一直在直线运行,直到按下ctrl + c
。
附:ROS官网教程
附 基于虚拟机VMware的Ubuntu18.04和ROS的安装
平台
虚拟机VMware Workstation 15
Ubuntu18.04
ROS Melodic Morenia
虚拟机安装Ubuntu18.04
参考博客:VMware Workstation 15。序列号。
实际安装时,按照步骤一步步来即可。设备配置那里后面可以更改,不用太纠结。
安装完Ubuntu
之后,和正常双系统一样,需要更换国内源,更新软件等。
安装ROS Melodic Morenia
Ubuntu18.04
对应的ROS
系统为Melodic Morenia
,安装过程和kinetic
类似。参考博客:ROS Melodic Morenia安装。