ROS学习记录

目录

一、ROS是什么?

二、ROS核心概念

三、调用c++、python文件

C++:

Python:

四、ROS命令行工具

(一)初始化,产生一个海龟

(二)查看显示计算图

(三)查看节点

(四)查看/发布话题消息

(五)查看消息结构

(六)显示/发布服务请求

7、创建空间与功能包

8、发布者publisher的编程实现

9、订阅者Subscriber的编程实现

10、话题消息的定义与使用

(一)自定义话题消息

(二)创建发布者代码

(三)创建订阅者代码

(四)配置代码的编译规则

(五)编译并运行发布者和订阅者(步骤同前<发布者>、<订阅者>两讲) 

11、客户端Client的编程实现

12、服务端Server的编程实现

13、服务数据的定义与使用

14、参数的使用与编程方法

以下待完成

15、服务数据的定义与使用

16、ROS中的坐标系管理系统

17、tf坐标系广播与监听的编程实现

18、launch启动文件的使用方法

19、常用可视化工具的使用


常用:ros机器人操作流程

常用操作:

1、gedit . bashrc      //查看编辑.bashrc,如果ip地址变化,需要更改.bashrc中#export.的相关内容。

2、source . bashrc    //更新.bashrc文件

3、更换地图,在robot_ws中找到navigate.launch,更改地图名字(地图名在小车的主目录maps下找,注意要删掉相关地图的.yaml文件中maps\p01.yaml的红色字部分)

4、具体步骤

1、连接到同一个wifi

2、远程连接ssh nxbot2@192.168.3.169

3、启动底盘roslaunch rikibot bringup_old.launch

4、远程+启动导航 roslaunch rikibot navigate.launch

5、启动图形界面rviz

      软件中地图匹配 匹配箭头要与小车正前方的方向一致。

7、远程+多点导航 roslaunch  smart_nav point.launch

夸克小主机quark linux mini操作流程

1、连接Wi-Fi:

切换到root用户

$ su root        //密码:quark

开启Wi-Fi:

$ nmcli r wifi on        //别漏了 r

扫描附近的Wi-Fi: 

$ nmcli dev wifi

 连接到特定的Wi-Fi:

$ nmcli dev wifi connect "SSID" p-a-ssword "PASSWORD" ifname wlan0

例如:

注:p-a-ssword用的时候去掉 “ - ”,因为文章不允许出现这个关键词。   

$ nmcli dev wifi connect "xiaobo" p-a-ssword "12345678" ifname wlan0

$ nmcli dev wifi connect "TP-LINK_EA" p-a-ssword "11111111" ifname wlan0 //朋哥的路由器

重启网卡设备

sudo ifconfig wlan0 down
sudo ifconfig wlan0 up

连接成功后,下次开机,WiFi 也会自动连接,但是需要打开wifi。

2、重新开机后 简便wifi连接操作如下:

切换到root用户

$ su root        //密码:quark

开启Wi-Fi:

$ nmcli r wifi on        //别漏了 r

然后就可以远程连接quark夸克小主机啦。

3、远程连接quark

获取开发板的ip地址(屏幕太小用shift+pageup翻页)

ifconfig

远程桌面连接(密码:quark)

ssh pi@192.168.204.32                //xiaobo热点

ssh pi@192.168.63.127                //朋哥路由器TP-LINK_EA

注:笔记本和quark小主机要在同一个局域网下,比如xiaobo的手机热点


高配小车启动

1、远程ssh nxbot5@192.168.3.163   密码666
     启动地盘 roslaunch rikibot bringup_old_4_19.launch
2、远程同上;启动导航文件  roslaunch rikibot navigate_4_19.launch
3、打开rviz ,手动给初始位姿
4、远程同上;启动定点程序  rosrun smart_nav point_nav 20220623_bigroom.txt
     启动后,按1  开始定点导航


gmapping代码移植

1、下载gmapping和navigation源码

 sudo apt install ros-melodic-gmapping        //下载源码

 sudo apt install ros-melodic-navigation        //下载导航文件

2、编译

2.1 缺什么包安装什么包、

2.2 相关文件报错->压缩、删除

进入到/home/nxbot5/robot_ws/src/feature/addfile/src/scan_ultr_merge.cpp:24位置,把inlcude路径从/howe/nxbot2/robot_ws/devel/include/riki_msgs/Hcrs.h修改为/howe/nxbot5/robot_ws/devel/include/riki_msgs/Hcrs.h

3、启动底盘bringup_old_4_19.launch,配置雷达和底盘的端口。
常用操作命令:

ls /dev/ttyUSB*        //查看USB端口

ls ...

服务机器人绑定雷达端口和绑定底盘步骤_holdtao的博客-CSDN博客

4、costmap_2wd_params.yaml 改变小车的长宽4个点的坐标。

