ROS的基本单元node节点和package包node节点GMapping 管建图Move-base管导航wpb_core控制底盘rplidar_ros驱动雷达package包节点的容器将节点规整起来形成包第一个node节点创建package包按ctrlaltt创建在~/catkin_ws/src文件夹里catkin_create_pkg包名依赖项列表回访依赖项指令roscd在终端中进入指定软件包的文件地址创建Node节点源码编译add_executable(chao_node src/chao_node.cpp)chao_node:可执行文件的名字src/ssr_pkg_node.cpp指定从哪个代码文件进行编译快捷键ctrls:保存 ctrlshiftB:编译ctrlAltT:打开终端;ctrlshiftO:打开新终端运行Node节点1.打开终端启动ROS系统核心在终端里执行指令roscore2.确认ROS核心处于运行状态终端执行rosrun包名节点文件名总结总框架1.使用catkin_create_pkg创建一个软件包2.在软件包的src文件夹下创建一个节点的cpp源码文件3.在节点的源码文件中include包含ROS的头文件4.构建一个main函数并在函数的开头执行ros::init()5.构建while循环循环条件为ros::ok()6.在CMakeLists.txt中设置节点源码的编译规则7.编译运行ROS的只要通讯方式Topic话题与Message消息Topic话题1.话题Topic是节点间进行持续通讯的一种形式2.话题通讯的两个节点通过话题的名称建立起话题通讯连接3.话题通讯的数据叫做消息Message4.消息Message通常会按照一定的频率持续不断的发送以保证消息数据的实时性5.消息的发送方叫做话题的发布者Publisher6.消息的接收方叫做话题的订阅者Subsciber补充1.一个ROS节点网络中可以同时存在多个话题2.一个话题可以有多个发布者也可以有多个订阅者3.一个节点可以对多个话题进行订阅也可以发布多个话题4.不同的传感器消息通常会拥有各自独立话题名称每个话题只有一个发布者5.机器人速度指令话题通常会有多个发布者但同一时间只能有一个发言人Message消息消息的格式有多种用来满足不同的数据传输要求在生成消息包是要指定消息的类型在ROS中使用C编写Publisher发布者节点发布者的代码实现nh.advertisse(话题名称”缓存长度//构建消息发送对象运行新节点先打开终端roscore 再分屏运行节点rosrun ssr_pkg chao_node 再分屏rostopic list(查看名称rostopic echo /话题名称(查看消息内容再分屏 echo -e 复制上面代码控制循环频率的工具总结1.确定话题名称和消息类型2.在代码文件中include消息类型对应的头文件3.在main函数中通过NodeHandler大管家发布一个话题并得到消息发送对象4.生成要发送的信息包并进行发送数据的赋值5.调用消息发送对象的publish函数将消息包发送到话题当中常用工具rostopic list :列出当前系统中所有活跃着的话题rostopic echo 主题名称 显示指定话题中发送的信息包内容rostopic hz 主题名称统计指定话题中信息包发送频率在ROS中使用C编写Subscriber订阅者节点创建订阅者节点编译和运行打开终端第一个窗口roscore; ctrlshiftO:打开新终端rosrun ssr_pkg chao_node;再分屏rosrun atr_pkg ma_node调整和优化小结1.确定话题名称和消息类型2.在代码文件中includeros.h和消息类型对应的头文件3.再main函数中通过NodeHandler大管家订阅一个话题并设置消息接收回调函数4.定义一个回调函数对接收到的信息包进行处理5.main函数中需要执行ros::spinOnce()让回调函数能够响应接收到的信息包常用工具rqt_graph:图形化显示当前系统活跃的节点以及节点间的话题通讯关系在ROS中使用lunch文件依次启动多个节点使用launch文件启动节点XML语法标记名称 属性名1“属性值1” ...内容/标记名称编写运行lunch文件小结1.使用launch文件可以通过roslaunch指令一次启动多个节点2.在launch文件中为节点添加outputscreen属性可以让节点信息输出在终端中。ROS_WARN不受该属性控制.在launch文件中为节点添加launch-prefixgnome-terminal -e属性可以让节点单独运行在一个独立终端中。如若找不到文件就执行这个在ROS中用C实现机器人运动控制运动控制的C实现实现思路1.构建一个新的软件包报名叫做vel_pkg2.在软件包中新创建一个节点节点名叫做vel_node3.在节点中向ROS大管家NodeHandle申请发布话题/cmd_vel,并拿到发布对象vel_pub4.构建一个geometry_msgs/Twist类型的信息包vel_msg用来承载要发送的速度值5.开启一个while循环不停的使用vel_pub对象发送速度信息包vel_msg在ROS中用python实现机器人运动控制运动控制的python实现同上实现思路1.构建一个新的软件包报名叫做vel_pkg2.在软件包中新创建一个节点节点名叫做vel_node.py3.在节点中向ROS大管家rospy申请发布话题/cmd_vel,并拿到发布对象vel_pub4.构建一个geometry_msgs/Twist类型的信息包vel_msg用来承载要发送的速度值5.开启一个while循环不停的使用vel_pub对象发送速度信息包vel_msg还要再终端执行机器人仿真软件进不去就执行这个在ROS中使用RViz观测传感器数据使用RViz观测传感器数据Gazebo是模拟真实机器人发出传感器数据的工具RViz是接收传感器数据并进行显示的工具roslaunch wpr_simulation wpb_rviz.launch用来实时调控ROS系统中的激光雷达消息包格式激光雷达消息包格式rostopic echo /scan --noarr在ROS中用python实现获取激光雷达数据实现步骤1.构建一个新的软件包包名叫做lidar_pkg2.在软件包中新建一个节点节点名叫做lidar_node.py3.在节点中向ROS大管家rospy申请订阅话题/scan并设置回调函数为LidarCallback()4.构建回调函数LidarCallback()用来接收和处理雷达数据5.调用longinfo()显示雷达检测到的前方障碍物距离再打开终端执行在ROS中用python实现激光雷达避障实现步骤1.让大管家rospy发布速度控制话题/cmd_vel2.构建速度控制消息包vel_cmd3.根据激光雷达的测距数值实时调整机器人运动速度避开障碍物在ROS中使用python实现IMU数据获取imu/data_raw(sensor_msgs/lmu):加速度计输出的矢量加速度和陀螺仪输出的旋转角速度imu/data(sesor_msgs/lmu):/imu/data_raw的数据再加上融合后的四元数姿态描述imu/mag(sensor_msgs/MagneticField):磁强计输出磁强数据实现步骤1.构建一个新的软件包包名叫做imu_pkg2.在文件包中新建一个节点节点名叫做imu_node.py3.在节点中向ros大管家rospy申请订阅话题/imu/data并设置回调函数为imu_callback()4.构建回调函数imu_callback(),用来接收和处理IMU数据5.使用TF工具将四元数转换成欧拉角6.调用loginfo显示转化后的欧拉角数值再执行如下代码在ros中用python实现IMU航向锁定实现步骤1.让大管家rospy发布速度控制话题/cmd_vel2.设定一个目标朝向角当姿态信息中的朝向角和目标朝向角不一致时控制机器人转向目标朝向角ROS的标准消息包std_magsROS中的几何包geometry_msgs和传感器包sensor_msgsROS中生成自定义消息类型生成自定义消息的步骤1.构建新软件包依赖项message_generation、message_runtime.2.软件包添加msg目录新建自定义消息文件以.msg结尾3.在CMakeLists.txt中将新建的.msg文件加入add_message_files()4.在CMakeLists.txt中去掉generate_messages()注释符号将依赖的其他消息包名称添加进去5.在CMakeLists.txt中将message_runtime加入catkin_package()的CATKIN_DEPENDS6.在packkage.xml中将message_generation、message_runtime加入build_depend和exec_depend7.编译软件包生成新的自定义消息类型在ROS中使用自定义消息类型C节点新消息类型在C节点的应用1.在节点代码中先include新消息类型的头文件2.在发布或订阅话题的时候将话题中的消息类型设置为新的消息类型3.按照新的消息结构对消息包进行赋值发送或读取解析4.在CMakeList.txt文件的find_package()中添加新消息包名称作为依赖项5.在节点的编译规则中添加一条add_dependencies(),将新消息软件包名称_generate_messages_cpp作为依赖项6.在package.xml中将新消息包添加到build_depend和exec_depend中去7.运行catkin_make重新编译在ros中使用C发布自定义地图实现步骤1.构建一个软件包map_pkg依赖项里加上nav_msgs2.在map_pkg里创建一个节点map_pub_node3.在节点中发布话题/map消息类型为nav_msgs::OccupancyGrid4.构建一个nav_msgs::OccupancyGrid地图消息包并对其进行赋值5.将地图消息包发送到话题/map6.编译并运行节点7.启动RViz订阅话题/map显示地图Hector_Mapping初体验在终端运行这几条代码就可运行roslaunch wpr_simulation wpb_stage_slam.launchrosrun hector_mapping hector_mappingrosrun rviz rvizrosrun rqt_robot_steering rqt_robot_steeringlaunch启动Hector_MappingHector_Mapping的参数设置初识ROS的TF系统TF主要描述的是两个坐标系的空间关系坐标系变换在终端执行rosrun rqt_tf_tree rqt_tf_treelaunch启动Gmapping建图Gmapping的参数设置地图的保存和加载保存先打开终端执行roslaunch slam_pkg gmapping.launch然后再分屏在主目录下执行rosrun map_server map_saver -f map加载在终端先运行roscore再分屏执行rosrun map_server map_server map.yaml打开rviz就可以看到如下Navigation导航系统结构图move_base节点环境准备工作先进入工作空间源码目录然后下载工程源代码git clone https://github.com/6-robot/wpr_simulation.git)进入脚本文件夹cd wpr_simulation/scripts)执行依赖项安装脚本./install_for_noetic.sh)回退到工作空间登录cd ~/catkin_ws)编译catkin_make)进入工作空间源码目录cd catkin_ws/src)下载工程源代码git clone http://github.com/6-robot/wpb_home.git)进入脚本文件夹cd wpb_home/wpb_home_bringup/scripts)回退到工作空间根目录cd ~/catkin_ws/)编译catkin_make)将之前的地图文件复制到下图的文件夹里导航代码编写打开终端进入工作空间源码目录创建新的软件包然后编写编写完之后在终端进行编译catkin_make)运行导航程序运行机器人然后分屏执行roslaunch nav_pkg nav.launch再打开rviz添加如下内容代价地图Costmap代价地图的参数设置DWA规划器在终端中运行roslaunch wpr_simulation wpb_stage_robocup.launch然后再打开一个窗口运行roslaunch nav_pkg nav.launch快捷调参的方法在终端运行rosrun rqt_reconfigure rqt_reconfigureTEB规划器在终端安装sudo apt install ros-noetic-teb-local-planner在终端中运行roslaunch wpr_simulation wpb_stage_robocup.launch然后再打开一个窗口运行roslaunch nav_pkg nav.launch添加path项修改名称local_plan修改Line Style为Billboards添加PoseArray修改名称第一个坐标导航的C编程实现1.编写节点代码2.设置编译规则3.编译节点文件4.运行节点文件坐标导航的python编程实现1.编写节点文件2.添加可执行权限3.运行节点文件航点导航插件介绍开源ros导航插件安装依赖项无报错就是安装成功编译源码工程回到catkin_ws目录然后catkin_make进行编译运行航点导航插件的集成和启动编写代码运行下面三条指令航点导航功能的C实现编写代码配置权限运行下面三条指令相机图像获取的C实现创建一个目录创建节点添加编译规则在17行添加在120行添加在末尾添加运行在终端输入roslaunch wpr_simulation wpb_balls.launch打开仿真软件然后再执行然后开新终端执行rosrun wpr_simulation ball_random_move颜色目标识别与定位的C实现1.颜色空间转换 RGB-HSV2.二值化 分割提取目标物3.计算目标物的质心坐标节点代码添加编译规则进行编译打开终端进入catkin_ws工作空间输入catkin_make进行编译运行代码在终端内输入roslaunch wpr_simulation wpb_balls.launch然后分终端框输入rosrun cv_pkg cv_hsv_nodeROS颜色目标跟随的C实现节点代码添加编译规则进行编译打开终端进入catkin_ws工作空间输入catkin_make进行编译运行代码在终端内输入roslaunch wpr_simulation wpb_balls.launch然后分终端框输入rosrun cv_pkg cv_follow_nodeROS人脸检测的C实现节点代码添加编译规则进行编译打开终端进入catkin_ws工作空间输入catkin_make进行编译运行代码在终端内输入roslaunch wpr_simulation wpb_balls.launch然后分终端框输入rosrun cv_pkg cv_face_detect