ROS学习笔记一——初识ROS、节点、话题

感谢b站up 机器人工匠阿杰
文章仅供个人学习使用

Ubuntu使用

终端快捷键

打开终端:ctrl+alt+T

超级终端窗口:
ctrl+shift+E 左右分割
ctrl+shift+O 上下分割
ctrl+shift+W 关闭焦点窗口
alt+方向键 切换焦点

终端中复制粘贴:ctrl+shift+C、ctrl+shift+V
终止程序:ctrl+C
上一条指令:上方向键

文件操作

mkdir 文件夹名  #建立文件夹
cd 目录      #进入目录
cd ~    #回到根目录
roscd 软件包    #直接进入软件包地址:
ls    #展示文件
code 文件    #用vscode打开

ATP源、ros软件包应用商店

找资源

寻找ros 软件包、源码库、依赖项等资源:
index.ros.org
闪电表示是否已发布(可以用APT下载)
点进去website详细信息
请添加图片描述安装git
可以使用git下载源码

sudo apt install git

安装指定的包:

sudo apt install ros-ROS版本名称-Name
例:
sudo apt install ros-noetic-rqt-robot-steering

安装的包在/opt/ros/noetic/share中。
与工作空间catkin_ws下的包的区别:
通过apt下载的包都是现成的可执行文件,而工作空间中的文件是源码文件,需要编译后运行

运行节点:

roscore
#以下新终端运行:
rosrun 包名 节点名

常用节点

仿真小乌龟
turtlesim turtlesim_node
订阅话题:/turtle1/cmd_vel

键盘控制
rosteleop_twist_keyboard teleop_twist_keyboard.py
话题重映射到小乌龟:cmd_vel:=/turtle1/cmd_vel

拖动控制
rqt_robot_steering rqt_robot_steering
界面可设置话题

创建工作空间

工作空间环境

建立

midir catkin_ws/
cd catkin_ws/
midir src
cd src
git clone 粘贴wpr_simulation软件包地址

wpr_simulation包下,scripts目录用于放置脚本文件和python程序,一般只编译一次。
此目录下右键终端打开:

./install_for_noetic.sh

回到工作空间入口,对所有源代码进行编译:

cd ~/catkin_ws/
catkin_make

wpr_simulation源码包可以进行更新

cd ~/catkin_ws/src/wpr_simulation/
git pull

测试
使用source 将工作空间中的环境参数加载到终端程序中
使用roslaunch 运行编译好的ros程序——Gazabo

source ~/catkin_ws/devel/setup.bash
roslaunch wpr_simulation wpb_simple.launch

将source指令添加到终端程序初始化脚本

gedit ~/.bashrc

文件末尾新增加

source ~/catkin_ws/devel/setup.bash

用git方式下载软件包源代码

cd catkin_ws/src/
git clone https://....

vscode

下载.deb,在终端打开目录,安装

sudo dpkg -i code......deb    (tab键补全)

任意位置终端输入code,打开。
导入工作空间
file -> Add Folder to Workspace -> 选择src子目录
安装扩展: CMake Tools、ROS
利用ros插件添加头文件
设置编译快捷键 :ctrl+shift+B 等效于:

cd catkin_ws
catkin_make

新建 Package包、Node节点

新建包

cd catkin_ws/sr
catkin_create_pkg 包名 依赖项列表
#例:
catkin_create_pkg ssr_pkg roscpp std_msgs

编写节点文件
在创建的包中的src文件夹中,新建.app文件作为节点源码
例:创建 first_node.cpp

编译
编译前一定先保存!
在CMakeLists.txt中添加编译规则

1.注释中找到build章节,下划到Declear a C++executable项:声明一个C++可执行文件:
add_executable(${PROJECT_NAME}_node src/ssr_pkg_node.cpp)

2.同样build章节下,找到Specify Librarise项,链接ros库:
target_link_libraries(${PROJECT_NAME}_node
${catkin_LIBRARIES}
)

例:

add_executable(first_node src/first_node.cpp)

target_link_libraries(first_node
  ${catkin_LIBRARIES}
)

ctrl+shift+B编译

运行
运行节点:

roscore
#以下新终端运行
rosrun ssr_pkg first_node

发布和订阅话题

发布话题

#include <ros/ros.h>
#include <std_msgs/String.h>

