ROS Resources: Documentation | Support | Discussion Forum | Index | Service Status | ros @ Robotics Stack Exchange
Ask Your Question
0

How to print ros::params defined in bash and roslaunch in c++ script?

asked 2022-11-03 12:47:19 -0500

Nagarjun gravatar image

updated 2022-11-03 12:47:45 -0500

I have a bash script as follows:

bash
foldername=camera_calibration_$(date +"%m-%d-%Y")
im_name="/cam0"
roslaunch image_pub cam_calibration.launch foldername:=$foldername image_name:=$im_name

My roslaunch script is as follows:

<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>

My C++ script (im_pub_sub.cpp) as follows:

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;
}

When I launch it I only get "hi" print on my console but not foldername, image_name defined from bash and si_name param defined in launch file. It prints empty like nothing for other params defined.

Can anyone please let me know what is wrong? And how to get the print?

edit retag flag offensive close merge delete

1 Answer

Sort by ยป oldest newest most voted
1

answered 2022-11-03 13:26:23 -0500

Nagarjun gravatar image

I got it. That's because you can't get rosparams from launch file until rosnode initilaization and node Nodehandler being defined.

int main(int argc, char** argv) {

    ros::init(argc, argv, "im_sub_pub_cpp");
    ros::NodeHandle nh_;

    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;
}

Then this works.

edit flag offensive delete link more

Question Tools

1 follower

Stats

Asked: 2022-11-03 12:47:19 -0500

Seen: 55 times

Last updated: Nov 03 '22