文章目录
Chapter 1 ROS概述与环境搭建
1.1 Helloworld( cpp version)
# 1. 创建工作空间myworkspace
mkdir -p myworkspace/src
cd myworkspace
catkin_make
# 得到
#|myworkspace|
# |src|
# |build|
# |devel|
# 2. 创建功能包myrospackage
cd src
catkin_create_pkg myrospackage roscpp rospy std_msgs #自己定义一个功能包,后面三个是依赖
# 得到
#|myworkspace|
# |src|myrospackage
# |src|CMakeLists.txt|
# | include
# | src
# | CMakeLists.txt
# | package.xml
# 3.编辑源文件
cd myrospackage/src
vim hellowold_c.cpp
# 在 hellowold_c.cpp 中写入
#include "ros/ros.h"
#
#int main(int argc, char *argv[])
#{
# //执行ros节点初始化
# ros::init(argc,argv,"hello")
# //创建ros节点句柄(非必须)
# ros::NodeHandle n;
# //控制台输出 hello world
# ROS_INFO("hello world!")
#
# return 0;
#}
# 4.编辑配置文件 myrospackage/CMakeLists.txt
需要修改两个地方:
line 136: add_executable(mynodename src/helloworld_c.cpp) #自己定义一个mynodename就可以,意思是我可以通过 mynodename 映射到 hello_c.cpp 文件
line 149: target_link_libraries(mynodename
${catkin_LIBRARIES}
)
# 5.编译并执行
回到 myworkspace/
catkin_make #编译
另外打开一个 terminal 2
roscore
在 terminal 1 中
#source ./devel/setup.bash #修改环境变量,但是这么做有局限性
# 我要是想在任意窗口下都能执行mynodename
# 可以直接配置环境变量
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
rosrun myrospackage mynodename
1.2 Helloworld( python version)
#|myworkspace|
# |src|myrospackage
# |src|CMakeLists.txt|
# | include
# | src
# | CMakeLists.txt
# | package.xml
cd rospackage
mkdir scripts
touch helloworld_p.py
! /usr/bin/env python
'''
#1.导包
import rospy
#2.编写主入口
if _name__=="__main__":
#3.初始化ros节点
rospy.init_node('mynodename_p')
#4.输出日志
rospy.loginfo('hello world!')
'''
# 添加执行权限
chmod +x helloworld_p.py
# ll #查看可执行权限
# 编辑配置文件 包/CMakeLists.txt
需要修改一个地方:
line 163: catkin_install_python(PROGRAMS scripts/helloworld_p.py DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION})
# 给python文件选解释器
# 编译并执行
# 5.编译并执行
回到 myworkspace/
catkin_make #编译
另外打开一个 terminal 2
roscore
在 terminal 1 中
#source ./devel/setup.bash #修改环境变量,但是这么做有局限性
# 我要是想在任意窗口下都能执行mynodename
# 可以直接配置环境变量
echo "source /opt/ros/noetic/setup.bash" >> ~/.bashrc
source ~/.bashrc
rosrun myrospackage
1.3 ros集成开发环境搭建
1.3.1 安装terminator
sudo apt-get install terminator
1.3.2 安装vscode
使用vscode进行项目开发
安装插件:python、c++、ros、cmake tools
(1)启动vscode
mkdir worksapce
cd worksapce
catkin_make
code .
**(2) vscode中编译ros **
vscode中 “ctrl + shift + B” 调用编译,选择catkin_make:build
然后点击"catkin_make:build"后面的小齿轮,修改vscode/tasks.json文件为:
{
"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” 就默认是catkin_make啦
(3)创建ros功能包
-
在src右键选择“create catkin package” 之后依次填写包名"hello_vscode"和依赖“ roscpp roospy std_msgs”
-
之后可以 “ctrl + shift + B”来检测你搞的有没有问题
-
得到
#|workspace|
# |src|hello_vscode|
# | include
# | src
# | CMakeLists.txt
# | package.xml
(4.1) 写cpp文件
记得修改.vscode/c_cpp_properties.json文件
(4.2) 写ptyhon文件
没啥要改的很简单
别忘了:
-
package/CMakelists.txt:(定位解释器)
catkin_install_python(PROGRAMS scripts/hello_vscode_p.py DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} )
也可以通过软链接的方式将python连接到python3
sudo ln -s /usr/bin/python3 /usr/bin/python3
-
在package/scripts/下面
chmod +x *.py
ctrl + ~ 调出终端
1.3.3 launch文件
一个程序需要启动多个节点,比如小乌龟:启动roscore、乌龟界面节点、键盘控制节点.
每个都需要调用rosrun逐一启动,效率很低。通过launch文件可以一次性启动多个launch结点
step 1 在功能包下新建文件夹launch
**step 2 在rospackage/launch/下 新建 launch.xml **
**step 3 编辑launch文件 **(代表启动roscore)
<launch>
<!--添加被执行的节点-->
<!--1.乌龟GUI-->
<!--分别代表包的名字,结点名字,你给节点起的名字-->
<node pkg="turtlesim" type="turtlesim_node" name="turtle_GUI" />
<node pkg="turtlesim" type="turtlesim_teleop_key" name="turtle_KEY" />
</launch>
step 4 运行launch文件
source ./devel/setup.bash
roslaunch hello_vscode start_turtle.launch
1.4 ros架构
ros = plumbing(通讯机制) + tools(工具软件包) + capabilities(高层技能,比如导航) + ecosystem
-
ros的核心代码由Willow Garage开发
-
ROS wiki ROS wiki是用于记录有关ROS系统信息的主要论坛,任何人都可以注册账户,贡献自己的文件。
-
ros问答: https://answers.ros.org/questions/
1.4.1 ros文件系统
ros文件系统指的是在磁盘上ros源代码的组织形式
workspace --- 自定义的工作空间
|--- build:编译空间,用于存放cmake和catkin的缓存信息,配置文件和其他中间文件
|--- devel:开发空间,用于存放编译后生成的目标文件,包括头文件,动态&静态链接库&可执行文件等
|--- src:源码
|-- package:功能包(ros基本单元),包含多个节点,库,配置文件,包名全部小写
|-- CMakeLists.txt 配置编译规则,比如源文件,依赖项,目标文件
|-- package.xml 包信息,比如:包名、版本、作者、依赖项...
|-- scripts 存储python文件
|-- include 头文件
|-- msg 消息通信格式文件
|-- srv 服务通信格式文件
|-- action 动作格式文件
|-- launch 可一次性运行多个节点
|-- config 配置信息
|-- CMakeLists.txt: 编译的基本配置
(注: msg,srv,action用于通信)
1.4.2 ros文件操作常用命令
1.增:
catkin_create_pkg package_name 依赖包 #创建新的ros功能包
2.删:
sudov apt purge package_name #删除功能包
3.查
rospack list #列出所有功能包
rospack find package_name #查找某个包是否存在
roscd package_name #进入某个功能包
rosls package_name #列出某个包下的文件
4.改
rosed package_name 文件名 #修改功能包文件
-
roscore 是ros的系统的先决条件节点和程序的集合,必须执行roscore才能使ros节点进行通信
roscore将启动:
-
ros master
-
ros 参数服务器
-
rosout日志节点
-
-
rosrun 运行指定的ros节点
rosrun 包名 节点名
-
roslaunch 运行批量ros节点
roslaunch 包名 launch文件名
1.4.3 ros计算图
前面介绍的是ros文件结构,是磁盘上ros程序的存储结构,是静态的,而ros程序运行之后,不同的节点之间是错综复杂的,ros中提供了一个实用的工具: rqt_graph
-
如果你之前安装的ros是桌面完整版是不需要单独安装rqt_graph的,直接启动即可
rosrun rqt_graph rqt_graph or rqt_graph