int main(int argc, char *argv[])//注意删除const
{
    ros::init(argc,argv,"first_node");//第三个参数是节点名称
    ros::NodeHandle nh;
    ros::Publisher pub = nh.advertise<std_msgs::String>("topic1",10);//<消息包::消息类型>("话题名称",消息缓存数)
    
    ros::Rate loop_rate(10);//生成频率对象,名随便写,参数是每秒钟执行的次数
    while(ros::ok())
    {
        std_msgs::String msg;
        msg.data = "hello everybody  大家好";//话题的消息
        pub.publish(msg);

        loop_rate.sleep();
    }
    return 0;
}

订阅话题

例:同时订阅两个话题

#include <ros/ros.h>
#include <std_msgs/String.h>

void first_callback(std_msgs::String msg)//参数就是接收的消息包类型
{
    ROS_INFO(msg.data.c_str());
}
void second_callback(std_msgs::String msg)
{
    ROS_WARN(msg.data.c_str());
}

int main(int argc, char *argv[])
{
    setlocale(LC_ALL,"zh_CN.UTF-8");
    ros::init(argc,argv,"motor_node");

    ros::NodeHandle nh;
    ros::Subscriber sub =nh.subscribe("topic1",10,first_callback);//(话题,缓存数量,接收消息包的回调函数名)
    ros::Subscriber sub_2 =nh.subscribe("topic2",10,second_callback);

    while(ros::ok())
    {
        ros::spinOnce();  //查看是否有消息
    }

    return 0;
}

查看话题

rostopic list     #查看活跃话题:
rostopic echo /topic1 #查看消息内容
rostopic hz /topic1 #查看每秒消息发送的个数
rqt_graph  #图形化显示话题通讯关系

不只是发布者产生话题,订阅者也可以产生话题

  1. 一个ROS节点网络中,可以同时存在多个话题。
  2. 一个话题可以有多个发布者,也可以有多个订阅者。
  3. 一个节点可以对多个话题进行订阅,也可以发布多个话题。
  4. 不同的传感器消息通常会拥有各自独立活题名称,每个话题只有一个发布者。
  5. 机器人速度指令话题通常会有多个发布者,但是同一时间只能有一个发言人。

launch同时启动多个节点

新建launch文件
将其放在随便某个软件包里都可以
test.launch:

<launch>
    <node pkg="ssr_pkg"  type="first_node"  name="first_node" />
    <node pkg="ssr_pkg"  type="second_node"  name="second_node" />
    <node pkg="atr_pkg"  type="motor_node"  name="motor_node" output="sscreen" />
</launch>

其中的output="screen"意思是将输出指定为屏幕,只对ROS_INFO()产生影响,而ROS_WARN不用指定也能输出。
若希望某个节点在独立的终端输出,可添加属性 launch-prefix=“gnome-terminal -e”
不需要描述roscore,因为launch文件的机制是只要包含节点的描述就会自动启动roscore

启动launch:

roslaunch atr_pkg test.launch

其他

cmake和catkin

CMake是一个跨平台的编译工具,可以用来生成Makefile或Visual Studio等构建工具的配置文件,以实现源代码到可执行文件的编译过程。在ROS中,CMake被广泛应用于构建ROS软件包(packages)。

Catkin是ROS中的一种构建系统,旨在简化ROS软件包的构建、安装和依赖管理过程。它通过封装CMake构建系统,并提供了一些ROS专有的工具和命令,使得ROS软件包的开发和管理变得更加高效和方便。

二者之间的联系在于,Catkin是基于CMake的,它扩展了CMake并添加了一些ROS特有的功能。Catkin使用CMake来生成ROS软件包的构建系统,其中包括C++/Python源代码编译、依赖管理、安装等。与传统的CMake项目不同,Catkin还为ROS提供了一些特殊的目录结构,并且约定了一些命名规则和依赖项,以最大程度地减少ROS软件包之间的冲突和兼容性问题。

在ROS系统中,CMake和Catkin常用于以下场景:

构建ROS软件包:你可以使用CMake和Catkin来构建ROS软件包,包括C++和Python的代码编译、库依赖管理和安装等。
管理ROS依赖项:ROS软件包通常有许多依赖项,这些依赖项可以由Catkin来管理,并且可以通过CMake文件进行配置和控制。
定义ROS节点、服务和消息:你可以使用ROS中的catkin工具生成ROS节点、服务和消息的框架代码模板,然后使用C++或Python编写ROS节点等功能。
  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值