ROS学习笔记-安装、环境搭建、初步体验与基本包命令

前言

本文是一篇附属文章,总文章:ROS学习笔记总纲目_Jenlibein的博客-CSDN博客



正文

 1.简要说明

本次学习主要跟进Autolabor的教程进行学习

(1)Autolabor:

        b站视频:【Autolabor初级教程】ROS机器人入门_哔哩哔哩_bilibili

        课程文档:Introduction · Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程

(2)鱼香ROS:

        b站视频:【鱼香ROS】动手学ROS2|ROS2基础入门到实践教程|小鱼带你手把手学习ROS2_哔哩哔哩_bilibili        CSDN:【ROS2机器人入门到实战】4.ROS2初体验_鱼香ROS的博客-CSDN博客

2.ROS2安装

2.1问题解决

 一开始我用原本已经安装好的Ubuntu 22.04.3系统去跟进Autolabor视频教程的安装步骤。但是到了设置安装源那一步,发现总是出现提示:无法安全地用该源进行更新,所以默认禁用该源这让人十分头疼,于是我跑到网上找解决方法,却弹出各种方案。

于是我想是不是系统的问题,于是我下载了Autolabor提供的系统版本(20.04):ubuntu-releases-20.04安装包下载_开源镜像站-阿里云

果然接下来比较顺利的完成了。

但是到了初始化rosdep时候又弹出了ERROR,这次Autolabor有给出解决方案,具体查看该页后记,即第6点:1.2.4 安装 ROS · Autolabor-ROS机器人入门课程《ROS理论与实践》零基础教程

但是个人认为这个方法又是太麻烦,我又到网上看了看,发现一个很好的方法:ROS rosdep update更新失败(简单解决)_rosdep update reading in sources list data from /e-CSDN博客

最后我发现一个最好的安装方法,就是鱼香ROS中提供的【一键安装】。相信在经历之前这么多的安装事故之后,发现【一键安装】是多么令人向往。

我们在Ubuntu中打开终端,输入以下代码:

sudo wget http://fishros.com/install -O fishros && . fishros

然后选择安装ROS2桌面版即可,我这里选择与Autolabor安装一样Ubuntu 20.04.6的ROS2 noetic版

详细安装教程参考鱼香ROS:【ROS2机器人入门到实战】3.动手安装ROS2_ros2安装-CSDN博客

注意!

Ubuntu22.04以上只支持安装ROS2

我们下载ROS1,可用一键安装里面Melodic的ROS1版本

2.2测试-ROS体验

首先启动一个终端,输入

roscore

2.2.1涂鸦乌龟

打开新的终端Ctrl+Alt+T,输入下面的指令,启动模拟器

rosrun turtlesim turtlesim_node

启动一个新的终端Ctrl+Alt+T,输入以下指令,启动遥控器

rosrun turtlesim turtle_teleop_key

此时按上下左右就可以控制乌龟了

2.2.2RQT可视化

保持前面的海龟运行状态,打开新的终端,输入rqt。

进入界面后选择以下选项

选择完成后就可以看到以上两个节点之间的数据关系了。

2.2.3拓展:信息发送与接收

此处似乎是因为ROS版本不同导致的无法运行

3.HelloWorld实现

3.1创建工作空间并初始化

1.创建文件夹

首先进入用户目录

cd ~

接着输入下述命令(首先会创建一个工作空间以及一个 src 子目录,然后再进入工作空间调用 catkin_make命令编译。我的自定义名称为Demo01_ws。)

mkdir -p 自定义空间名称/src
cd 自定义空间名称
catkin_make

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

以下命令,会在工作空间下生成一个功能包,该功能包依赖于 roscpp、rospy 与 std_msgs,其中roscpp是使用C++实现的库,而rospy则是使用python实现的库,std_msgs是标准消息库,创建ROS功能包时,一般都会依赖这三个库实现。此处自定义ROS包名为helloworld

cd src
catkin_create_pkg 自定义ROS包名 roscpp rospy std_msgs

3.2实现helloworld

进入到自定义ROS包名的文件夹中

创建cpp文件(也可以用python,则创建py文件)