4、bringup底盘launch文件中改变base link和base footprint的tf坐标参数和旋转参数(一圈为π 3.1415926)。其中base link是base footprint + Z方向变量。base footprint是车轮中轴点。

5、雷达建图后保存地图,rosrun …… -f maps/文件名。要在文件名.yaml 中把路径maps删除掉。导航时,要在nxbot5->rikibot->rikibot_project->launch->navigate_4_19.launch中改对应的地图名.yaml

6、使用move base,从而包含路径规划器。进而启动navigate_4_19.launch导航。


        注意:本实验ROS版本为Melodic 1.14.12,而古月老师视频中是Melodic 1.14.3。

一、ROS是什么?

1、ROS系统是由通信机制、开发工具、应用功能、生态系统的4大部分组成的。

2、ROS系统创立的目的是 提高机器人研发中的软件复用率。

二、ROS核心概念

1、节点(node)——执行单元,类似于库、ip核、模块等概念。其中节点在系统中的命名必须是唯一的。

2、节点管理器(ROS Master)——控制中心。

3、话题(topic)——异步通信机制,它是传输数据的总线。

4、消息(message)——话题数据,编译生成 .msg文件。

5、服务(service)——同步通信机制,编译生成 .srv文件。与异步通信机制的区别是同步通信能及时返回应答数据,实时性更好。

6、参数(parameter)——全局共享字典,用于存放静态的、不经常改变的变量。

7、功能包(package)——ROS软件中的基本单元。

 

硬件架构:

        一个典型的ROS移动机器人的硬件构造包括:带编码器的减速电机、电机驱动板、IMU模块、激光雷达、ROS主机、麦克风、摄像头、喇叭。带编码器的减速电机、电机驱动板、IMU模块、激光雷达应该是SLAM导航避障的标配硬件,ROS主机是机器人的计算中心(运行SLAM导航算法等),麦克风、摄像头、喇叭是完成语音交互和图像感知时需要的。        

三、调用c++、python文件

C++:

① 打开终端;(ctrl + alt + t)

② cd  到对应的文件夹;                        例:cd  linux

 ③ g++ 文件名.cpp –o 文件名;            例:g++ c++_class.cpp -o  c++_class

 ④ ./文件名;                                        例:./c++_class

Python:

① 打开终端                                      

② cd  到对应的文件夹                       例:cd linux

③ python 文件名.py                           例:python python_class.py

四、ROS命令行工具

(一)初始化,产生一个海龟

①终端输入命令roscore

②新开一个终端,输入命令rosrun turtlesim后回车键会报错,解决方法是输入命令后双击Tab键。

③终端输入命令rosrun turtlesim turtlesim_node

④新开一个终端,输入命令rosrun turtlesim turtle_teleop_key

(二)查看显示计算图

rqt_graph:可视化显示计算图(查看节点、话题之间的通信关系)

(三)查看节点

rosnode:显示系统中相关节点的指令,如果不会用,输入rosnode命令后,直接回车,会产生帮助信息。

rosnode list:列出所有节点。

rosnode info /turtlesim:显示turtlesim节点的具体信息。

(四)查看/发布话题消息

rostopic:显示系统相关话题的指令。

rostopic list:列出所有话题。

例如:/turtle1/cmd_vel 是控制海龟运动的话题。

接下来,使用命令行来控制海龟运动。其中pub指令意为发布(publicize)。

命令行:rostopic pub -r 10 +话题名+内容的消息结构+消息结构中的具体数据。

解析:

①、rostopic pub                           “话题 + 发布指令”

②、-r 10                                       “循环发布10次消息”

③、/turtle1/cmd_vel                     “话题名”

④、geometry_msgs/Twist            “内容的消息结构”

⑤、linear:          “linear位移”                     //消息结构中的具体数据

       angular:      “angular角度”

(五)查看消息结构

rosmsg show geometry_msgs/Twist:查看“消息”的具体结构

(六)显示/发布服务请求

rosservice :显示服务指令。

rosservice list: 列出所有消息。其中/spawn服务的含义为 “产生”。

可以通过/spawn指令来产生第2只海龟,命令为 rosservice call /spawn

发布服务请求的解析:

                        rosservice call /spawn

                    "     x: 0.0             //xy代表新海龟产生的坐标

                          y: 0.0

                          theta: 0.0         //theta代表新海龟产生的角度

                          name: ' '           // ''里填写新海龟的名字

                    "       

(七)话题记录

命令行:$ rosbag record -a -O cmd_record

        用于记录实验数据,例如无人机的飞行数据,方便以后测试。也可以用于小海龟的路径复现。

(八)话题复现

命令行:$ rosbag play cmd_record.bag

用于复现实验数据。但实际在使用"rosbag record 主题"来保存bag包的时候,往往会生成以.bag.active为后缀的文件,而只有将之恢复成正常的以".bag"为后缀的包,我们才能正常进行rosbag play等操作。具体参考ros中bag包的恢复_行且歌的博客-CSDN博客_rosbag修复

