文章目录
前言
ROS (Robot Operating System, 机器人操作系统) 提供一系列程序库和工具以帮助软件开发者创建机器人应用软件。它提供了硬件抽象、设备驱动、库函数、可视化、消息传递和软件包管理等诸多功能。
一、Ubuntu18.04安装ROS环境
1.添加ROS软件源
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-key adv --keyserver keyserver.ubuntu.com --recv-keys F42ED6FBAB17C654
3.安装ROS
sudo apt update
sudo apt-get install ros-melodic-desktop-full
选择Y
4.初始化rosdep
sudo rosdep init
说明:
(1)使用
sudo rodep init
出现
sudo rosdep:找不到命令提示的错误
解决方法:
**
sudo apt install python-rosdep
**
(2)出现
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.
的错误
解决方法:
**
增加raw.githubusercontent.com域名与ip之间的映射
**
$ sudo vim /etc/hosts
151.101.84.133 raw.githubusercontent.com
rosdep update
5.设置环境变量
echo "source /opt/ros/melodic/setup.bash">>~/.bashrc
source ~/.bashrc
6.安装rosinstall
sudo apt-get install python-rosinstall python-rosinstall-generator python-wstool build-essential
二、ROS第一个例程——小海龟
开启小海龟仿真的步骤:
1.启动ROS Master
roscore
2.启动小海龟仿真器
rosrun turtlesim turtlesim_node
3.启动海龟控制节点
rosrun turtlesim turtle_teleop_key
**
说明:
**
每个步骤都需要新打开一个终端
,小海龟的运行路径是在最后一个终端上,通过
上下左右按键
控制的。
三、编写C++程序,控制小海龟走一个标准的圆形
1、创建工作空间和功能包
概念
工作空间(workspace)是一个存放工程开发相关文件的文件夹。所有的源码、配置文件、可执行文件都是放置在里面的。主要分为四个文件夹:
1.src: 代码空间 (source space)
放置功能包(里面的代码、配置文件、launch文件
2.build:编译空间 (build space)
编译过程中的中间文件(不太用关心
3.devel:开发空间 (development space)
编译生成的一些可执行文件、库、脚本
4.install:安装空间 (install space)
install命令的结果就放在里面
(1)创建工作空间
overview:
operation:
catkin_init_workspace //初始化工作空间(属性变化),看到冒出了CMakeLists.txt>
下面对工程编译(catkin_make)
要来到工作空间的根目录进行编译:
看到出现了另两个空间:
使install空间出现:
(2)创建功能包
- 功能包是放置ROS源码的最小单元
- 同一个工作空间下不允许存在同名功能包
创建功能包:
(要放在src里面):
命令 功能包名 依赖1 依赖2 依赖3:
catkin_create_pkg test_pkg roscpp rospy std_msgs>
打开功能包:
include放置头文件
src放功能包的代码
后面两个文件是功能包一定有的,使其区别于普通文件夹的属性
编译功能包:
还是先回到catkin_ws
编译工作空间就行了
因为没有代码所以也没有实际效果
要运行功能包里某一个程序的话,要先设置一下工作空间的环境变量
设置之后系统才能找到工作空间
设置环境变量:
ros@ros-virtual-machine:~/catkin_ws$ source devel/setup.bash >
检查环境变量:
用echo命令把环境变量打开
(ROS_PACKAGE_PATH 是ROS本身的一个环境变量,通过这个环境变量查找所有功能包的路径)
也是只有在前一步设置了工作空间的setup.bash之后,path里面才会包含工作空间的路径
ros@ros-virtual-machine:~/catkin_ws$ echo $ROS_PACKAGE_PATH
/home/ros/catkin_ws/src:/opt/ros/noetic/share
2、发布者Publisher的编程实现
以小乌龟速度为例,话题模型(Publisher/Subscriber)如下:
(1)创建功能包
$ cd ~/catkin_ws/src
$ catkin_create_pkg my_topic roscpp rospy std_msgs geometry_msgs turtlesim
再往功能包下的 src 中添加的 cpp 文件,该文件实现了发布者。
实现发布者的步骤:
1、初始化ROS节点;
2、向ROS Master注册节点信息,包括发布的话题名和话题中的消息类型;
3、创建消息数据;
4、按照一定频率循环发布消息
velocity_publisher.cpp代码:
// 该例程将发布turtle1/cmd_vel话题,消息类型geometry_msgs::Twist #include<ros/ros.h>#include<geometry_msgs/Twist.h>intmain(int argc,char**argv){// ROS节点初始化
ros::init(argc, argv,"my_velocity_publisher");// 创建节点句柄
ros::NodeHandle n;// 创建一个Publisher,发布名为/turtle1/cmd_vel的topic,消息类型为geometry_msgs::Twist,队列长度20
ros::Publisher turtle_vel_pub = n.advertise<geometry_msgs::Twist>("/turtle1/cmd_vel",20);// 设置循环的频率
ros::Rate loop_rate(10);int count =0;while(ros::ok()){// 初始化geometry_msgs::Twist类型的消息
geometry_msgs::Twist velocity_msg;
velocity_msg.linear.x =0.5;//线速度
velocity_msg.angular.z =0.5;//角速度// 发布消息
turtle_vel_pub.publish(velocity_msg);ROS_INFO("Publsh turtle velocity command[%0.2f m/s, %0.2f rad/s]",//类似c的printf
velocity_msg.linear.x, velocity_msg.angular.z);// 按照循环频率延时
loop_rate.sleep();}return0;}
在添加了源文件后,我们需要修改编译规则,进行编译:
//配置CMakeLists.txt中的编译规则// 1、设置需要编译的代码和生成的可执行文件add_executable(my_velocity_publisher src/my_velocity_publisher.cpp)// 2、设置链接库target_link_libraries(my_velocity_publisher ${catkin_LIBRARIES})
编译并运行发布者:
$ cd ~/catkin_new_ws
$ catkin_make
$ source devel/setup.bash
$ roscore
$ rosrun turtlesim turtlesim_node
$ rosrun my_topic my_velocity_publisher
(2)运行结果:
四、以小海龟为例演示两台电脑的ROS分布式通信
1、查看两台电脑各自的IP信息和主机名hostname
打开终端,输入命令查看主机的ip和主机名称,并记录(此处若
ifconfig
找不到命令,可以根据提示输入
sudo apt install net-tools
)
两台主机分别添加对方的ip地址和主机名到hosts文件中。这里可以直接使用vim或者sudo gedit打开文件(这里个人推荐使用gedit)
vim /ect/hosts
sudo gedit /etc/hosts
在第三行加入ip主机地址和主机名hostname然后保存退出
接下来重启网络
sudo /etc/init.d/networking restart
2、下载两个包
下载同步包和ssh服务器
sudo apt-get install chrony
sudo apt-get install openssh-server
检查启动
ps -e|grep ssh
ping 从机的ip地址
总结
安装ROS的整个过程,首先需要选择对应版本的ROS,接着就是在网络问题上的处理。目前网上还没有比较好的方法来解决线上安装过程遇到的网络问题,最佳的方式就是放弃线上安装,选择本地下载安装,不然会花费比较久的时间。
实现小海龟的运动我们可以使用键盘的上下键,命令行以及编程实现,通过三种方式的实现初步了解了ROS的特点。
参考文献
Ubuntu18.04安装ROS——实现小海龟仿真
ROS学习笔记(十二)ROS noetic ubuntu 版本 rosdep init,rosdep update 问题解决方法
[古月居ros21讲出现问题及个人解决方案1]第十讲出现:[rospack] Error: package ‘learning_topic‘ not found
Could not find a package configuration file provided by “std_msg“ with any of the following names:
ROS简介-从零开始讲解ROS(适合超零基础阅读)
版权归原作者 菲菲QAQ 所有, 如有侵权,请联系我们删除。