目录
(五)编译并运行发布者和订阅者(步骤同前<发布者>、<订阅者>两讲)
常用: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。