7、创建空间与功能包

(一)工作空间:是存放工程的文件夹

        src:代码空间(Source Space)

        build:编译空间(Build Space)

        devel:开发空间(Development Space)

        install:安装空间(Install Space)

(二)步骤:

①创建工作空间  

        $ mkdir -p ~/catkin_ws/src   //创建catkin_ws/src文件

        $ cd ~/catkin_ws/src        //跳转到src文件夹

        $ catkin_init_workspace     //初始化空间,变成ros系统的工作空间

②编译工作空间

        $ cd ~/cakin_ws/       //返回到cakin_ws路径下,也可以用cd ..返回上一级

        $ catkin_make                  //构建工作空间workspace中的代码

        $ catkin_make install              //产生安装空间

③创建功能包:

        $ cd src/

$ catkin_create_pkg test_pkg std_msgs rospy roscpp  //ROS标准信息结构、python、C++等

④编译功能包

$ cd ~/cakin_ws/             

$ catkin_make

⑤设置环境变量

$ source devel/setup.bash

⑥检查环境变量

$ echo $ROS_PACKAGE_PATH

8、发布者publisher的编程实现

常用的ROS通信:

1、message节点通信(常见)

2、service节点通信(常见)

掌握了message、service就掌握了绝大多数ROS通信的任务场景了。

《------------03.激光SLAM无人驾驶基础到实战视频课程  中国慕课MOOC截图---------》

《----------------------------古月居视频步骤-----------------------------》

(一)创建功能包

$  cd catkin_ws/

$  cd src/    //在src文件下创建功能包

$ catkin_create_pkg learning_topic roscpp rospy std_msgs geometry_msgs turtlesim

(二)创建发布者代码(C++/python)

①  如何实现一个发布者(代码整体思路):

       ●初始化ROS节点;    //ros:: 是 作用域

       ●向ROS Master注册节点信息,包括发布的话题名和话题中的消息类型;

       ●创建消息数据;

       ●按照一定频率循环发布消息。

②在CMakeLists.txt文本中加入2行代码

       add_executable(velocity_publisher src/velocity_publisher.cpp)

       target_link_libraries(velocity_publisher ${catkin_LIBRARIES})

③编译并运行发布者(C++版本)

$ cd catkin_ws/                 //返回到根目录catkin_ws。

$ catkin_make                   //编译C++文件。

$ source devel/setup.bash       //配置环境变量,也叫脚本文件。
       //在隐藏文件.bashrc已经配置了开机自启动,下次不用再配置。

    //这也是脚本文件的方便之处,可配置部分程序开机自启动。

$ roscore         //一般第1个命令是roscore,它启动节点间的通信。

$ rosrun turtlesim turtlesim_node      //启动小海龟界面。

    $ rosrun learning_topic velocity_publisher

//跑velocity_publisher的C++指令。

④运行发布者(python版本)

$ cd catkin_ws/                 //返回到根目录catkin_ws。

$ source devel/setup.bash      //配置环境变量,也叫脚本文件。下次不用再配置。

$ cd catkin_ws/

$ roscore         //一般第1个命令是roscore,它启动节点间的通信。

$ rosrun turtlesim turtlesim_node      //启动小海龟界面。

$ rosrun learning_topic                //之后按2次Tab键

    $ rosrun learning_topic velocity_publisher

//跑velocity_publisher的python指令。

注意:要把.py文件在右键属性-权限-执行-允许作为程序执行文件

9、订阅者Subscriber的编程实现

《------------03.激光SLAM无人驾驶基础到实战视频课程  中国慕课MOOC截图---------》

 

 

《----------------------------古月居视频步骤-----------------------------》

(一)创建发布者代码(C++/python)

①如何实现一个订阅者(代码整体思路):

       ●初始化ROS节点;

       ●订阅需要的话题;

       ●循环等待话题消息,接收到消息后进入回调函数;

       ●在回调函数中完成消息处理。

②在CMakeLists.txt文本中加入2行代码(和发布者代码有区别)。

       add_executable(pose_subscriber src/pose_subscriber.cpp)

target_link_libraries(pose_subscriber ${catkin_LIBRARIES})

位置如下:

(二)编译并运行订阅者

$ cd catkin_ws/                 //返回到根目录catkin_ws。

$ catkin_make                   //编译C++文件。

$ source devel/setup.bash       //配置环境变量,也叫脚本文件。
       //在隐藏文件.bashrc已经配置了开机自启动,下次不用再配置。

    //这也是脚本文件的方便之处,可配置部分程序开机自启动。

$ roscore         //一般第1个命令是roscore,它启动节点间的通信。

