ROS中subscribe接受时用boost::bind为回掉函数传参报错???

#include
#include
#include
#include
#include
#include
#include
#include
#include
//ros::NodeHandle ph;

void callBack(const geometry_msgs::Twist twist, ros::Publisher& path_pub)
{
// ros::Publisher path_pub = ph.advertise("trajectory", 1, true);
nav_msgs::Path path;

ros::Time current_time, last_time;
current_time = ros::Time::now();
    last_time = ros::Time::now();

    path.header.stamp=current_time;
     path.header.frame_id="odom";

ros::Rate loop_rate(1);

double x=0.0;
double y = 0.0;
    double th=0.0;

while (ros::ok())
{
    double temp_x;
            double temp_y;
    double dt=0.1;
    temp_x = twist.linear.x * dt; 
    x += temp_x;
            temp_y=twist.linear.y * dt;
    y+=temp_y;

    geometry_msgs::PoseStamped this_pose_stamped;

    this_pose_stamped.pose.position.x = x;
    this_pose_stamped.pose.position.y = y;

    geometry_msgs::Quaternion goal_quat = tf::createQuaternionMsgFromYaw(th);
    this_pose_stamped.pose.orientation.x = goal_quat.x;
    this_pose_stamped.pose.orientation.y = goal_quat.y;
    this_pose_stamped.pose.orientation.z = goal_quat.z;
    this_pose_stamped.pose.orientation.w = goal_quat.w;

    this_pose_stamped.header.stamp=current_time;
    this_pose_stamped.header.frame_id = "odom";
    path.poses.push_back(this_pose_stamped);

            path_pub.publish(path);
    ros::spinOnce();               // check for incoming messages

    last_time = current_time;
    loop_rate.sleep();
}

}

int main(int argc, char **argv)
{
ros::init(argc, argv, "showpath");
ros::NodeHandle ph;
//接受消息
ros::Publisher path_pub = ph.advertise("trajectory", 1, true);

    ros::Subscriber sub=ph.subscribe<geometry_msgs::Twist>("cmd_vel", 1,boost::bind(callBack, _1, path_pub));

// ros::Subscriber sub=ph.subscribe("cmd_vel", 1,callBack);
ros::spin();
return 0;

}
图片说明图片说明


c++
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Python+OpenCV计算机视觉

Python+OpenCV计算机视觉

在ros上实时运行视觉slam,保存地图问题

