目录
一、ROS简介
1、含义
ROS(机器人操作系统,Robot Operating System),是专为机器人软件开发所设计出来的一套电脑操作系统架构。它是一个开源的元级操作系统(后操作系统),提供类似于操作系统的服务,包括硬件抽象描述、底层驱动程序管理、共用功能的执行、程序间消息传递、程序发行包管理,它也提供一些工具和库用于获取、建立、编写和执行多机融合的程序。
2、发展
- 简洁:ROS是设计得尽可能方便简易。您不必替换主框架与系统,因为ROS编写的代码可以用于其他机器人软件框架中。毫无疑问的,ROS更易于集成与其他机器人软件框架。事实上ROS已完成与OpenRAVE、Orocos和Player的整合。
- ROS-agnostic库:【agnostic:不可知论】建议的开发模型是使用clear的函数接口书写ROS-agnostic库。
- 语言独立性:ROS框架很容易在任何编程语言中执行。我们已经能在Python和C++中顺利运行,同时添加有Lisp、Octave和Java语言库。
- 测试简单:ROS有一个内建的单元/组合集测试框架,称为“rostest”。这使得集成调试和分解调试很容易。
- 扩展性:ROS适合于大型实时系统与大型的系统开发项目
二、ROS安装
1、添加软件源
命令:
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
效果:
注意:不同的Ubuntu版本所对应的下载名称不同
16.04--------------------------------------------kinetic
18.04--------------------------------------------melodic
20.04--------------------------------------------noetic
4、初始化rosdep
sudo rosdep init
rosdep update
-
找不到命令问题:
先执行
sudo apt install python-rosdep
命令在执行上文命令 -
list Website may be down.
问题:
cd /etc
sudo gedit hosts
在文本后面添加(ip是通过https://site.ip138.com进行输入raw.githubusercontent.com查询获取得到,任意选择一个)
ip raw.githubusercontent.com
不过这里存在网络问题,如果使用的是移动网通过上面方法也无法解决问题,最终用电信网解决。
- ERROR: error loading sources list: <urlopen error <urlopenerrortimedout(https://raw.githubusercontent.com/ros/rosdistro/master/index-v4.yaml)问题:
本地安装:
(1)下载文件:https://github.com/ros/rosdistro
(2)解压文件:unzip rosdistro-master.zip -d rosdistro
(3)修改文件:sudo nano /etc/ros/rosdep/sources.list.d/20-default.list
(4)修改内容:
#os-specific listings first
yaml file:///home/lyy/ros/rosdistro/rosdep/osx-homebrew.yaml osx
#generic
yaml file:///home/lyy/ros/rosdistro/rosdep/base.yaml
yaml file:///home/lyy/ros/rosdistro/rosdep/python.yaml
yaml file:///home/lyy/ros/rosdistro/rosdep/ruby.yaml
gbpdistro file:///home/levy/ros/rosdistro/releases/fuerte.yaml fuerte
#newer distributions (Groovy, Hydro, ...) must not be listed anymore, they are being fetched from the rosdistro index.yaml instead
注意:
gbpdistro file
中levy
为自己的用户名注意修改
(5)修改另外的文件
sudo gedit /usr/lib/python2.7/dist-packages/rosdep2/sources_list.py
原DEFAULT_SOURCES_LIST_URL
一行注释,在其后添加如下内容
DEFAULT_SOURCES_LIST_URL = 'file:///home/levy/ros/rosdistro/rosdep/sources.list.d/20-default.list'
(6)修改rep3.py
文件
sudo gedit /usr/lib/python2.7/dist-packages/rosdep2/rep3.py
原REP3_TARGETS_URL
一行注释,在其后添加如下内容
REP3_TARGETS_URL = 'file:///home/levy/ros/rosdistro/releases/targets.yaml'
(7)修改__init__.py
文件
sudo gedit /usr/lib/python2.7/dist-packages/rosdistro/__init__.py
原DEFAULT_INDEX_URL
一行注释,在其后添加如下内容
DEFAULT_INDEX_URL = 'file:///home/levy/ros/rosdistro/index-v4.yaml'
安装完成后:rosdep update
5、设置环境变量
命令:
echo "source /opt/ros/melodic/setup.bash" >> ~/.bashrc
source ~/.bashrc
效果:
三、小海龟实例
三条命令分别开启三个命令终端
在第三个终端按上下左右键控制小海龟
1、运行小海龟
启动ROS master:
roscore
启动小海龟仿真器:
rosrun turtlesim turtlesim_node
启动小海龟控制节点:
rosrun turtlesim turtle_teleop_key
效果:
2、话题器查看节点信息
rosnode list
节点:
rosnode info /XXXX
具体节点查看
效果:
rostopic echo /turtle1/cmd_vel
监听话题内容
3、控制量移动海龟
控制小海龟运动,就发布一个消息,发布小海龟线速度,rostopic pub /turtle1/cmd_vel geometry_msgs/Twist "linear:修改linear的X为1.0,回车后,看见小海龟向前运动了一截。如果想按照一定的频率发布消息,那就要加一个参数,rostopic pub -r 10 /turtle1/cmd_vel geometry_msgs/Twist …,即可。
4、C++程序编写小海龟圆形
工作空间workspace,我们在开发一个ROS项目的时候,是以工作空间来代表一个项目的。
- workspace: 工作空间 build:ros编译打包的结果产出目录。我们不需要对这个文件夹做任何编辑操作,属于自动生成。
devel: 开发所需要的目录 src:存放package的目录 CMakeLists.txt:
整个工作空间编译的脚本。此文件我们通常不用去做修改操作。
工作单元package,一个项目中可以创建多个工作单元,这个工作单元,我们称之为package。
-
pkg1: package的名称,开发过程中根据自己实际情况进行创建设定。
-
CMakeLists.txt:当前package的编译脚本。通常需要为c++代码添加编译时的依赖,执行等操作。
-
package.xml: package相关信息。通常添加一些ros库的支持 i- nclude文件夹: 存放c++ 头文件的
-
config文件夹:存放参数配置文件,格式为yaml launch文件夹:存放.launch文件的。 src:c++源代码
-
scripts:python源代码 srv:存放定义的
-
service msg: 存放自定义的消息协议 action: 存放自定义的action
2.1 Workspace创建
新建工作空间目录结构
1.新建一个文件夹,命名为catkin_ws
2.在文件夹 catkin_ws 下创建一个文件夹 src
3.移动到src目录下输入catkin_init_workspace。在src文件夹中出现CMakeLists.txt文件
4.返回catkin_ws,对其进行编译
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
cd ~/catkin_ws
catkin_make
设置环境变量是为了让系统知道功能包的位置在哪,以便能找到。确保安装脚本正确地覆盖了工作空间,ROS_PACKAGE_PATH环境变量包含在目录中。
在catkin_ws路径下终端输入source devel/setup.bash,使系统知道功能包放置在catkin_ws这个工作空间下。
检查环境变量
查看当前环境变量,终端输入:
创建package
来到workspace的src目录下,新建my_turtle_package包
catkin_create_pkg是创建package的命令。运行以上命令,会新建好package的目录,并且在目录中创建CMakeLists.txt,package.xml,src,include等文件和 目录第一个参数firstros是指创建的package名称,可以根据自己的实际需求去设定。
后面的参数roscpp,rospy,rosmsg是指当前创建的这个package需要提供哪些环境依赖。
roscpp是对c++的一种依赖,有了它就可以用c++开发ros程序。
rospy是对python的一种依赖,有了它就可以用python开发ros程序。
进入my_turtle_package的src文件中
创建CPP文件并编写程序
touch yuan.cpp
gedit yuan.cpp
复制代码:
修改CMakeLists.txt文件内容
返回my_turtle_package,打开CMakeLists.txt文件
cd ..
gedit CMakeLists.txt
在CMakeLists.txt文件中找到##Declare a C++ executable,在这一行的前面添加如下内容:
add_executable(yuan src/yuan.cpp)
target_link_libraries(yuan ${catkin_LIBRARIES})
进入catkin_ws,编译程序:
cd ~/catkin_ws/
catkin_make
运行实例:
roscore
rosrun turtlesim turtlesim_node
cd ~/catkin_ws/
source devel/setup.bash #程序注册
rosrun my_turtle_package yuan
四、总结
1、参考
https://blog.csdn.net/qq_43279579/article/details/114291635
https://blog.csdn.net/qq_44339029/article/details/120579608
https://blog.csdn.net/qq_54347584/article/details/129369824?spm=1001.2014.3001.5502
2、总结
- 安装rosdep时注意Ubuntu版本对应的名称
- 注意小海龟的启动依赖性和环境问题
- 大概了解ROS系统,通过小海龟具有基本体验