PX4 / PX4-Devguide

PX4 Devguide GitBook
http://dev.px4.io
Other
197 stars 480 forks source link

Creating a Fast RTPS Listener application Documentation Issue #1018

Open amano001 opened 4 years ago

amano001 commented 4 years ago

@TSC21 I have been following the guide to get PX4 running with Gazebo and ROS2 and I have run into another issue with the documentation.

The last line to call fastrtpsgen shows sensor_combined.idl but the file that is in the idl folder is called sensorcombined.idl. cd /path/to/PX4/Firmware/build/px4_sitl_rtps/src/modules/micrortps_bridge mkdir micrortps_listener cd micrortps_listener fastrtpsgen -example x64Linux2.6gcc ../micrortps_client/micrortps_agent/idl/sensor_combined.idl

Also once I was able to generate the files by adding the _ to the end of sensor_combined I then run into the issue below from trying to run the make command in the documentation after altering the function in sensor_combined_subscriber.cxx

`` void sensor_combined_Subscriber::SubListener::onNewDataMessage(Subscriber* sub) { // Take data sensorcombined st;

if(sub->takeNextData(&st, &m_info))
{
    if(m_info.sampleKind == ALIVE)
    {
        // Print your structure data here.
        ++n_msg;
        std::cout << "\n\n\n\n\n\n\n\n\n\n";
        std::cout << "Sample received, count=" << n_msg << std::endl;
        std::cout << "=============================" << std::endl;
        std::cout << "gyro_rad: " << st.gyro_rad().at(0);
        std::cout << ", " << st.gyro_rad().at(1);
        std::cout << ", " << st.gyro_rad().at(2) << std::endl;
        std::cout << "gyro_integral_dt: " << st.gyro_integral_dt() << std::endl;
        std::cout << "accelerometer_timestamp_relative: " << st.accelerometer_timestamp_relative() << std::endl;
        std::cout << "accelerometer_m_s2: " << st.accelerometer_m_s2().at(0);
        std::cout << ", " << st.accelerometer_m_s2().at(1);
        std::cout << ", " << st.accelerometer_m_s2().at(2) << std::endl;
        std::cout << "accelerometer_integral_dt: " << st.accelerometer_integral_dt() << std::endl;
        std::cout << "magnetometer_timestamp_relative: " << st.magnetometer_timestamp_relative() << std::endl;
        std::cout << "magnetometer_ga: " << st.magnetometer_ga().at(0);
        std::cout << ", " << st.magnetometer_ga().at(1);
        std::cout << ", " << st.magnetometer_ga().at(2) << std::endl;
        std::cout << "baro_timestamp_relative: " << st.baro_timestamp_relative() << std::endl;
        std::cout << "baro_alt_meter: " << st.baro_alt_meter() << std::endl;
        std::cout << "baro_temp_celcius: " << st.baro_temp_celcius() << std::endl;

    }
}

}

g++ -c -Wall -fpic -m64 -O2 -std=c++0x -I. -c sensor_combined_Subscriber.cxx -o output/x64Linux2.6gcc/sensor_combined_Subscriber.o sensor_combined_Subscriber.cxx: In member function ‘virtual void sensor_combined_Subscriber::SubListener::onNewDataMessage(eprosima::fastrtps::Subscriber*)’: sensor_combined_Subscriber.cxx:98:45: error: ‘class sensor_combined_’ has no member named ‘gyro_rad’; did you mean ‘gyro_rad_’? std::cout << "gyro_rad: " << st.gyro_rad().at(0); ^~~~~~~~ gyro_rad_ sensor_combined_Subscriber.cxx:99:37: error: ‘class sensor_combined_’ has no member named ‘gyro_rad’; did you mean ‘gyro_rad_’? std::cout << ", " << st.gyro_rad().at(1); ^~~~~~~~ gyro_rad_ sensor_combined_Subscriber.cxx:100:37: error: ‘class sensor_combined_’ has no member named ‘gyro_rad’; did you mean ‘gyro_rad_’? std::cout << ", " << st.gyro_rad().at(2) << std::endl; ^~~~~~~~ gyro_rad_ sensor_combined_Subscriber.cxx:101:53: error: ‘class sensor_combined_’ has no member named ‘gyro_integral_dt’; did you mean ‘gyro_integral_dt_’? std::cout << "gyro_integral_dt: " << st.gyro_integral_dt() << std::endl; ^~~~~~~~~~~~~~~~ gyro_integral_dt_ sensor_combined_Subscriber.cxx:102:69: error: ‘class sensor_combined_’ has no member named ‘accelerometer_timestamp_relative’; did you mean ‘accelerometer_timestamp_relative_’? std::cout << "accelerometer_timestamp_relative: " << st.accelerometer_timestamp_relative() << std::endl; ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ accelerometer_timestamp_relative_ sensor_combined_Subscriber.cxx:103:55: error: ‘class sensor_combined_’ has no member named ‘accelerometer_m_s2’; did you mean ‘accelerometer_m_s2_’? std::cout << "accelerometer_m_s2: " << st.accelerometer_m_s2().at(0); ^~~~~~~~~~~~~~~~~~ accelerometer_m_s2_ sensor_combined_Subscriber.cxx:104:37: error: ‘class sensor_combined_’ has no member named ‘accelerometer_m_s2’; did you mean ‘accelerometer_m_s2_’? std::cout << ", " << st.accelerometer_m_s2().at(1); ^~~~~~~~~~~~~~~~~~ accelerometer_m_s2_ sensor_combined_Subscriber.cxx:105:37: error: ‘class sensor_combined_’ has no member named ‘accelerometer_m_s2’; did you mean ‘accelerometer_m_s2_’? std::cout << ", " << st.accelerometer_m_s2().at(2) << std::endl; ^~~~~~~~~~~~~~~~~~ accelerometer_m_s2_ sensor_combined_Subscriber.cxx:106:62: error: ‘class sensor_combined_’ has no member named ‘accelerometer_integral_dt’; did you mean ‘accelerometer_integral_dt_’? std::cout << "accelerometer_integral_dt: " << st.accelerometer_integral_dt() << std::endl; ^~~~~~~~~~~~~~~~~~~~~~~~~

which when I look into the sensorcombined.cxx shows different naming for those functions shown below have an extra _ at the end compared to the example code at the top that just has st.gyro_rad(). This applies to the timestamp, gyro and accelerometer but there is no barometer or magnotometer in sensorcombined.cxx which breaks the example code trying to make those calls as well.

void sensor_combined_::gyro_rad_(sensor_combined__float_array_3 &&_gyro_rad_)

TSC21 commented 4 years ago

@amano001 the msg spec for sensor_combined has change and the docs for the RTPS listener didn't. That might happen ocasionally has the listener example is not actually something actively being used - it just serves as an example.

May I ask you if you are open to open a PR and fix the naming and fields on the example on docs? Thanks

amano001 commented 4 years ago

will do, I would say the examples are definitely being used. For someone new to this, its hard to know if I screwed up something or if the documentation has a bug (usually I think its me messing it up).