这里用vim打开,当然你也可以用gedit或者vscode来写

cd helloworld
vim helloworld.cpp

粘贴以下之后打上 ( :wq )退出

#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;
}

编辑 ros 包下的 Cmakelist.txt文件(去掉原来文件下的某行#号并修改部分内容,可以用搜索功能)

add_executable(步骤3的源文件名   #此处不一定要源文件名,可以自行修改,不过用源文件名方便记忆
  src/步骤3的源文件名.cpp
)
target_link_libraries(步骤3的源文件名  #此处与第一行定义的名称一致
  ${catkin_LIBRARIES}
)

我的使用例:
add_executable(haha   #这里我就没用源文件名,随便定义名字为haha,注意不能和包名相同
  src/helloworld.cpp
)
target_link_libraries(haha
  ${catkin_LIBRARIES}
)

进入工作空间目录并编译

cd ~/Demo01_ws  #此处为你自定义的包名
catkin_make

接下来就可以执行了

先进入新的终端页面输入roscore
然后再进入另一个新的终端输入

cd 工作空间
source ./devel/setup.bash
rosrun 包名 C++节点

例:
cd ~/Demo01_ws
source ./devel/setup.bash
rosrun helloworld haha

命令行输出: HelloWorld!

source的作用

是将环境变量刷新到当前的终端窗口上,没有刷新则不能执行功能包的相关节点。

若想实现所有终端窗口都能执行功能包的相关节点则要将source ~/工作空间/devel/setup.bash添加进.bashrc文件,使用上更方便。

添加方式1: 直接使用 gedit 或 vi 编辑 .bashrc 文件,最后添加该内容

添加方式2:echo "source ~/工作空间/devel/setup.bash" >> ~/.bashrc

4.集成开发环境

4.1 安装终端

在 ROS 中,需要频繁的使用到终端,且可能需要同时开启多个窗口

这里有一款较为好用的终端:Terminator。

sudo apt install terminator

(1)快捷键

Alt+Up                                                  //移动到上面的终端
Alt+Down                                            //移动到下面的终端
Alt+Left                                                //移动到左边的终端
Alt+Right                                             //移动到右边的终端
Ctrl+Shift+O                                       //水平分割终端
Ctrl+Shift+E                                       //垂直分割终端
Ctrl+Shift+Right                               //在垂直分割的终端中将分割条向右移动
Ctrl+Shift+Left                                  //在垂直分割的终端中将分割条向左移动
Ctrl+Shift+Up                                    //在水平分割的终端中将分割条向上移动
Ctrl+Shift+Down                              //在水平分割的终端中将分割条向下移动
Ctrl+Shift+S                                      //隐藏/显示滚动条
Ctrl+Shift+F                                      //搜索
Ctrl+Shift+C                                     //复制选中的内容到剪贴板
Ctrl+Shift+V                                     //粘贴剪贴板的内容到此处
Ctrl+Shift+W                                    //关闭当前终端
Ctrl+Shift+Q                                    //退出当前窗口,当前窗口的所有终端都将被关闭
Ctrl+Shift+X                                    //最大化显示当前终端
Ctrl+Shift+Z                                    //最大化显示当前终端并使字体放大
Ctrl+Shift+N or Ctrl+Tab             //移动到下一个终端
Ctrl+Shift+P or Ctrl+Shift+Tab  //Crtl+Shift+Tab 移动到之前的一个终端

 

(2)有关各个标签之间的操作

F11                                         //全屏开关
Ctrl+Shift+T                           //打开一个新的标签
Ctrl+PageDown                   //移动到下一个标签
Ctrl+PageUp                        //移动到上一个标签
Ctrl+Shift+PageDown         //将当前标签与其后一个标签交换位置
Ctrl+Shift+PageUp              //将当前标签与其前一个标签交换位置
Ctrl+Plus (+)                         //增大字体
Ctrl+Minus (-)                       //减小字体
Ctrl+Zero (0)                        //恢复字体到原始大小
Ctrl+Shift+R                         //重置终端状态
Ctrl+Shift+G                         //重置终端状态并clear屏幕
Super+g                               //绑定所有的终端,以便向一个输入能够输入到所有的终端
Super+Shift+G                    //解除绑定
Super+t                                //绑定当前标签的所有终端,向一个终端输入的内容会自动输入到其他终端
Super+Shift+T                    //解除绑定
Ctrl+Shift+I                          //打开一个窗口,新窗口与原来的窗口使用同一个进程
Super+i                               //打开一个新窗口,新窗口与原来的窗口使用不同的进程

4.2 vscode配置

4.2.1安装

进入vscode官网,下载Linux的.deb版并安装:Documentation for Visual Studio Code

需要安装的vscode插件:(1)C++  (2)CMake Tools  (3)Python  (4)ROS

4.2.2基本配置

创建ROS工作空间

mkdir -p xxx_ws/src(必须得有 src)
cd xxx_ws
catkin_make

启动vscode

cd xxx_ws
code .                 #在该目录下启动vscode

vscode中编译ros

快捷键 ctrl + shift + B 调用编译,选择:catkin_make:build

可以点击配置设置为默认,修改.vscode/tasks.json 文件

{
// 有关 tasks.json 格式的文档,请参见
    // https://go.microsoft.com/fwlink/?LinkId=733558
    "version": "2.0.0",
    "tasks": [
        {
            "label": "catkin_make:debug", //代表提示的描述性信息
            "type": "shell",  //可以选择shell或者process,如果是shell代码是在shell里面运行一个命令,如果是process代表作为一个进程来运行
            "command": "catkin_make",//这个是我们需要运行的命令
            "args": [],//如果需要在命令后面加一些后缀,可以写在这里,比如-DCATKIN_WHITELIST_PACKAGES=“pac1;pac2”
            "group": {"kind":"build","isDefault":true},
            "presentation": {
                "reveal": "always"//可选always或者silence,代表是否输出信息
            },
            "problemMatcher": "$msCompile"
        }
    ]
}

创建 ROS 功能包:选定 src 右击 ---> create catkin package

设置包名(例:hello_vscode)添加依赖(roscpp rospy std_msgs)

在功能包的 src 下新建 cpp 文件

/*
    控制台输出 HelloVSCode !!!

*/
#include "ros/ros.h"

int main(int argc, char *argv[])
{
    setlocale(LC_ALL,"");
    //执行节点初始化
    ros::init(argc,argv,"HelloVSCode");

    //输出日志
    ROS_INFO("Hello VSCode!!!哈哈哈哈哈哈哈哈哈哈");
    return 0;
}

PS1如果没有代码提示

修改 .vscode/c_cpp_properties.json

设置 "cppStandard": "c++17"

PS2: main 函数的参数不可以被 const 修饰

PS3当ROS__INFO 终端输出有中文时,会出现乱码

解决办法:在函数开头加入下面代码的任意一句

setlocale(LC_CTYPE, "zh_CN.utf8");
setlocale(LC_ALL, "");

配置CMakeLists.txt

#C++:

add_executable(节点名称
  src/C++源文件名.cpp
)
target_link_libraries(节点名称
  ${catkin_LIBRARIES}
)


#python:

catkin_install_python(PROGRAMS scripts/自定义文件名.py
  DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION}
)

