ROS.Sharp: что это такое и как использовать
ROS.Sharp — это библиотека, разработанная на C#, для создания приложений с использованием ROS (Robot Operating System). С помощью этой библиотеки можно создавать подписчиков и издателей, а также взаимодействовать с сервером параметров и сервисами.
Как использовать:
Install-Package ROS.Sharp -Version 1.1.0
Издатель:
class Program { static Thread thread; static void Main(string[] args) { ROS.ROS_MASTER_URI = "http://192.168.20.132:11311"; ROS.ROS_HOSTNAME = "192.168.20.1"; ROS.ROS_IP = "192.168.20.132";
string nodeName = "bbb";
ROS.Init(nodeName);
NodeHandle nh = new NodeHandle();
Publisher<Messages.std_msgs.String> pub = nh.Advertise<Messages.std_msgs.String>("/chatter", 1, false);
thread = new Thread(() =>
{
int i = 0;
while (ROS.ok)
{
i++;
pub.Publish(new Messages.std_msgs.String { data = "Message" + i });
if (i == 65536)
i = 0;
Thread.Sleep(1000);
}
});
thread.Start();
Console.CancelKeyPress += Console_CancelKeyPress;
}
private static void Console_CancelKeyPress(object sender, ConsoleCancelEventArgs e)
{
ROS.Shutdown();
ROS.WaitForShutdown();
}
}
3. **Подписчик**:
class Program { static void Main(string[] args) { ROS.ROS_MASTER_URI = "http://192.168.20.132:11311"; ROS.ROS_HOSTNAME = "192.168.20.1"; ROS.ROS_IP = "192.168.20.132";
string nodeName = "aaa";
ROS.Init(nodeName);
NodeHandle nh = new NodeHandle();
Subscriber<Messages.std_msgs.String> sub = nh.Subscribe<Messages.std_msgs.String>("/chatter", 10, subCallback);
Console.CancelKeyPress += Console_CancelKeyPress;
}
private static void Console_CancelKeyPress(object sender, ConsoleCancelEventArgs e)
{
ROS.Shutdown();
ROS.WaitForShutdown();
}
private static void subCallback(Messages.std_msgs.String argument)
{
Console.WriteLine(argument.data);
}
}
4. **Сервер сервисов**:
class Program { static void Main(string[] args) { ROS.ROS_MASTER_URI = "http://192.168.20.132:11311"; ROS.ROS_HOSTNAME = "192.168.20.1"; ROS.ROS_IP = "192.168.20.132"; ROS.Init("ServiceServerTest"); NodeHandle nodeHandle = new NodeHandle(); ServiceServer server = nodeHandle.AdvertiseService<TwoInts.Request, TwoInts.Response>("/add_two_ints", addition); Console.CancelKeyPress += Console_CancelKeyPress; }
private static bool addition(TwoInts.Request req, ref TwoInts.Response resp)
{
resp.sum = req.a + req.b;
return true;
}
private static void Console_CancelKeyPress(object sender, ConsoleCancelEventArgs e)
{
ROS.Shutdown();
}
}
5. **Клиент сервисов**:
class Program { static void Main(string[] args) { ROS.ROS_MASTER_URI = "http://192.168.20.132:11311"; ROS.ROS_HOSTNAME = "192.168.20.1"; ROS.ROS_IP = "192.168.20.132"; ROS.Init("ServiceClientTest"); NodeHandle nodeHandle = new NodeHandle(); new Thread(new ThreadStart(() => { Random r = new Random(); while (ROS.ok) { try { TwoInts.Request req = new TwoInts.Request() { a = r.Next(100), b = r.Next(100) }; TwoInts.Response resp = new TwoInts.Response(); DateTime before = DateTime.Now; bool res = nodeHandle.ServiceClient<TwoInts.Request, TwoInts.Response>("/add_two_ints").Call(req, ref resp); TimeSpan dif = DateTime.Now.Subtract(before);
string str = "";
if (res)
str = "" + req.a + " + " + req.b + " = " + resp.sum + "\n";
else
str = "call failed after\n";
class Program { static void Main(string[] args) { ROS.ROS_MASTER_URI = "http://192.168.20.132:11311"; ROS.ROS_HOSTNAME = "192.168.20.1"; ROS.ROS_IP = "192.168.20.132"; IDictionary remappings; RemappingHelper.GetRemappings(out remappings); Network.Init(remappings); Master.Init(remappings); ThisNode.Init("", remappings, (int)(InitOption.AnonymousName | InitOption.NoRousout)); Param.Init(remappings);
// Получить все параметры
List<string> list = Param.List();
foreach (string s in list)
{
Console.WriteLine(s);
}
// Получить значения параметров
foreach (string s in list)
{
bool flag = Param.Has(s);
if (!flag)
{
Console.WriteLine("Не существует параметра {0}", s);
continue;
}
object obj = Param.Get(s);
if (obj == null)
{
Console.WriteLine("Ошибка получения параметра");
continue;
}
Console.WriteLine("Параметр: {0}, значение: {1}", s, obj);
}
// Установить значение параметра
// Param.set(key, value);
// Удалить параметр
// Param.del(key)
Console.ReadKey();
}
}
**2. Генерация кода на основе msg- и srv-файлов**
static void Main(string[] args) { string inputDir = AppDomain.CurrentDomain.BaseDirectory + "common_msgs/"; string outputdir = AppDomain.CurrentDomain.BaseDirectory + "Messages";
Console.WriteLine("Начало генерации ROS Messages...\n");
GenerateHelper.GenerateMsgAndSrv(inputDir, outputdir);
Console.WriteLine("Генерация завершена");
Console.ReadLine();
}
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )