Distance Scannar Sensor

Requests regarding how to set up experiments in ARGoS.
Waqar731
Posts: 65
Joined: Thu Oct 23, 2014 12:33 pm
Location: Pakistan
Contact:

Distance Scannar Sensor

Postby Waqar731 » Sat Dec 13, 2014 6:58 pm

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;
Waqar Hussain

pincy
Site Admin
Posts: 632
Joined: Thu Mar 08, 2012 8:04 pm
Location: Boston, MA
Contact:

Re: Distance Scannar Sensor

Postby pincy » Mon Dec 15, 2014 10:25 pm

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
I made ARGoS.

Waqar731
Posts: 65
Joined: Thu Oct 23, 2014 12:33 pm
Location: Pakistan
Contact:

Re: Distance Scannar Sensor

Postby Waqar731 » Tue Dec 16, 2014 11:42 am

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

pincy
Site Admin
Posts: 632
Joined: Thu Mar 08, 2012 8:04 pm
Location: Boston, MA
Contact:

Re: Distance Scannar Sensor

Postby pincy » Tue Dec 16, 2014 11:59 am

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
I made ARGoS.

Waqar731
Posts: 65
Joined: Thu Oct 23, 2014 12:33 pm
Location: Pakistan
Contact:

Re: Distance Scannar Sensor

Postby Waqar731 » Tue Dec 16, 2014 12:17 pm

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

pincy
Site Admin
Posts: 632
Joined: Thu Mar 08, 2012 8:04 pm
Location: Boston, MA
Contact:

Re: Distance Scannar Sensor

Postby pincy » Tue Dec 16, 2014 12:52 pm

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); }
I made ARGoS.

Waqar731
Posts: 65
Joined: Thu Oct 23, 2014 12:33 pm
Location: Pakistan
Contact:

Re: Distance Scannar Sensor

Postby Waqar731 » Tue Dec 16, 2014 12:56 pm

I am using ARGOS 2
Waqar Hussain

Waqar731
Posts: 65
Joined: Thu Oct 23, 2014 12:33 pm
Location: Pakistan
Contact:

Re: Distance Scannar Sensor

Postby Waqar731 » Tue Dec 16, 2014 12:58 pm

O Yes, its working properly.
Waqar Hussain

Waqar731
Posts: 65
Joined: Thu Oct 23, 2014 12:33 pm
Location: Pakistan
Contact:

Re: Distance Scannar Sensor

Postby Waqar731 » Tue Dec 16, 2014 3:36 pm

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


Return to “How to... ?”