-
-
Save alexsleat/1372845 to your computer and use it in GitHub Desktop.
| #include <stdio.h> | |
| #include <stdlib.h> | |
| #include "ros/ros.h" | |
| #include "std_msgs/MultiArrayLayout.h" | |
| #include "std_msgs/MultiArrayDimension.h" | |
| #include "std_msgs/Int32MultiArray.h" | |
| int main(int argc, char **argv) | |
| { | |
| ros::init(argc, argv, "arrayPublisher"); | |
| ros::NodeHandle n; | |
| ros::Publisher pub = n.advertise<std_msgs::Int32MultiArray>("array", 100); | |
| while (ros::ok()) | |
| { | |
| std_msgs::Int32MultiArray array; | |
| //Clear array | |
| array.data.clear(); | |
| //for loop, pushing data in the size of the array | |
| for (int i = 0; i < 90; i++) | |
| { | |
| //assign array a random number between 0 and 255. | |
| array.data.push_back(rand() % 255); | |
| } | |
| //Publish array | |
| pub.publish(array); | |
| //Let the world know | |
| ROS_INFO("I published something!"); | |
| //Do this. | |
| ros::spinOnce(); | |
| //Added a delay so not to spam | |
| sleep(2); | |
| } | |
| } |
| #include <stdio.h> | |
| #include <stdlib.h> | |
| #include <vector> | |
| #include <iostream> | |
| #include "ros/ros.h" | |
| #include "std_msgs/MultiArrayLayout.h" | |
| #include "std_msgs/MultiArrayDimension.h" | |
| #include "std_msgs/Int32MultiArray.h" | |
| int Arr[90]; | |
| void arrayCallback(const std_msgs::Int32MultiArray::ConstPtr& array); | |
| int main(int argc, char **argv) | |
| { | |
| ros::init(argc, argv, "arraySubscriber"); | |
| ros::NodeHandle n; | |
| ros::Subscriber sub3 = n.subscribe("array", 100, arrayCallback); | |
| ros::spinOnce(); | |
| for(j = 1; j < 90; j++) | |
| { | |
| printf("%d, ", Arr[j]); | |
| } | |
| printf("\n"); | |
| return 0; | |
| } | |
| void arrayCallback(const std_msgs::Int32MultiArray::ConstPtr& array) | |
| { | |
| int i = 0; | |
| // print all the remaining numbers | |
| for(std::vector<int>::const_iterator it = array->data.begin(); it != array->data.end(); ++it) | |
| { | |
| Arr[i] = *it; | |
| i++; | |
| } | |
| return; | |
| } |
Hi,
Just wanted to add one thing, the code wasn't working for me until I changed ros::spinOnce(); to ros::spin for Subscribe.cpp.
Thanks!
@cipri-tom .. the way i understand it is ... an array is a one dimensional list of items ... say from 0 to 10, and each item can be found using Arr[i] ... but a multiArray is a multidimensional array ... something like this
MultiArray= 0 | 1 | 3 | 4 | 5
---------------------
6 | 7 | 8 | 9 | 10
and so an item in this is array is found using Arr[i,j] coordinates .. so Arr[0,0] = 0, Arr[0,1] = 6, and so on .... i hope i got it right
Line 33 of publisher.cpp should be
pub.publish(array);
In case I am running only the subscriber.
Please help me with the command line ros tool rostopic
$rostopic pub /bot/test/massrange std_msgs/Float32MultiArray "layout:
dim:
- label: min_step_max_time
size: 4
stride: 1
data_offset: 0
data: [0.0 1.0 2.0 3.0]"
Aiming to send
float var[4] = {0.0, 0.1, 0.2, 0.3};
getting following warning:
[WARN] [1524667914.429192]: Inbound TCP/IP connection failed: <class 'struct.error'>: 'required argument is not a float' when writing 'label: "min_step_max_time"
size: 4
stride: 1'
Hi,
Just wanted to add one thing, the code wasn't working for me until I changed
ros::spinOnce();toros::spinfor Subscribe.cpp.Thanks!
Of course spinOnce is used inside an infinite loop.
@rahuldeo2047 Have you found out how to subscibe to that topic and get the array data?
I would like to know how the message std_msgs/Int32MultiArray is defined. I mean how is the data is formatted or structured in such as Int32MultiArray.msg.
Hi,
Thanks for this, its helping me a lot
I'm new to ROS and learning to interface it with Arduino. When I run the Publish.cpp code, I encounter an error in line 19, this line of code
ros::Publisher pub = n.advertise<std_msgs::Int32MultiArray>("array", 100);`
This is the error message
expected primary-expression before '>' token
I will appreciate help from anyone who has an idea.
Thanks
@Gbouna looks likes it's been a while, but did you happen to find a solution to this problem above? Currently stuck on the same thing
Hi,
Thank you for the tutorial! Would you mind explaining what is the difference between an
arrayand amultiArray? When is one preferred over the other?Also, what do you think would be a good way of publishing an array of
geometry_msgs::Point? 😄Many thanks!