无法在C++脚本中打印Bash与roslaunch定义的ros::params
问题描述
启动后控制台仅打印"hi",从Bash传入的foldername、image_name及roslaunch中定义的size_name均为空,无法正常输出。但Python脚本可正常获取这些参数,请问C++脚本哪里有误?
相关代码
Bash启动脚本
foldername=camera_calibration_$(date +"%m-%d-%Y") im_name="/cam0" roslaunch image_pub cam_calibration.launch foldername:=$foldername image_name:=$im_name
roslaunch文件(cam_calibration.launch)
<launch> <arg name = "foldername" default="camera_calibration" /> <arg name = "image_name" default="/cam1" /> <param name="foldername" type="string" value="$(arg foldername)" /> <param name="image_name" type="string" value="$(arg image_name)" /> <param name="size_name" type="string" value="12x8" /> <param name="square" type="string" value="0.05" /> <node name="im_pub_sub_node" pkg="image_pub" type="im_pub_sub" output="screen"/> <node name="cameracalibrator_node" pkg="camera_calibration" type="cameracalibrator.py" output="screen"/> </launch>
C++节点代码(im_pub_sub.cpp)
int main(int argc, char** argv) { std::string foldername; std::string imagename; std::string si_name; ros::param::get("/size_name", si_name); ros::param::get("/foldername", foldername); ros::param::get("/image_name", imagename); std::cout<<imagename<<std::endl; std::cout<<foldername<<std::endl; std::cout<<si_name<<std::endl; std::cout<<"hi"<<std::endl; }
问题原因及解决方法
你的C脚本没有初始化ROS节点——这是访问ROS参数服务器的必要前提。Python的ROS客户端会隐式处理部分初始化逻辑,但C必须显式完成节点初始化,才能和参数服务器建立通信。
修改后的C++代码如下:
#include <ros/ros.h> #include <iostream> #include <string> int main(int argc, char** argv) { // 初始化ROS节点,节点名需与launch文件中定义的一致 ros::init(argc, argv, "im_pub_sub_node"); std::string foldername; std::string imagename; std::string si_name; // 现在可正常获取参数 ros::param::get("/size_name", si_name); ros::param::get("/foldername", foldername); ros::param::get("/image_name", imagename); std::cout<<imagename<<std::endl; std::cout<<foldername<<std::endl; std::cout<<si_name<<std::endl; std::cout<<"hi"<<std::endl; // 若需节点持续运行,可添加ros::spin()或ros::Rate循环 // ros::spin(); return 0; }
同时需确认CMakeLists.txt中已正确链接roscpp库,确保编译时包含ROS相关依赖。
内容的提问来源于stack exchange,提问作者Nagarjun Vinukonda
相关产品推荐
相关产品推荐

