Page 1 of 1

Distance Scannar Sensor

Posted: Sat Dec 13, 2014 6:58 pm
by Waqar731
Hello
I have difficulty in finding the particular data type for the map values.
For example i have the following line of code

Code: Select all

const CCI_FootBotDistanceScannerSensor::TReadingsMap& tProxReads = m_ds->GetShortReadingsMap();
What will be the preferable data type for GetShortReadingsMap()

Like proximity sensor, we use CVector2 to store values. For example:

Code: Select all

const CCI_FootBotProximitySensor::TReadings& tProxReads = m_pcProximity->GetReadings(); CVector2 cAccumulator;

Re: Distance Scannar Sensor

Posted: Mon Dec 15, 2014 10:25 pm
by pincy
The data structure you use to post-process the data depends on the type of behavior you're developing. It's impossible to reply in general.

For the proximity sensors, for instance, it's not always true that one casts the values as CVector2. The same applies for the distance scanner.

The distance scanner is a rotating scanner. Thus, in principle, it could be used like an enhanced proximity sensor in that one gets angles and distances. However, it's different from a proximity sensor in that the distance scanner rotates (it can see only a part of the neighborhood) and it has two types of readings (short- and long-distance).

Cheers,
Carlo

Re: Distance Scannar Sensor

Posted: Tue Dec 16, 2014 11:42 am
by Waqar731
I have the following code whose purpose is to get readings from the Distance_Scannar_Sensor.

Code: Select all

const CCI_FootBotDistanceScannerSensor::TReadingsMap& tProxReads = m_ds->GetShortReadingsMap(); CVector2 cAccumulator; for(size_t i = 0; i < tProxReads.size(); ++i) { printf("%d\t%f\t\n",tProxReads[i].Distance,tProxReads[i].Angle); cAccumulator += CVector2(tProxReads[i].Distance, tProxReads[i].Angle); }
When i try to execute the code then i get the error on Terminal. How can i resolve this error??

Error is Given Below:


/

Code: Select all

