[笔记]ROS的粗糙笔记(奥特学园_OngoingUpdate)

本文详细介绍了ROS(Robot Operating System)的基础知识,包括如何创建工作空间、建立Hello World程序(C++和Python版本)、搭建集成开发环境(使用VSCode)以及理解ROS的文件系统和常用命令。此外,还提到了ROS计算图的概念,并展示了如何通过launch文件批量启动节点。内容覆盖了从环境准备到实际编程的全过程。
摘要由CSDN通过智能技术生成

Chapter 1 ROS概述与环境搭建

1.1 Helloworld( cpp version)

title

# 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

title

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
    

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值