Chapter1 ROS概述与环境搭建

一、序言

        学习一个新的知识模块时,要先了解模块的相关概念,安装官方软件包、搭建其集成的开发环境,这些完成后,继续开始开创新领域的大门。

二、ROS简介

2.1 ROS的概念

①一个比喻:

机器人的控制集成硬件设计、嵌入式软件设计、上层软件设计(linux)、机械结构设计、机械加工为主。上层软件设计相当于人的大脑、嵌入式软件设计相当于人的小脑,大脑采集机器人感觉到的外部信息进行处理运算,再将执行命令下达,但下达并不是直接下达给硬件实现(好比大脑无法直接控制肉体),而是需要通过小脑来控制(软件),再由小脑来控制硬件。笔者认为,这像是计算机组成原理里面的ISA、操作系统与软件的区别。

 ②ROS的一些模块:

ROS = plumbing(通信) + tools(工具) + capabilities(功能)+ecosystem(生态)

通信:数据交互,如在导航机器人中,需要获取摄像头,或者一些硬件采集数据(雷达+摄像头)

工具:仿真(不用自己买机器人哈哈哈哈哈省钱了兄弟们)

功能:如导航机器人可以实现导航、躲避障碍........这些都自己做的吗?别人做好的模块直接复用,自己进行算法的改进或者调参

生态:开源、掌握话语权

③ROS设计目标(有点抽象.......)

代码重用:类似C++和java的封装思想

分布式:负载均衡,类似计算机网络中OSPF算法。

松耦合:将输入输出标准化,实现自定义(类似C程序设计中的strcpy和mystrcpy)

精简:ROS被设计尽可能精简,以便为ROS编写的代码可以与其它机器人软件框架一起使用。ROS易于与其他机器人软件框架集成。

语言独立性:多语言使用(C++、python、java)

易于测试:ROS具有称为rostest的内置单元/集成测试框架,可轻松安装和拆卸测试工具。

2.2 ROS安装及测试(笔者后续更新,如需技术支持+q 1339027867)

如果安装成功了,那么恭喜你,说句题外话(老子安了一个半小时,真是个弱智).........

那么开始测试ROS

①测试ros,由于ros已经内置了一些小程序,可以运行下列小程序检测ROS是否可以运行

1.首先启动三个命令行(ctrl+alt+t)

2.命令行1输入 

roscore

3.命令行2输入:此时会弹出图形化界面

rosrun turtlesim turtlesim_node

4.命令行3输入:可以通过上下左右控制乌龟运动

rosrun turtlesim turtle_teleop_key

然后就是这样了,恭喜您,配置成功啦!

Chapter1 ROS概述与环境搭建_第1张图片

2.3 ROS初体验

①ROS中主要设计python与C++为主

②虽说使用语言不一样,但是实现流程大致相似

创建一个工作空间--->创建一个功能包--->编辑源文件(.cpp/.py)--->编辑配置文件--->编译并运行

Ⅰ.创建工作空间

"linux人,linux混,linux都是人上人",创建目录当然要用linux

mkdir -p demo01_ws/src

创建一个工作空间,demo01_ws,其下有个文件集叫src,回车。

 进入工作空间

cd demo01_ws/

再然后调用ROS里面的编译命令,回车,会出现一些日志,内容先不用管他

catkin_make

结果,先双击打开demo01_ws,发现多了俩文件夹,build和devel。执行命令行终端输出如下:

Chapter1 ROS概述与环境搭建_第2张图片

Ⅱ.进入src创建ros包并添加依赖

进入工作空间下的src目录,Linux命令如下

cd src

创建一个功能包,需要调用命令,命令后的为工作包的名字(本例为helloworld),三个依赖包

catkin_create_pkg helloworld roscpp rospy std_msgs

执行完提示信息如下:

 ③用C++实现hello world

Ⅰ首先进入目录:demo01_ws  --- src --- helloworld --- src下面,创建cpp文件,双击打开

touch helloworld_c.cpp

Ⅱ.编辑源文件

//1.包含ros的头文件
#include "ros/ros.h"
//2.编写main函数
int main(int argc,char * argvs[])
{
	//3.初始化ros节点
	ros::init(argc,argv,"hello_node");
	//4.输出日志
	ROS_INFO("hello world");
	return 0;
}

Ⅲ.编写配置文件 Cmakelist.txt

修改其去掉井号,第一个_node改成_c

# add_executable(${PROJECT_NAME}_node src/helloworld1_node.cpp)
 #target_link_libraries(${PROJECT_NAME}_node

这个参数 ${PROJECT_NAME}_node 是执行文件的命名,随意命名,就叫haha吧,嘿嘿,也就是通过haha可以映射到cpp文件

接下来修改链接库文件${PROJECT_NAME}_node 这个参数改成execute table里面映射的名称haha

配置文件片段如下,保存。(haha是可执行文件名,helloworld_c.cpp是c++文件名)

 add_executable(haha src/helloworld_c.cpp)

## Rename C++ executable without prefix
## The above recommended prefix causes long target names, the following renames the
## target back to the shorter version for ease of user use
## e.g. "rosrun someones_pkg node" instead of "rosrun someones_pkg someones_pkg_node"
# set_target_properties(${PROJECT_NAME}_node PROPERTIES OUTPUT_NAME node PREFIX "")

## Add cmake target dependencies of the executable
## same as for the library above
# add_dependencies(${PROJECT_NAME}_node ${${PROJECT_NAME}_EXPORTED_TARGETS} ${catkin_EXPORTED_TARGETS})

## Specify libraries to link a library or executable target against
 target_link_libraries(haha
   ${catkin_LIBRARIES}
 )