home/waqar-hp/argos2-examples/controllers/distance_scannar/distance_scannar.h: In constructor ‘CFootBotDistanceScannar::CFootBotDistanceScannar()’: /home/waqar-hp/argos2-examples/controllers/distance_scannar/distance_scannar.h:67:14: warning: ‘CFootBotDistanceScannar::m_fDelta’ will be initialized after [-Wreorder] /home/waqar-hp/argos2-examples/controllers/distance_scannar/distance_scannar.h:62:7: warning: ‘argos::Real CFootBotDistanceScannar::m_fWheelVelocity’ [-Wreorder] /home/waqar-hp/argos2-examples/controllers/distance_scannar/distance_scannar.cpp:6:2: warning: when initialized here [-Wreorder] /home/waqar-hp/argos2-examples/controllers/distance_scannar/distance_scannar.cpp: In member function ‘virtual void CFootBotDistanceScannar::ControlStep()’: /home/waqar-hp/argos2-examples/controllers/distance_scannar/distance_scannar.cpp:41:40: error: no match for ‘operator[]’ in ‘tProxReads[i]’ /home/waqar-hp/argos2-examples/controllers/distance_scannar/distance_scannar.cpp:41:40: note: candidate is: /usr/include/c++/4.6/bits/stl_map.h:445:7: note: std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](const key_type&) [with _Key = argos::CRadians, _Tp = float, _Compare = std::less<argos::CRadians>, _Alloc = std::allocator<std::pair<const argos::CRadians, float> >, std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type = float, std::map<_Key, _Tp, _Compare, _Alloc>::key_type = argos::CRadians] /usr/include/c++/4.6/bits/stl_map.h:445:7: note: no known conversion for argument 1 from ‘size_t {aka long unsigned int}’ to ‘const key_type& {aka const argos::CRadians&}’ /home/waqar-hp/argos2-examples/controllers/distance_scannar/distance_scannar.cpp:41:63: error: no match for ‘operator[]’ in ‘tProxReads[i]’ /home/waqar-hp/argos2-examples/controllers/distance_scannar/distance_scannar.cpp:41:63: note: candidate is: /usr/include/c++/4.6/bits/stl_map.h:445:7: note: std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](const key_type&) [with _Key = argos::CRadians, _Tp = float, _Compare = std::less<argos::CRadians>, _Alloc = std::allocator<std::pair<const argos::CRadians, float> >, std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type = float, std::map<_Key, _Tp, _Compare, _Alloc>::key_type = argos::CRadians] /usr/include/c++/4.6/bits/stl_map.h:445:7: note: no known conversion for argument 1 from ‘size_t {aka long unsigned int}’ to ‘const key_type& {aka const argos::CRadians&}’ /home/waqar-hp/argos2-examples/controllers/distance_scannar/distance_scannar.cpp:43:45: error: no match for ‘operator[]’ in ‘tProxReads[i]’ /home/waqar-hp/argos2-examples/controllers/distance_scannar/distance_scannar.cpp:43:45: note: candidate is: /usr/include/c++/4.6/bits/stl_map.h:445:7: note: std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](const key_type&) [with _Key = argos::CRadians, _Tp = float, _Compare = std::less<argos::CRadians>, _Alloc = std::allocator<std::pair<const argos::CRadians, float> >, std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type = float, std::map<_Key, _Tp, _Compare, _Alloc>::key_type = argos::CRadians] /usr/include/c++/4.6/bits/stl_map.h:445:7: note: no known conversion for argument 1 from ‘size_t {aka long unsigned int}’ to ‘const key_type& {aka const argos::CRadians&}’ /home/waqar-hp/argos2-examples/controllers/distance_scannar/distance_scannar.cpp:43:69: error: no match for ‘operator[]’ in ‘tProxReads[i]’ /home/waqar-hp/argos2-examples/controllers/distance_scannar/distance_scannar.cpp:43:69: note: candidate is: /usr/include/c++/4.6/bits/stl_map.h:445:7: note: std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type& std::map<_Key, _Tp, _Compare, _Alloc>::operator[](const key_type&) [with _Key = argos::CRadians, _Tp = float, _Compare = std::less<argos::CRadians>, _Alloc = std::allocator<std::pair<const argos::CRadians, float> >, std::map<_Key, _Tp, _Compare, _Alloc>::mapped_type = float, std::map<_Key, _Tp, _Compare, _Alloc>::key_type = argos::CRadians] /usr/include/c++/4.6/bits/stl_map.h:445:7: note: no known conversion for argument 1 from ‘size_t {aka long unsigned int}’ to ‘const key_type& {aka const argos::CRadians&}’ make[2]: *** [controllers/distance_scannar/CMakeFiles/distance_scannar.dir/distance_scannar.cpp.o] Error 1 make[1]: *** [controllers/distance_scannar/CMakeFiles/distance_scannar.dir/all] Error 2 make: *** [all] Error 2

Re: Distance Scannar Sensor

Posted: Tue Dec 16, 2014 11:59 am
by pincy
The problem with your code is that the distance scanner returns a different data structure with respect to the proximity sensor.

A way to fix the compilation issue you have is the following:

Code: Select all

const CCI_FootBotDistanceScannerSensor::TReadingsMap& tReads = m_ds->GetShortReadingsMap(); CVector2 cAccumulator; for(CCI_FootBotDistanceScannerSensor::TReadingsMap::const_iterator it = tReads.begin(); it != tReads.end(); ++it) { printf("%f\t%f\t\n",it->second.Distance, it->second.Angle.GetValue()); cAccumulator += CVector2(it->second.Distance, it->second.Angle); }
You code had many fundamental errors. I suggest you learn about C++ syntax and types before using ARGoS.

Cheers,
Carlo

Re: Distance Scannar Sensor

Posted: Tue Dec 16, 2014 12:17 pm
by Waqar731
Hello
I just copy and paste your code.

Code: Select all

const CCI_FootBotDistanceScannerSensor::TReadingsMap& tReads = m_ds->GetShortReadingsMap(); CVector2 cAccumulator; for(CCI_FootBotDistanceScannerSensor::TReadingsMap::const_iterator it = tReads.begin(); it != tReads.end(); ++it) { printf("%f\t%f\t\n",it->second.Distance, it->second.Angle.GetValue()); cAccumulator += CVector2(it->second.Distance, it->second.Angle); }
But there are still errors. The error is given below.

Code: Select all