编译执行

编译: ctrl + shift + B

执行: 和之前一致,只是可以在 VScode 中添加终端,首先执行:source ./devel/setup.bash

4.3 launch文件展示

4.3.1需求

一个程序中可能需要启动多个节点,比如:ROS 内置的小乌龟案例。如何一次性启动所有节点?官方给出的优化策略是使用 launch 文件,可以一次性启动多个 ROS 节点。

4.3.2实现

1 选定功能包右击 ---> 添加 launch 文件夹

2 选定 launch 文件夹右击 ---> 添加 launch 文件

3 编辑 launch 文件内容

<launch>
    <!-- 添加被执行的节点 -->
    <!--乌龟gui-->
    <node pkg="turtlesim" type="turtlesim_node" name="turrle_GUI"/>
    <node pkg="turtlesim" type="turtle_teleop_key" name="turrle_key"/>
    <node pkg="hello_vscode" type="hello_vscode_c" name="hello" output="screen"/>
</launch>

node ---> 包含的某个节点

pkg -----> 功能包

type ----> 被运行的节点文件

name --> 为节点命名

output-> 设置日志的输出目标

运行环境:source ./devel/setup.bash

运行 launch 文件:roslaunch 包名 launch文件名

例:roslaunch hello_vscode start_turrle.launch