Ⅳ.编译,在demo01_ws中打开终端进行编译,编译命令为

catkin_make

编译成功后,应该是这样的

Chapter1 ROS概述与环境搭建_第3张图片

Ⅴ.执行

第一步:启动ROS核心   打开终端输入ROSCORE

第二步:启动核心后,执行源文件,在工作中心中(demo那个文件夹),输入

source ./devel/setup.bash

这个内容基本是固定的,目的是修改环境变量

这个案例中笔者在自己复盘时很容易忘掉这步,因此需要额外记忆。

此外,这行代码具有局限性。

这句代码的作用是把当前工作空间刷新到当前窗口下面的环境变量,但是!!!!

如果新开一个窗口 运行上面代码则不好使了

如果想在任何窗口下均能执行haha文件,应该怎么做呢???

根目录找.bashrc文件(ctrl+h),用记事本打开

追加

source ~/demo01_ws/devel/setup.bash
liuhongwei@liuhongwei-virtual-machine:~$ source .bashrc
liuhongwei@liuhongwei-virtual-machine:~$ rosrun helloworld1 haha

执行成功

第三步:执行,调用命令rosrun 后面加上包名(本例为helloworld1),后面再加上被执行的程序

rosrun helloworld1 haha

回车,发现执行成功,执行成功界面如下:

 

④用python建立helloworld

Ⅰ.进入工作空间,进入工作空间下的src目录,进入helloworld1目录,建立文件夹:scripts,再进入文件夹scripts,在里面添加python文件,用linux命令行就是:

mkdir scripts
cd scripts/
touch helloworld_p.py

Ⅱ.打开进行编辑

#! usr/bin/env python
##指定解释器

#1.导包
import rospy
#2.编写主入口
if __name__ == "__main__":
#3.初始化ROS节点
	rospy.init_node("hello_p");
#4.输出日至helloworld
	rospy.loginfo("hello world");

Ⅲ.添加可执行权限:在script目录下,打开终端,输入下一行文件,则有可执行权限

chmod +x helloworld_p.py 

Ⅳ.编写配置文件,配置文件在功能包(helloworld1)下,与script平级,名字叫做CMakeLists.txt

 catkin_install_python(PROGRAMS
   scripts/helloworld_p.py
   DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
 )

这是更改后的结果,作用是为python文件选用适宜的解释器

Ⅴ.编译

在demo01_ws下调用catkin_make

Ⅵ.执行

新开一个窗口,执行roscore,加载source ./devel/setup.bash,执行rosrun helloworld1 helloworld_p.py 执行。

三、集成开发环境搭建

3.1 安装终端

1.为什么要安装终端:以小乌龟运动为例,开启多个窗口,使视觉比较凌乱

2.安装:

sudo apt install terminator

3.2 安装VSCODE

1.vscode下载:Documentation for Visual Studio Code

2.双击即可安装

3.相关插件安装:如图所示

Chapter1 ROS概述与环境搭建_第4张图片

3.3 vscode 使用_基本配置

1.创建ROS工作空间

在文件系统中创建ROS工作空间,使用命令行如下:

liuhongwei@liuhongwei-virtual-machine:~$ mkdir -p demo02_ws/src
liuhongwei@liuhongwei-virtual-machine:~$ cd demo02_ws/
liuhongwei@liuhongwei-virtual-machine:~/demo02_ws$ catkin_make

2.启动vscode

在domo02_ws下启动vscode,命令如下:输入后即可启动vscode

liuhongwei@liuhongwei-virtual-machine:~/demo02_ws$ code .

启动后的界面如下Chapter1 ROS概述与环境搭建_第5张图片

3.vscode中编译ROS

快捷键 ctrl + shift + B 弹出弹窗,选择 catkin_make:build,右面的小齿轮,修改全部代码为

{
"version":"2.0.0",
"tasks":[
{
"label":"catkin_make:debug",
"type":"shell",
"command":"catkin_make",
"args":[],
"group":{"kind":"build","isDefault":true},
"presentation":{"reveal":"always"},
"problemMatcher":"$msCompile"
}]
}

这样按下ctrl + shift + B就会自动编译,十分方便

4.创建ROS功能包

Chapter1 ROS概述与环境搭建_第6张图片

右击src,选定箭头指向选项,依次输入功能包名称与依赖(roscpp rospy std_msgs),功能包创建完成,快捷键编译一下看看有没有问题

5.python实现 / C++实现

C++实现:
Ⅰ.在src下创建cpp文件

#include "ros/ros.h"

int main(int argc , char *  argv[])
{
    ros::init(argc,argv,"hello_c");
    ROS_INFO("hello lhw");
    return 0 ;
}

Ⅱ.修改cmakelist

Chapter1 ROS概述与环境搭建_第7张图片

 Ⅲ.执行

终端,新建终端,首先启动ROSCORE工作核心;再新建一个终端,

source ./devel/setup.bash
rosrun hello_vscode hello_vscode_c

python实现:

1.在hello_vscode下建立scripts文件夹,在文件夹里建立py文件

2.写好python代码

#! /usr/bin/env python

import rospy
if __name__ == "__main__":
        rospy.init_node("hello_p")
        rospy.loginfo("hello")

3.更改scripts权限:右键,打开终端,输入:

chmod +x *.py

4.修改配置文件并编译

 catkin_install_python(PROGRAMS
    scripts/hello_vscode_p.py
   DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
 )

5.启动roscore核心

6.配置环境变量

source ./devel/setup.bash
rosrun hello_vscode hello_vscode_p

 

6.中文乱码问题

在main函数的第一句加上一句语句

setlocale(LC_ALL,"");

你可能感兴趣的:(ROS从入门到精通,python)