/home/waqar-hp/argos2-examples/controllers/distance_scannar/distance_scannar.h: In constructor ‘CFootBotDistanceScannar::CFootBotDistanceScannar()’: /home/waqar-hp/argos2-examples/controllers/distance_scannar/distance_scannar.h:67:14: warning: ‘CFootBotDistanceScannar::m_fDelta’ will be initialized after [-Wreorder] /home/waqar-hp/argos2-examples/controllers/distance_scannar/distance_scannar.h:62:7: warning: ‘argos::Real CFootBotDistanceScannar::m_fWheelVelocity’ [-Wreorder] /home/waqar-hp/argos2-examples/controllers/distance_scannar/distance_scannar.cpp:6:2: warning: when initialized here [-Wreorder] /home/waqar-hp/argos2-examples/controllers/distance_scannar/distance_scannar.cpp: In member function ‘virtual void CFootBotDistanceScannar::ControlStep()’: /home/waqar-hp/argos2-examples/controllers/distance_scannar/distance_scannar.cpp:41:37: error: request for member ‘Distance’ in ‘it.std::_Rb_tree_const_iterator<_Tp>::operator-> [with _Tp = std::pair<const argos::CRadians, float>, std::_Rb_tree_const_iterator<_Tp>::pointer = const std::pair<const argos::CRadians, float>*]()->std::pair<const argos::CRadians, float>::second’, which is of non-class type ‘const float’ /home/waqar-hp/argos2-examples/controllers/distance_scannar/distance_scannar.cpp:41:58: error: request for member ‘Angle’ in ‘it.std::_Rb_tree_const_iterator<_Tp>::operator-> [with _Tp = std::pair<const argos::CRadians, float>, std::_Rb_tree_const_iterator<_Tp>::pointer = const std::pair<const argos::CRadians, float>*]()->std::pair<const argos::CRadians, float>::second’, which is of non-class type ‘const float’ /home/waqar-hp/argos2-examples/controllers/distance_scannar/distance_scannar.cpp:42:42: error: request for member ‘Distance’ in ‘it.std::_Rb_tree_const_iterator<_Tp>::operator-> [with _Tp = std::pair<const argos::CRadians, float>, std::_Rb_tree_const_iterator<_Tp>::pointer = const std::pair<const argos::CRadians, float>*]()->std::pair<const argos::CRadians, float>::second’, which is of non-class type ‘const float’ /home/waqar-hp/argos2-examples/controllers/distance_scannar/distance_scannar.cpp:42:63: error: request for member ‘Angle’ in ‘it.std::_Rb_tree_const_iterator<_Tp>::operator-> [with _Tp = std::pair<const argos::CRadians, float>, std::_Rb_tree_const_iterator<_Tp>::pointer = const std::pair<const argos::CRadians, float>*]()->std::pair<const argos::CRadians, float>::second’, which is of non-class type ‘const float’ make[2]: *** [controllers/distance_scannar/CMakeFiles/distance_scannar.dir/distance_scannar.cpp.o] Error 1 make[1]: *** [controllers/distance_scannar/CMakeFiles/distance_scannar.dir/all] Error 2 make: *** [all] Error 2

Re: Distance Scannar Sensor

Posted: Tue Dec 16, 2014 12:52 pm
by pincy
I thought you were using ARGoS3. In ARGoS2:

Code: Select all

const CCI_FootBotDistanceScannerSensor::TReadingsMap& tReads = m_ds->GetShortReadingsMap(); CVector2 cAccumulator; for(CCI_FootBotDistanceScannerSensor::TReadingsMap::const_iterator it = tReads.begin(); it != tReads.end(); ++it) { printf("%f\t%f\t\n",it->second, it->first.GetValue()); cAccumulator += CVector2(it->second, it->first); }

Re: Distance Scannar Sensor

Posted: Tue Dec 16, 2014 12:56 pm
by Waqar731
I am using ARGOS 2

Re: Distance Scannar Sensor

Posted: Tue Dec 16, 2014 12:58 pm
by Waqar731
O Yes, its working properly.

Re: Distance Scannar Sensor

Posted: Tue Dec 16, 2014 3:36 pm
by Waqar731
Hello
I want to show rays of footbot_distance_scanner. I use following line of code in xml. But this line don't show rays thrown by the sensor.

Code: Select all

<footbot_distance_scanner implementation="rot_z_only" show_rays="true" />

Thanks