5.ROS架构

5.1文件系统

WorkSpace --- 自定义的工作空间

    |--- build:编译空间,用于存放CMake和catkin的缓存信息、配置信息和其他中间文件。

    |--- devel:开发空间,用于存放编译后生成的目标文件,包括头文件、动态&静态链接库、可执行文件等。

    |--- src: 源码

         |-- package:功能包(ROS基本单元)包含多个节点、库与配置文件,包名所有字母小写,只能由字母、数字与下划线组成

              |-- CMakeLists.txt 配置编译规则,比如源文件、依赖项、目标文件

              |-- package.xml 包信息,比如:包名、版本、作者、依赖项...(以前版本是 manifest.xml)

              |-- scripts 存储python文件

              |-- src 存储C++源文件

              |-- include 头文件

              |-- msg 消息通信格式文件

              |-- srv 服务通信格式文件

              |-- action 动作格式文件

              |-- launch 可一次性运行多个节点 

              |-- config 配置信息

         |-- CMakeLists.txt: 编译的基本配置

5.2文件系统相关命令

5.2.1执行

1.roscore是 ROS 的系统先决条件节点和程序的集合, 必须运行 roscore 才能使 ROS 节点进行通信。

用法:
roscore

指定端口:
roscore -p xxxx

roscore 将启动: 1.ros master  2.ros 参数服务器  3.rosout 日志节点

2.rosrun运行指定的ROS节点

rosrun 包名 可执行文件名

例:
rosrun turtlesim turtlesim_node

3.roslaunch执行某个包下的 launch 文件

roslaunch 包名 launch文件名

5.2.2功能包

  1.创建

catkin_create_pkg 自定义包名 依赖包 === 创建新的ROS功能包

sudo apt install xxx === 安装 ROS功能包

  2.删除

sudo apt purge xxx ==== 删除某个功能包(purge是不保留配置文件,若要保留则选remove)

  3.查询

rospack list === 列出所有功能包

rospack find 包名 === 查找某个功能包是否存在,如果存在返回安装路径(例:rospack find turtlesim  查询海龟功能包)

roscd 包名 === 进入某个功能包

rosls 包名 === 列出某个包下的文件

apt search xxx === 搜索某个功能包(可用通道符接"grep -i 所需功能包名"来获取所需的功能包)

  4.修改

rosed 包名 文件名 === 修改功能包文件(需要安装 vim)

比如:rosed turtlesim Color.msg

5.3计算图

说明:此处与【2.2测试】中的【2.2.2rqt可视化】一致

1.安装(如果安装的是桌面完整版就不需要安装)

sudo apt install ros-<distro>-rqt
sudo apt install ros-<distro>-rqt-common-plugins
#请使用你的ROS版本名称(比如:kinetic、melodic、Noetic等)来替换掉<distro>。

2.运行

rqt_graph
或
rosrun rqt_graph rqt_graph