环境:ubuntu16.04, ros kinetic, kinect v1 问题描述: 使用Kinect v1相机实时的运行由orb_slam2系统修改之后的视觉slam系统,现在无法保存运行之和的地图。有大神能帮助解决吗?最好给出具体代码 代码: ``` ```int main(int argc, char **argv) { ros::init(argc, argv, "RGBD"); ros::start(); if(argc != 3) { cerr << endl << "Usage: 1111" << endl; ros::shutdown(); return 1; } // 创建SLAM系统,并初始化所有的线程 ``` ``` orb_slam::System SLAM(argv[1],argv[2],orb_slam::System::RGBD,true); ImageGrabber igb(&SLAM); ros::NodeHandle nh; message_filters::Subscriber<sensor_msgs::Image> rgb_sub(nh, "/camera/rgb/image_color", 1); message_filters::Subscriber<sensor_msgs::Image> depth_sub(nh, "/camera/depth_registered/hw_registered/image_rect_raw", 1); typedef message_filters::sync_policies::ApproximateTime<sensor_msgs::Image, sensor_msgs::Image> sync_pol; message_filters::Synchronizer<sync_pol> sync(sync_pol(10), rgb_sub,depth_sub); sync.registerCallback(boost::bind(&ImageGrabber::GrabRGBD,&igb,_1,_2)); pcl::PointCloud<pcl::PointXYZRGBA>::Ptr global_map(new pcl::PointCloud<pcl::PointXYZRGBA>); global_map = SLAM.mpPointCloudMapping->GetGlobalMap(); pcl::PointCloud<pcl::PointXYZRGB>::Ptr global_map_copy(new pcl::PointCloud<pcl::PointXYZRGB>); // signal(SIGINT, MySigintHandler); while(ros::ok())//使用ros::ok()与ros::spinOnce()搭配实现回调 { pcl::copyPointCloud(*global_map, *global_map_copy); //向topic : /orb_slam_with_kinect1/output 发送信息,发送频率为loop_rate(10),即10hz,消息池最大容量为10. ros::Publisher pcl_pub = nh.advertise<sensor_msgs::PointCloud2> ("/orb_slam_with_kinect1/output", 10); sensor_msgs::PointCloud2 output; // 转换成ROS下的数据类型 最终通过topic发布 pcl::toROSMsg(*global_map_copy,output); output.header.stamp=ros::Time::now(); output.header.frame_id ="camera_rgb_frame"; ros::Rate loop_rate(10); pcl_pub.publish(output); ros::spinOnce(); loop_rate.sleep(); } // 保存轨迹与地图 SLAM.save(); SLAM.Shutdown(); SLAM.SaveTrajectoryTUM("CameraTrajectory.txt"); ros::shutdown(); return 0; } ``` ```

进行ROS kinetic环境配置时显示:bash:/opt/ros/kinetic/setup.bash:没有那个文件或目录?

自己确实是照网上说的,用gedit~/.bashrc命令检查,也更正了大小写和无关的配置,但更正错误后再次运行source~/.bashrc时,还是会出现同样的问题。是不是我真的没有/opt/ros/kinetic/setup这个文件啊?因为我记得我之前有几个软件包下载失败了(猜测) 运行gedit~/.bashrc后的结果如下:

使用ros调用笔记本电脑摄像头时遇到的问题

最近根据网络上的教程试着用ros调用笔记本电脑的摄像头,运行 ``` roslaunch usb_cam usb_cam-test.launch ``` 时会弹出一个的image_raw的窗口,笔记本摄像头的启动指示灯也会点亮,但是没有图像。 过一会窗口就自己关闭了。 ![图片说明](https://img-ask.csdn.net/upload/201902/12/1549975418_56387.png) 找了好久也没有遇见有相同问题的,不知道有没有大佬能指点以下。

ROS roscd找不到功能包 环境变量缺少/opt/ros/ingido/stacks

我按装ROS后 建立工作空间和功能包 但是在使用roscd 进入功能包时却显示找不到这个包,然后使用rosed 编辑这个包里的消息文件,也显示找不到这个包 然后我echo $ROS_PACKAGE_PATH 查看环境变量 与其他文章中显示路径相比对比少了/opt/ros/ingido/stacks 是不是因为少了这个路径 其他文章路径:/home/用户名/catkin_ws/src:/opt/ros/kinetic/share:/opt/ros/ingido/stacks 我的:/home/用户名/catkin_ws/src:/opt/ros/kinetic/share 然后我查阅文章添加source /opt/ros/kinetic/setup.bash" >> ~/.bashrc source ~/catkin_ws/devel/setup.sh" >> ~/.bashrc source ~/.bashrc 还是没有/opt/ros/ingido/stacks

ROS,查找环境变量缺少/opt/ros/kinetic/stacks

正常来讲,输入$ echo $ROS_PACKAGE_PATH 会显示opt/ros/kinetic/share:/opt/ros/kinetic/stacks 但是我的只有opt/ros/kinetic/share

工业相机图像发布问题咨询

最近在使用pointgrey工业相机,想要利用外触发信号进行图像信息的发布(包含时间戳和图片),代码如下 sensor_msgs::ImageConstPtr img_msg; img_msg= cv_bridge::CvImage(std_msgs::Header(), "bgr8", image_opencv0).toImageMsg(); img_msg->header.stamp = ros::Time::now(); pub.publish(img_msg); 其中image_opencv0是我得到的mat类型的图像,我想得到其时间戳,然后将两者打包共同发布,但是出现了错误,希望有能力的各位看一下

请教一个ROS编写发布者程序的问题

按照机器人操作系统浅析中发布者程序编写的步骤 到最后一步catkin时候一直报错报错如下: [ 50%] Built target hello [ 75%] Building CXX object agitr/CMakeFiles/pubvel.dir/pubvel.cpp.o /home/lucky/ros/src/agitr/pubvel.cpp:12:3: error: stray ‘\342’ in program msg.angular.z=2*double(rand())/double(RAND_MAX)−1; ^ /home/lucky/ros/src/agitr/pubvel.cpp:12:3: error: stray ‘\210’ in program /home/lucky/ros/src/agitr/pubvel.cpp:12:3: error: stray ‘\222’ in program /home/lucky/ros/src/agitr/pubvel.cpp: In function ‘int main(int, char**)’: /home/lucky/ros/src/agitr/pubvel.cpp:12:53: error: expected ‘;’ before numeric constant msg.angular.z=2*double(rand())/double(RAND_MAX)−1; ^ agitr/CMakeFiles/pubvel.dir/build.make:62: recipe for target 'agitr/CMakeFiles/pubvel.dir/pubvel.cpp.o' failed make[2]: *** [agitr/CMakeFiles/pubvel.dir/pubvel.cpp.o] Error 1 CMakeFiles/Makefile2:963: recipe for target 'agitr/CMakeFiles/pubvel.dir/all' failed make[1]: *** [agitr/CMakeFiles/pubvel.dir/all] Error 2 Makefile:138: recipe for target 'all' failed make: *** [all] Error 2 Invoking "make -j1 -l1" failed pubvel 文件为 #include <ros/ros.h> #include <geometry_msgs/Twist.h> #include <stdlib.h> int main (int argc,char **argv) { ros::init(argc,argv,"publish_velocity") ; ros::NodeHandle nh ; ros::Publisher pub=nh.advertise<geometry_msgs::Twist>("turtle1/cmd_vel",1000); srand(time(0)); ros::Rate rate(2); while(ros::ok()){ geometry_msgs::Twist msg; msg.linear.x = double (rand ( ) ) / double(RAND_MAX); msg.angular.z=2*double(rand())/double(RAND_MAX)−1; pub.publish(msg); ROS_INFO_STREAM("Sending random velocity command:"<<"linear="<<msg.linear.x<<"angular="<<msg.angular.z); rate.sleep(); } }

现在的Qtcreator-community怎么运行ROS程序

我尝试用了以前的在启动文件加上-bash -i -c的代码,但是还是不能加载 catkin _ ws内的ROS程序,想问一下有人通过现在的Qtcreator-community成功读取ROS程序的吗?

使用rosserial开发:如何在arduino中包含自定义的ros消息?

在写arudino的时候,想要订阅ros的一个话题,但是消息的类型是自定义的, 应该怎么生成arduino能识别的头文件???

如何使用Qtcreator运行ROS程序(bash -i -c的方法不能解决)

最近想用Qtcreator运行ROS程序,但是发现用Qtcreator中找不到ros的包,网上大家都说使用bash -i -c的方法可以解决,但是我试了一下发现并没有效果。 qt的版本为5.9.8,最近想用Qtcreator运行ROS程序4.8.2,Ubuntu系统16.04。

Qt多线程QtConcurrent::map(vector, spin),spin能否是类方法

rt QtConcurrent::map(vector, spin) 发现qt的例子中给的都是定义在外面的函数,而不是类方法,若换成类方法调试报错。 新手,请大家指教!

看起來很簡單的一個問題:ROS找不到消息頭文件

~/catkin_ws/src/beginner_tutoruals/src/add_two_ints_server.cpp:2:43: fatal error: beginner_tutorials/AddTwoInts.h: No such file or directory compilation terminated. beginner_tutoruals/CMakeFiles/add_two_ints_server.dir/build.make:62: recipe for target 'beginner_tutoruals/CMakeFiles/add_two_ints_server.dir/src/add_two_ints_server.cpp.o' failed make[2]: *** [beginner_tutoruals/CMakeFiles/add_two_ints_server.dir/src/add_two_ints_server.cpp.o] Error 1 CMakeFiles/Makefile2:363: recipe for target 'beginner_tutoruals/CMakeFiles/add_two_ints_server.dir/all' failed make[1]: *** [beginner_tutoruals/CMakeFiles/add_two_ints_server.dir/all] Error 2 make[1]: *** Waiting for unfinished jobs.... ~/catkin_ws/src/beginner_tutoruals/src/add_two_ints_client.cpp:2:43: fatal error: beginner_tutorials/AddTwoInts.h: No such file or directory compilation terminated. beginner_tutoruals/CMakeFiles/add_two_ints_client.dir/build.make:62: recipe for target 'beginner_tutoruals/CMakeFiles/add_two_ints_client.dir/src/add_two_ints_client.cpp.o' failed make[2]: *** [beginner_tutoruals/CMakeFiles/add_two_ints_client.dir/src/add_two_ints_client.cpp.o] Error 1 CMakeFiles/Makefile2:1357: recipe for target 'beginner_tutoruals/CMakeFiles/add_two_ints_client.dir/all' failed make[1]: *** [beginner_tutoruals/CMakeFiles/add_two_ints_client.dir/all] Error 2 Makefile:138: recipe for target 'all' failed

ROS安装出现错误无法继续进行

ROS安装时出现 正在读取软件包列表... 完成 正在分析软件包的依赖关系树 正在读取状态信息... 完成 N: 忽略‘ros-latest.list、’(于目录‘/etc/apt/sources.list.d/’),鉴于它的文件扩展名无效 N: 忽略‘ros-latest.list。’(于目录‘/etc/apt/sources.list.d/’),鉴于它的文件扩展名无效 E: 无法定位软件包 ros-kinetic-desktop-full 然后进行不下去了怎么办 求求大佬帮忙

ROS kinetic 更改默认的Opencv3

笔记本电脑装了最新版本到ROS kinetic,此版本默认支持Opencv3;但是好多程序都是基于Opencv2编码的,求教如何将kinetic中默认设置的Opencv3更改为Opencv2? ps:由于显卡原因(惠普暗影精灵),笔记本双系统只能装ubuntu16.04,对应的ros版本就只能是最新的kinetic。Ros中有一个cv-bridge的东西,但是不知道如何用。

按下CTRL+C,如何确定是ros中的ctrl+c还是ubuntu中的ctrl+c

在执行程序时,我需要关闭ros::spin()的回调,按下ctrl+c,结果程序整个就退出了,如何执行接下去的程序呢?

ORBSLAM2在ros-kinetic错误

最近学习ORB SLAM ,按照github 指南,成功编译运行单目/立体/rgbd在数据集上到运行程序; 具体见https://github.com/raulmur/ORB_SLAM2; _但是按照github指南结合ros运行orbslam时出现错误。具体情况如下: --------------- ORB-SLAM2 Copyright (C) 2014-2016 Raul Mur-Artal, University of Zaragoza. This program comes with ABSOLUTELY NO WARRANTY; This is free software, and you are welcome to redistribute it under certain conditions. See LICENSE.txt. Input sensor was set to: Stereo Loading ORB Vocabulary. This could take a while... Vocabulary loaded! OpenCV Error: Bad argument (Invalid pointer to file storage) in cvGetFileNodeByName, file /tmp/binarydeb/ros-kinetic-opencv3-3.1.0/modules/core/src/persistence.cpp, line 709 terminate called after throwing an instance of 'cv::Exception' what(): /tmp/binarydeb/ros-kinetic-opencv3-3.1.0/modules/core/src/persistence.cpp:709: error: (-5) Invalid pointer to file storage in function cvGetFileNodeByName -------以上是报错内容 我用到是ubuntu 16.04,只能安装ros最新的kinetic; 根据报错内容,查到如下问题: 1.kinetic 默认用opencv 3;而我安装的是opencv2,似乎orbslam中也用的是opencv2,因此调用ros时出现版本兼容问题; 2. 查找响应解决方案,包括更改makelist和更改cvbridge,但是无果,个人觉得还有其他步骤;具体见 http://blog.csdn.net/gauxonz/article/details/52842099 ; 和http://wiki.ros.org/opencv3 ; 3. 所以个人感觉如果将ros-kinetic中默认的opencv3换成opencv2即可;由于刚接触ubuntu和ros,求各位帮忙指点啦! 提前感谢!

ubuntu安装ROS过程中下载速度极慢

我更换了阿里云源了。 ![图片说明](https://img-ask.csdn.net/upload/201912/09/1575903163_247906.png) 我尝试了: 1.换网络 (1). 手机热点 (2). wifi (3). 挂VPN 而且这三个联网方式里,每一个都可以播放高清视频啥的没问题,就是ros下载极慢 2.自己装这个libvtk6.2,但是装了之后,重新运行 ```shell sudo apt-get install ros-kinetic-desktop-full ``` 始终都是下图的情况 。如下图: ![图片说明](https://img-ask.csdn.net/upload/201912/09/1575903299_633339.png) 求助求助,大哥们,这是为什么啊?????

在ros中跑slam数据集该怎么保存轨迹信息?

在ros里面跑euroc数据集,我打算保存运行的轨迹信息,在rviz上有显示,但我不知道该怎么样保存运行后的轨迹信息以用来与真值做比较。 求大佬zhi'dian

怎么用ROS实现自己的算法

最近在学ros,突然看到,一句话,ros只是一个工具,方便进行算法的验证,我就想,到底怎么用这个工具呢?简单点说,假如我优化了一个算法,怎么在ROS上让机器人按照我的算法跑呢,也就是说我怎么在ROS上实现自己的算法呢。

2019 Python开发者日-培训

2019 Python开发者日-培训

150讲轻松搞定Python网络爬虫

150讲轻松搞定Python网络爬虫

设计模式(JAVA语言实现)--20种设计模式附带源码

设计模式(JAVA语言实现)--20种设计模式附带源码

YOLOv3目标检测实战:训练自己的数据集

YOLOv3目标检测实战:训练自己的数据集

java后台+微信小程序 实现完整的点餐系统

java后台+微信小程序 实现完整的点餐系统

三个项目玩转深度学习(附1G源码)

三个项目玩转深度学习(附1G源码)

初级玩转Linux+Ubuntu(嵌入式开发基础课程)

初级玩转Linux+Ubuntu(嵌入式开发基础课程)

2019 AI开发者大会

2019 AI开发者大会

玩转Linux:常用命令实例指南

玩转Linux:常用命令实例指南

一学即懂的计算机视觉(第一季)

一学即懂的计算机视觉(第一季)

4小时玩转微信小程序——基础入门与微信支付实战

4小时玩转微信小程序——基础入门与微信支付实战

Git 实用技巧

Git 实用技巧

Python数据清洗实战入门

Python数据清洗实战入门

使用TensorFlow+keras快速构建图像分类模型

使用TensorFlow+keras快速构建图像分类模型

实用主义学Python(小白也容易上手的Python实用案例)

实用主义学Python(小白也容易上手的Python实用案例)

程序员的算法通关课:知己知彼(第一季)

程序员的算法通关课:知己知彼(第一季)

MySQL数据库从入门到实战应用

MySQL数据库从入门到实战应用

机器学习初学者必会的案例精讲

机器学习初学者必会的案例精讲

手把手实现Java图书管理系统(附源码)

手把手实现Java图书管理系统(附源码)

极简JAVA学习营第四期(报名以后加助教微信:eduxy-1)

极简JAVA学习营第四期(报名以后加助教微信:eduxy-1)

.net core快速开发框架

.net core快速开发框架

玩转Python-Python3基础入门

玩转Python-Python3基础入门

Python数据挖掘简易入门

Python数据挖掘简易入门

微信公众平台开发入门

微信公众平台开发入门

程序员的兼职技能课

程序员的兼职技能课

Windows版YOLOv4目标检测实战:训练自己的数据集

Windows版YOLOv4目标检测实战:训练自己的数据集

HoloLens2开发入门教程

HoloLens2开发入门教程

微信小程序开发实战

微信小程序开发实战

Java8零基础入门视频教程

Java8零基础入门视频教程

相关热词 c# 开发接口 c# 中方法上面的限制 c# java 时间戳 c#单元测试入门 c# 数组转化成文本 c#实体类主外键关系设置 c# 子函数 局部 c#窗口位置设置 c# list 查询 c# 事件 执行顺序
立即提问
相关内容推荐