编写该教程的目的是希望实验室新生能够快速利用C++进行ros编程,目的是快速实现功能,因此本身并不严谨,后续会不断进行补充,配套代码会在之后建立git库进行发布。

ROS相关

1. 新建ros工作空间, 并且添加到环境变量

1.1 新建工作空间

mkdir -p ~/catkin_ws/src
cd ~/catkin_ws/src
catkin_init_workspace
cd ~/catkin_ws/
catkin_make

1.2 添加环境变量

sudo gedit ~/.bashrc
在文件最后,添加这一行
source ~/teach_ws/devel/setup.bash

2. 新建功能包

cd src
catkin_create_pkg test std_msgs rospy roscpp
cd ~/catkin_ws
catkin_make

3. 功能包中添加文件,实现打印"hello world"

3.1 新建.cpp文件,并且编辑对应功能,这里和普通c++相同

# 进入功能包的src文件
cd ~/teach_ws/src/test/src# 新建cpp文件
touch main.cpp#编辑cpp,实现打印
#include <iostream>
using namespace std;int main(int argc, char** argv)
{cout<<"hello"<<endl;
}

3.2 修改 ~/teach_ws/src/test/CMakeLists.txt文件,修改如下

cmake_minimum_required(VERSION 3.0.2)
project(test)find_package(catkin REQUIRED COMPONENTSroscpprospystd_msgs
)catkin_package(
)include_directories(
# include${catkin_INCLUDE_DIRS}
)add_executable(hellosrc/main.cpp)target_link_libraries(hello${catkin_LIBRARIES}
)

3. 3 运行程序

roscore
rosrun test hello

4. 运行现成功能包,并且查阅可用消息

以realsense_ros包为例,该包可以实现启动realsense相机,并且将图像数据发布出去

4.1 编译功能包

# 1. 将realsense_ros copy进工作空间的src中# 2. cd ~/teach_ws# 3.catkin_make

4.2 运行功能包

roslaunch realsense2_camera rs_d400_and_t265.launch

4.3 查看所有的可监听消息

rostopic list

4.4 查看消息具体内容

rostopic echo /t265/odom/sample

4.5 查看消息的type