可以看到网络拓扑图,该图可以显示不同节点之间的关系。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
搭建自己的机器人模型需要进行以下步骤: 1. 安装ROS和仿真工具 2. 创建ROS和机器人模型 3. 编写机器人控制程序 4. 启动仿真环境并加载机器人模型 5. 运行机器人控制程序,观察仿真结果 下面是一个简单的机器人模型搭建示例,使用ROS Kinetic和Gazebo仿真工具: 1. 安装ROS和仿真工具 在Ubuntu系统中使用以下命令安装ROS Kinetic和Gazebo仿真工具: ``` sudo apt-get update sudo apt-get install ros-kinetic-desktop-full sudo apt-get install ros-kinetic-gazebo-ros-pkgs ros-kinetic-gazebo-ros-control ``` 2. 创建ROS和机器人模型 使用以下命令创建一个名为my_robot的ROS,并在其中创建一个名为urdf的目录用于存放机器人模型文件: ``` mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src catkin_create_pkg my_robot cd my_robot mkdir urdf ``` 在urdf目录中创建一个名为my_robot.urdf的机器人模型文件,内容如下: ```xml <?xml version="1.0"?> <robot name="my_robot" xmlns:xacro="http://www.ros.org/wiki/xacro"> <link name="base_link"> <visual> <geometry> <box size="0.3 0.3 0.1"/> </geometry> </visual> </link> <joint name="base_joint" type="fixed"> <parent link="world"/> <child link="base_link"/> <origin xyz="0 0 0.05"/> </joint> <link name="left_wheel_link"> <visual> <geometry> <cylinder length="0.05" radius="0.1"/> </geometry> </visual> </link> <joint name="left_wheel_joint" type="continuous"> <parent link="base_link"/> <child link="left_wheel_link"/> <origin xyz="0.15 0 -0.05"/> <axis xyz="0 1 0"/> </joint> <link name="right_wheel_link"> <visual> <geometry> <cylinder length="0.05" radius="0.1"/> </geometry> </visual> </link> <joint name="right_wheel_joint" type="continuous"> <parent link="base_link"/> <child link="right_wheel_link"/> <origin xyz="0.15 0 0.05"/> <axis xyz="0 1 0"/> </joint> </robot> ``` 这个机器人模型由一个长方体的底座和两个圆柱形的轮子组成,使用URDF格式描述。其中base_link表示机器人的底座,left_wheel_link和right_wheel_link分别表示左右两个轮子。 3. 编写机器人控制程序 在ROS的src目录中创建一个名为my_robot_control.cpp的控制程序文件,内容如下: ```cpp #include <ros/ros.h> #include <geometry_msgs/Twist.h> int main(int argc, char** argv) { ros::init(argc, argv, "my_robot_control"); ros::NodeHandle nh; ros::Publisher cmd_vel_pub = nh.advertise<geometry_msgs::Twist>("cmd_vel", 10); ros::Rate loop_rate(10); while (ros::ok()) { geometry_msgs::Twist cmd_vel; cmd_vel.linear.x = 0.1; cmd_vel.angular.z = 0.5; cmd_vel_pub.publish(cmd_vel); ros::spinOnce(); loop_rate.sleep(); } return 0; } ``` 这个控制程序使用ROS的Twist消息类型发布机器人的线速度和角速度,以控制机器人的运动。在这个示例中,机器人线速度为0.1,角速度为0.5。 4. 启动仿真环境并加载机器人模型 使用以下命令启动Gazebo仿真环境,并加载机器人模型: ``` roslaunch my_robot my_robot.launch ``` 在my_robot中创建一个名为my_robot.launch的启动文件,内容如下: ```xml <?xml version="1.0"?> <launch> <arg name="model" default="$(find my_robot)/urdf/my_robot.urdf"/> <param name="robot_description" textfile="$(arg model)" /> <node name="spawn_urdf" pkg="gazebo_ros" type="spawn_model" args="-urdf -model my_robot -param robot_description -x 0 -y 0 -z 0"/> <node name="my_robot_control" type="my_robot_control" pkg="my_robot"/> <node name="gazebo_gui" pkg="gazebo" type="gazebo"/> </launch> ``` 这个启动文件首先将机器人模型文件加载到ROS参数服务器中,然后使用gazebo_ros的spawn_model节点将机器人模型加载到Gazebo仿真环境中。同时运行my_robot_control程序节点控制机器人运动。最后启动Gazebo仿真环境的GUI界面。 5. 运行机器人控制程序,观察仿真结果 使用以下命令运行my_robot_control程序节点,控制机器人运动: ``` rosrun my_robot my_robot_control ``` 可以观察到仿真环境中的机器人开始运动,同时在控制程序的终端输出中可以看到机器人的线速度和角速度。 下图为搭建自己的机器人模型的结果截图: ![ROS机器人仿真结果截图](https://i.imgur.com/lv9v5a1.png)

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值