【ROS】基础


1 基本命令

📁workspace(ROS的工作空间)
├── 📁build(在工作空间中执行catkin_make时,会在build中创建一系列的中间编译文件和中间缓存文件)
├── 📁devel(用于存储编译成功的目标可执行文件)
│ ├── 📃setup.bash
└── 📁src(用于存储新创建的程序包)
├── 📃CMakeLists.txt
├── 📁pkg1
│ ├── 📃CMakeLists.txt
│ ├── 📁include
│ ├── 📃package.xml
│ └── 📁src
├── 📁pkg2
│ ├── 📃CMakeLists.txt
│ ├── 📁include
│ ├── 📃package.xml
│ └── 📁src
└── 📁pkg3
├── 📃CMakeLists.txt
├── 📁include
├── 📃package.xml
└── 📁src

1.1 roscore 启动

# 1.启动ROS Master
roscore
# 2.启动小海龟仿真器
rosrun turtlesim turtlesim_node
# 3.启动海龟控制节点
rosrun turtlesim turtle_teleop_key

1.2 rqt_graph 系统中计算图

  • 可以清晰地了解系统节点间通信的部分信息。
  • teleop_turtle节点(键盘控制节点)通过cmd_vel(topic)向turtlesim节点(海归仿真器节点)发出消息,使得小海龟移动。
rqt_graph # 查看系统中的计算图

1.3 rosnode 节点

# 显示节点列表
rosnode list

# 查看节点的具体信息
rosnode info /节点名

1.4 rostopic 话题

# 显示topic列表
rostopic list

# 手动发布数据给topic
# rostopic pub (参数) 话题名 消息数据结构 “具体数据”
rostopic pub -r 5 /turtle1/cmd_vel geometry_msgs/Twist "linear:
  x: 1.0
  y: 0.0
  z: 0.0
angular:
  x: 0.0
  y: 0.0
  z: 0.0"

1.5 rosmsg 消息数据结构

# 查看消息数据结构
rosmsg show geometry_msgs/Twist

1.6 rosservice 服务

# 查看服务列表
rosservice list

# 在服务列表中,有个/spawn服务,可以产生一只新的海龟
rosservice call (参数) 服务名 “具体数据”

1.7 rosbag 记录

试想我们尝试让海龟以我们指定的路径移动了一回,我们想要把它记录下来,拷贝到自己的实验室再复现出来,我们就可以使用话题记录功能。

# 比如我们使用之前打开的键盘操作器让海龟移动一圈并记录下来:
rosbag record -a -O 文件名

重新开启roscore,开启海龟节点rosrun turtlesim turtlesim_node

# 复现之前的移动
rosbag play cmd_record

2 创建工作空间和编译功能包

工作空间(Workspace):存放工程开发相关文件的文件夹。类似一个IDE(例如Pycharm)新建一个工程,就是一个工作空间。包含4个文件夹:

  • src:代码空间(Source Space):放置功能包代码
  • build:编译空间(Build Space):编译过程中产生的中间文件,不用过多关注
  • devel:开发空间(Development Space):放置编译生成的可执行文件、库、脚本
  • install:安装空间(Install Space):存放可执行文件,与上面有一定重复

2.1 创建工作空间

mkdir catkin_ws  # 主目录下创建工作文件夹
cd catkin_ws
mkdir src  # 创建代码编译空间
cd src

mkdir -p ~/catkin_ws/src # -p 意为递归创建目录,即直接创建多级目录

catkin_init_workspace # 当前文件夹初始化,变成ros工作空间

cd ..                 # 回到catkin_ws目录
catkin_make           # 编译ros,生成对应文件夹
# 可以看到生成了build和devel两个新文件夹,devel存放了编译完成的内容。

# 生成install文件夹
catkin_make install   # 产生install工作空间(可写可不写)

# 每次都使用catkin_make的话效率十分低下,因为这种编译方法会编译工作空间下的所有的包
cd ~/catkin_ws/
catkin_make -DCATKIN_WHITELIST_PACKAGES=" beginner_tutorials"

# 如果需要编译两个或者多个只需要中间加分号即可:
catkin_make -DCATKIN_WHITELIST_PACKAGES="pkg1; pkg2",