rostopic info /t265/odom/sample
结果
Type: nav_msgs/OdometryPublishers: * /t265/realsense2_camera_manager (http://wuzp-HP-ENVY-Notebook:46859/)Subscribers: None

4.6 显示图像类消息

rqt_image_view

4.7 rviz的使用

待补充

5. 订阅消息

在进行建图时,我们需要知道位姿信息和点云信息或者深度图信息,这两个信息可通过4中介绍的方法发布出来,但是我们自己的程序需要实现对这些消息的订阅

5.1 修改功能包的CMakeLists.txt, 使得功能包能够实现包含进入opencv, Eigen等库

cmake_minimum_required(VERSION 3.0.2)
project(test)find_package(catkin REQUIRED COMPONENTSroscpprospystd_msgsnav_msgsvisualization_msgstfcv_bridge
)find_package(Eigen3 REQUIRED)
find_package(PCL 1.7 REQUIRED)
find_package(OpenCV REQUIRED)
set(Eigen3_INCLUDE_DIRS ${EIGEN3_INCLUDE_DIR})catkin_package(INCLUDE_DIRS include
)include_directories(includeSYSTEM${catkin_INCLUDE_DIRS}${Eigen3_INCLUDE_DIRS}${OpenCV_INCLUDE_DIRS}
)set(CMAKE_CXX_FLAGS "-std=c++17 ${CMAKE_CXX_FLAGS} -O3 -Wall -pthread") # -Wextra -Werror
set(CMAKE_BUILD_TYPE "RELEASE")add_executable(hellosrc/main.cpp)target_link_libraries(hello${catkin_LIBRARIES}${OpenCV_LIBS}
)

5.2  修改代码实现订阅

#include <iostream>
#include <ros/ros.h>
#include "geometry_msgs/PoseStamped.h"
#include "nav_msgs/Odometry.h"
#include <Eigen/Eigen>using namespace std;void PoseCallback(const nav_msgs::Odometry::ConstPtr &pos_msg) {Eigen::Vector3d pos;Eigen::Quaterniond q;pos = Eigen::Vector3d(pos_msg->pose.pose.position.x,pos_msg->pose.pose.position.y,pos_msg->pose.pose.position.z);q = Eigen::Quaterniond(pos_msg->pose.pose.orientation.w,pos_msg->pose.pose.orientation.x,pos_msg->pose.pose.orientation.y,pos_msg->pose.pose.orientation.z);cout<<"getPose"<<endl;}int main(int argc, char** argv)
{ros::init(argc, argv, "build_map");ros::NodeHandle node("~");ros::Subscriber transform_sub_;transform_sub_ = node.subscribe("/t265/odom/sample",10, PoseCallback);ros::spin();cout<<"hello"<<endl;
}

5.3 其他消息的订阅可查阅其他资料

6. 发布消息

代码如下:

#include <iostream>
#include <ros/ros.h>
#include "geometry_msgs/PoseStamped.h"
#include "nav_msgs/Odometry.h"
#include <Eigen/Eigen>
#include "std_msgs/String.h"using namespace std;ros::Publisher pub;void PoseCallback(const nav_msgs::Odometry::ConstPtr &pos_msg) {Eigen::Vector3d pos;Eigen::Quaterniond q;pos = Eigen::Vector3d(pos_msg->pose.pose.position.x,pos_msg->pose.pose.position.y,pos_msg->pose.pose.position.z);q = Eigen::Quaterniond(pos_msg->pose.pose.orientation.w,pos_msg->pose.pose.orientation.x,pos_msg->pose.pose.orientation.y,pos_msg->pose.pose.orientation.z);std_msgs::String msg;msg.data = "Hello wanzew!";pub.publish(msg);cout<<"getPose"<<endl;}int main(int argc, char** argv)
{ros::init(argc, argv, "build_map");ros::NodeHandle node("~");ros::Subscriber transform_sub_;pub = node.advertise<std_msgs::String>("topic_m",1000);transform_sub_ = node.subscribe("/t265/odom/sample",10, PoseCallback);ros::spin();cout<<"hello"<<endl;
}

C++ 相关

1. 定义类

2.构造函数、析构函数

2. 循环、判断语句

3. vector, map, list的使用

4. 模板编程入门

2小时c++与ros教学相关推荐

  1. 为了更好的实践与应用-机器人与ROS教学与培训

    第五届中国机器人峰会-机器人操作系统(星火计划ROS)分论坛 主题(为了更好的实践与应用-机器人与ROS教学与培训)分享全文: 01:实践是检验真理的唯一标准,课堂理论教学和实验设计都是为实践与应用服 ...

  2. ROS机器人操作系统资料与资讯(2018年8月)

    暑假好快,转眼开学,假期基本都在出差,工作这些年,发现ROS讨论最火的时候基本在2015-17年,进入18年,基本教程已经完全普及,课程体系也已经完备,国内基本机器人相关专业和方向,都已经逐步开展基于 ...

  3. c语言python零基础教学_编程零基础应当如何开始学习 Python?附教程

    零基础学编程,用python入门是个不错的选择,虽然国内基本上还是以c语言作为入门开发语言,但在国外,已经有很多的学校使用python作为入门编程语言.此外,python在机器学习,人工智能领域也非常 ...

  4. ros入门--中科院软件所ros学习笔记

    视频链接: 中科院软件所-机器人操作系统入门(ROS入门教程)_哔哩哔哩_bilibili 中科院软件所-机器人操作系统入门(ROS入门教程)_哔哩哔哩_bilibili 另外有一个不错的 学习网址: ...

  5. ROS开源小车TurtleBot3详情介绍

    您为什么要选择ROS开源智能小车 ROS(Robot Operating System,机器人操作系统)是目前世界上更主流更多人使用的的机器人开源操作系统.它可以提供操作系统应有的服务,包括硬件抽象, ...

  6. ROS机器人操作系统暑期学校总结和感悟

    https://discourse.ros.org/t/ros-summer-school-in-china-2019-july-27-august-hefei/9494 中国ROS暑期学校将迎来五周 ...

  7. 泰语7个元音变形_大概是最全的音标总结--元音部分

    [音标,收藏这篇就够了,码字不易,记得要先点赞哦-] 由于文章太长,且附有很多图片,怕大家不好加载,所以把元音和辅音分开放了 很多人在问怎么练口语,怎么说得地道,于是就去看美剧,去英语角练习,去和外教 ...

  8. 零基础学python爬虫-零基础如何学爬虫技术?一篇带你入门!(理论+实操+荐书)...

    对于小白来说,爬虫可能是一件非常复杂.技术门槛很高的事情. 但掌握正确的方法,在短时间内做到能够爬取主流网站的数据,其实非常容易实现! 同时,你需要从一开始就有一个具体的目标!只有在目标的驱动下,你的 ...

  9. KubeVela 正式开源:一个高可扩展的云原生应用平台与核心引擎

    [来源:阿里巴巴云原生公众号] 美国西部时间 2020 年 11 月 18 日,在云原生技术"最高盛宴"的 KubeCon 北美峰会 2020 上,CNCF 应用交付领域小组(CN ...

最新文章

  1. 《Code Complete》ch.15 使用条件语句
  2. 【EventBus】事件通信框架 ( 取消注册 | 获取事件参数类型 | 根据事件类型获取订阅者 | 移除相关订阅者 )
  3. Commons Logging 快速入门(五)
  4. oracle中case when关键字的使用
  5. 渗透测试之Nmap命令(一)
  6. 乘方计算(信息学奥赛一本通-T1069)
  7. 07-mysql基本查询,阶段二,条件查询
  8. 笔记本--摄像头驱动--找不到相机--浏览器打开相机失败--未检测到摄像头--剩下的标题我就不想了--太长了
  9. Mesos和Docker的集成
  10. MySQL 入门(七)—— 视图
  11. mysql数据库文件查找网站后台密码_怎么查看数据库的密码?
  12. HI3519 开发交流QQ群
  13. 第十六届全国大学生智能车竞赛创意组获奖名单 | 带有学生与指导教师信息
  14. 威斯敏斯特教堂(西敏寺)墓碑上的话(WestMinster Abbey,When I was young and free...,修身齐家治国平天下)
  15. 记一次npm install 报RequestError: connect ETIMEDOUT 20.205.243.166:443和RequestError: socket hang up
  16. 计算机专业课考研都有哪些,计算机专业考研的课程有哪些
  17. python判断偶数奇数_Python程序检查数字是奇数还是偶数
  18. mysql数据表损坏的常见原因是_MYSQL数据表损坏的分析
  19. vivo android8公测,vivo安卓9.0公测招募开启:明年年初获得推送
  20. pytest之Monkeypatching(猴子补丁)

热门文章

  1. redis 系列17 持久化 AOF
  2. 如何用golang获取linux上文件的访问/创建/修改时间
  3. docker基础——关于安装、常用指令以及镜像制作初体验
  4. ZOJ 1729 Hidden Password
  5. 【下载源码】在线生成网页缩略图.超越Snap.com:WebSnap Beta 1.1 发布。感谢博客园的“萧寒”重写的底层。开源。...
  6. Tech.Ed上海会场都结束了!
  7. 推荐收藏!图深度学习发展历史、最新进展与应用
  8. ECCV2020 Oral | 图像修复之再思考
  9. 超过100G的CVPR 2020 图像匹配挑战赛数据下载!
  10. 口罩人脸检测与分类开源代码汇总