$ rosrun turtlesim turtlesim_node      //启动小海龟界面。

    $ rosrun learning_topic velocity_publisher

//跑velocity_publisher的C++指令。

订阅者通过 pose_subscriber.cpp文件来订阅显示小海龟运行结果图。

(三)通过python实现(python不用编译)

    前面步骤同C++的步骤,启动小海龟界面之后按以下步骤来。

$ rosrun learning_topic    //之后按两次Tab键

$ rosrun learning_topic pose_subscriber //然后再在里面选择对应的.py文件,但是不能文件名不能带.py 

以下为错误示范:$ rosrun learning_topic pose_subscriber.py

报错信息:

10、话题消息的定义与使用

(一)自定义话题消息

①定义.msg文件

②在package.xml中添加功能包依赖

        <build_depend>message_generation</build_depend>

       <exec_depend>message_runtime</exec_depend>

③在CmakeList.txt中添加编译选项

④在根目录catkin_ws下执行编译命令catkin_make

    会在catkin_ws – devel - include - learning_topic产生Person.h文件,就是把.msg文件转换成了.h的文件。

(二)创建发布者代码

(三)创建订阅者代码

#include  “ …” ;代表用户自定义的头文件。

#include  <…> ;代表系统定义的头文件。

(四)配置代码的编译规则

在CmakeList.txt中添加依赖项:

add_executable(person_publisher src/person_publisher.cpp)

target_link_libraries(person_publisher ${catkin_LIBRARIES})

add_dependencies(person_publisher ${PROJECT_NAME}_generate_messages_cpp)

add_executable(person_subscriber src/person_subscriber.cpp)

target_link_libraries(person_subscriber ${catkin_LIBRARIES})

add_dependencies(person_subscriber ${PROJECT_NAME}_generate_messages_cpp)

(五)编译并运行发布者和订阅者(步骤同前<发布者>、<订阅者>两讲) 

①C++实现

复制<发布者>和<订阅者>的C++代码,放到catkin_ws – src - learning_topic – src位置下。然后编译、执行C++文件。

$ catkin_make     //编译C++文件。

$ roscore         // roscore命令启动节点间的通信。

注意:必须在根目录catkin_ws下执行以下2个命令,否则会报错

$ rosrun learning_topic person_subscriber     //运行订阅者。

    $ rosrun learning_topic person_publisher  //运行发布者。

②Python实现

$ roscore         // roscore命令启动节点间的通信。

注意:必须在根目录catkin_ws下执行以下2个命令,否则会报错

$ rosrun learning_topic         //之后按2次Tab键

$ rosrun learning_topic person_subscriber     //运行订阅者。

$ rosrun learning_topic         //之后按2次Tab键

    $ rosrun learning_topic person_publisher  //运行发布者。

实验效果图:

11、客户端Client的编程实现

<尖括号>代表数据类型,”引号”的字符串代表相关名字。

Call是一种函数方法,会发出srv命令并等待。

实现步骤:

实现图:

12、服务端Server的编程实现

最后一行命令要注意call和_command后面有一个空格!!!否则会报错!

13、服务数据的定义与使用

从图中可以看出:第一个蓝色框:<客户端>请求<服务端>显示人物信息,并在服务端显示结束后,返回OK。

第二个蓝色框:<服务端>接收到<客户端>要显示的人物信息后,打印输出。

14、参数的使用与编程方法

1、命令行操作

黄色框1:获取当前ros系统版本名称。

黄色框2:获取ros系统版本号。

黄色框3:以param名字保存文件(rosparam dump param.yaml)       。

黄色框4:修改yaml文件,并且加载到系统中(rosparam load param.yaml)。

黄色框5:调用刚加载的yaml文件(rosservice call /clear "{}"),可以看到海龟仿真器背景颜色发生了变化。

2、cpp文件操作

运行后海龟背景颜色会有蓝色变为白色。但是本次实验没成功,背景没有变颜色。

以下待完成

15、服务数据的定义与使用

16、ROS中的坐标系管理系统

17、tf坐标系广播与监听的编程实现

18、launch启动文件的使用方法

19、常用可视化工具的使用


五、ros常用命令含义

1.      git clone GitHub - hitcm/ceres-solver-1.11.0

2.      cd ceres-solver-1.11.0/build

3.      cmake ..

4.      make –j

5.      sudo make install

1、使用git工具 下载源码等

         git clone GitHub - hitcm/ceres-solver-1.11.0

2、cmake ..       

        使用 ../CMakeLists.txt 文件作为起始点在当前目录中生成makefile

3、make –j2

        使用2核 来编译程序。 

4、sudo make install:

        将程序安装至系统中。如果代码编译无误,且执行结果正确,便可以把程序安装至系统预设的可执行文件存放路径。默认/usr/local/bin。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

内有小猪卖

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

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

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

打赏作者

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

抵扣说明:

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

余额充值