2.2 创建功能包

  • 功能包是放置ROS源码的最小单元。
  • 上面我们创建了一个空的workspace(ROS的工作空间),src文件夹里面没写东西,现在我们创建一个自己的功能包。
  • 注意:同一工作空间下,不允许存在同名功能包;不同工作空间下,允许存在同名功能包。
cd ~/catkin_ws/src
catkin_create_pkg test_pkg std_msgs rospy roscpp  
# catkin_create_pkg <package_name> [depend1] [depend2] [depend3]
# <package_name>为包名
# [depend]为依赖,即指明编译的时候需要ROS中的其他功能包,如需要调用python、C++库,就要指明rospy、roscpp。

2.3 设置和检查环境变量

# 方案一:环境变量只适用于当前终端
source devel/setup.bash
source ~/.bash 

# 方案二:适应于整个计算机
echo "source ~/tutorial_ws/devel/setup.bash" >> ~/.bashrc
source ~/.bashrc

# 检查环境变量:
echo $ROS_PACKAGE_PATH:
# 输出:/home/tom/catkin_ws/src:/opt/ros/noetic/share
  • 运行ros的py文件出现的问题:
# 问题一:提示错误:/usr/bin/env: “python”: 没有那个文件或目录    
#!/usr/bin/env python3

# 问题二:python文件中出现汉语注释时,需要在文件头部添加:
# -*- coding: utf-8 -*-

2.4 功能包中的两个重要文件

2.4.1 package.xml

  • 使用xml语言描述功能包相关的信息:
    在这里插入图片描述

在这里插入图片描述

2.4.2 CMakeLists.txt

  • 描述功能包里的编译规则,使用CMake语法。
    在这里插入图片描述

3 ROS安装问题

3.1 依赖问题

下列软件包有未满足的依赖关系:
ros-noetic-desktop-full : 依赖: ros-noetic-desktop 但是它将不会被安装
依赖: ros-noetic-perception 但是它将不会被安装
依赖: ros-noetic-simulators 但是它将不会被安装
依赖: ros-noetic-urdf-sim-tutorial 但是它将不会被安装
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。

apt install libcupsimage2=2.2.10-6+deb10u1
正在读取软件包列表... 完成
正在分析软件包的依赖关系树       
正在读取状态信息... 完成       
有一些软件包无法被安装。如果您用的是 unstable 发行版,这也许是
因为系统无法达到您要求的状态造成的。该版本中可能会有一些您需要的软件
包尚未被创建或是它们已被从新到(Incoming)目录移出。
下列信息可能会对解决问题有所帮助:

下列软件包有未满足的依赖关系:
 libcupsimage2 : 依赖: libcups2 (= 2.2.10-6+deb10u1) 但是 2.3.0+deepin2-1+deepin 正要被安装
E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。

# 安装:
apt install libcups2=2.2.10-6+deb10u1

# 再安装:
apt install libcups2-dev

根据报错,一路安装下去,我的是最后会有一个依赖项的保本过高,我降级了之后就能够安装了 下列软件包有未满足的依赖关系: libgpgme-dev : 依赖: libgpgme11 (= 1.10.0-1ubuntu2) 但是 1.10.0-1ubuntu2.1 正要被安装

3.1.1 rosdep(安装系统依赖)

rosdep的安装

  • rosdep可以使用apt或pip进行安装
  • 建议使用apt进行安装,使用apt安装后rosdep可以自动地更新
  • 对于不同版本的ros,使用apt安装方法如下:
# ROS Noetic
sudo apt-get install python3-rosdep
# ROS Melodic and earlier
sudo apt-get install python-rosdep
  • 也可以使用源代码安装rosdep,安装方法如下:(假设源代码被clone到了rosdep目录下)
git clone https://github.com/ros-infrastructure/rosdep
cd rosdep
source setup.sh

rosdep的初始化

  • 安装或更新完rosdep后需要使用下面的命令初始化
  • 注意:rosdep update命令前不能加sudo
sudo rosdep init
rosdep update

rosdep的使用

  • rosdep和catkin一样都可以用来构建ros包,使用方法如下:
rosdep install PACKAGE_NAME
  • rosdep的主要用途是安装工作空间中ros包的依赖,首先切换到工作空间下,然后运行下述命令即可安装该工作空间的所有依赖:
rosdep install --from-paths src --ignore-src -r -y
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宇光_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值